C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■3957  LogParserをスレッドで負荷をかけるとライブラリが登録
□投稿者/ 中博俊 -(2007/05/30(Wed) 10:05:21)
>

    分類:[Windows 全般] 

    こんにちは中です。

    わんくま全体のPVを調べないといけないのでLogParserかけていたのですが、うちはCPUgが4個なので、20%くらいしか動いてくれません。
    非行率です。

    なので処理をすべて非同期で動かすためにキュー化して、delegate.BeginInvokeで並列処理をするようにくんだのですが、LogParserに処理をさせるところで負荷があがると”ライブラリが登録されていません”とエラーになります。

    実際にはその状態でがっつり100%CPUにいかないのであきらめましたが。

    これってあくまでLogParserの問題なのか、スレッドモデルがの問題なんでしょうか?
親記事 /過去ログ13より / 関連記事表示
削除チェック/

■83889  Re[1]: 動画再生ソフトにリンクURLをドロップしたい
□投稿者/ 魔界の仮面弁士 -(2017/04/19(Wed) 16:32:01)
記事No.83888 のレス /過去ログ143より / 関連記事表示
削除チェック/

■87121  DataGridViewCheckBoxCellについて
□投稿者/ MTK -(2018/04/13(Fri) 14:19:50)

    分類:[C#] 

    お世話になります。

    DataGridViewの1行目にチェックボックスを設定するため、フォームのロード時にDataGridViewCheckBoxCellを設定しています。
    きちんと1行目にチェックボックスが出るようになったのですが、チェックボックスの大きさが思いの外小さかったため、
    チェックボックスだけでなくセルをクリックしても、チェックが入るようにしたいと思い、以下のCellClickイベントを追加しました。


    private void GridCellClick(object sender, DataGridViewCellEventArgs e)
    {
    // 1行目がクリックされた場合のみ
    if (this.changeReceive && e.RowIndex == 0)
    {
    // イベント受取を停止
    this.changeReceive = false;

    // チェックを反転
    this.dataGridView[e.ColumnIndex, e.RowIndex].Value = !(bool)this.dataGridView[e.ColumnIndex, e.RowIndex].Value;

    // イベント受取を再開
    this.changeReceive = true;
    }
    }

    しかしこの実装をすると、チェックボックスがあるセルを押してからフォーカスを外さなければ、チェックのONOFFが切り替わりません。
    Refresh や CommitEdit メソッドも呼んでみましたがダメでした。
    何か特別な方法が必要なのでしょうか?
親記事 /過去ログ149より / 関連記事表示
削除チェック/

■87124  Re[1]: DataGridViewCheckBoxCellについて
□投稿者/ Hongliang -(2018/04/13(Fri) 14:52:19)
    .Valueを変更した後、DataGridViewのEndEdit()を呼び出すようにしては。
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87125  Re[2]: DataGridViewCheckBoxCellについて
□投稿者/ MTK -(2018/04/13(Fri) 15:48:04)
    No87124 (Hongliang さん) に返信

    回答ありがとうございます。


    > .Valueを変更した後、DataGridViewのEndEdit()を呼び出すようにしては。

    Value変更 → EndEdit としてみましたが、うまくいきませんでした。

    他にも
    BeginEdit → Value変更 → EndEdit 

    BeginEdit → Value変更 → EndEdit → CommitEdit
    も試してみたのですが、どちらもうまくいかないようです。
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87126  Re[3]: DataGridViewCheckBoxCellについて
□投稿者/ PANG2 -(2018/04/13(Fri) 16:06:40)
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87129  Re[4]: DataGridViewCheckBoxCellについて
□投稿者/ MTK -(2018/04/13(Fri) 17:10:29)
    No87126 (PANG2 さん) に返信

    回答ありがとうございます。


    DataGridViewの変更後は、明示的にカレント行を移動しないと反映されない仕様ということですかね。
    となると変更後、フォーカスを移動、もしくは外すという方向でやるしかなさそうですね。
    そちらでの対応を考えてみようと思います。
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87130  Re[5]: DataGridViewCheckBoxCellについて
□投稿者/ PANG2 -(2018/04/13(Fri) 17:32:39)
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87131  Re[6]: DataGridViewCheckBoxCellについて
□投稿者/ MTK -(2018/04/13(Fri) 18:10:18)
    No87130 (PANG2 さん) に返信

    対策1のEndEditについてはHongliangさんにご指摘頂いて試したのですが、できませんでした。
    AcceptChanges の実行や 直接 DataRow を更新 については、今回のDataGridViewCheckBoxCellやDataGridViewにそもそも見つかりませんでした。
    似たようなものがないか見てみたのですが、私には見つけることができませんでした。
    何か方法がありますでしょうか?
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87157  Re[7]: DataGridViewCheckBoxCellについて
□投稿者/ やや -(2018/04/17(Tue) 14:13:52)
    2018/04/17(Tue) 14:16:05 編集(投稿者)

    No87131 (MTK さん) に返信
    > ■No87130 (PANG2 さん) に返信
    >
    > 対策1のEndEditについてはHongliangさんにご指摘頂いて試したのですが、できませんでした。
    > AcceptChanges の実行や 直接 DataRow を更新 については、今回のDataGridViewCheckBoxCellやDataGridViewにそもそも見つかりませんでした。
    > 似たようなものがないか見てみたのですが、私には見つけることができませんでした。
    > 何か方法がありますでしょうか?

    上記の方法はDataTableをDataGridViewにバインドしている場合の解決策と思われます。
    バインドをしている場合、this.dataGridView.DataSourceにDataTableのインスタンスアドレスが格納されているはずなので、そちらを参照して試すとうまくいくかもしれません。
    バインドではなく、1セルずつ項目を作成している場合は別のアプローチが必要だと思います。
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87158  Re[8]: DataGridViewCheckBoxCellについて
□投稿者/ MTK -(2018/04/17(Tue) 16:51:23)
    No87157 (やや さん) に返信

    > 上記の方法はDataTableをDataGridViewにバインドしている場合の解決策と思われます。
    > バインドをしている場合、this.dataGridView.DataSourceにDataTableのインスタンスアドレスが格納されているはずなので、そちらを参照して試すとうまくいくかもしれません。
    > バインドではなく、1セルずつ項目を作成している場合は別のアプローチが必要だと思います。

    回答ありがとうございます。

    今回はバインド等を行っていないため、別のアプローチになりそうです。
    スマートな解決方法が見つからず、現状ではセルをクリックした際にフォーカスを外す処理を入れて反映させるようにしているところです。
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87160  Re[1]: DataGridViewCheckBoxCellについて
□投稿者/ 魔界の仮面弁士 -(2018/04/18(Wed) 09:46:24)
    No87121 (MTK さん) に返信
    > チェックボックスだけでなくセルをクリックしても、チェックが入るようにしたいと思い、

    DataGridViewCheckBoxCell の ContentBounds プロパティが返す範囲を
    「チェックボックス部」から、「セル全体」に広げてしまった方が手っ取り早いかも。


    public partial class Form1 : Form
    {
      public Form1()
      {
        InitializeComponent();

        // 今回の実験対象となる DataGridView
        dgv = new DataGridView() { Dock = DockStyle.Fill };
        dgv.AllowUserToAddRows = false;
        dgv.ColumnCount = 5;
        dgv.RowCount = 10;

        changeReceive = new List<CheckBox>();
        for (int c = 0; c < dgv.ColumnCount; c++)
        {
          // No87121 「DataGridViewの1行目にチェックボックスを設定する」
          dgv.Columns[c].HeaderText = "列" + c;
          dgv[c, 0] = new CheckBoxCell();

          // 【デバッグ用】
          // チェックボックスセルの状態を
          // 確認するためのチェックボックス
          var chk = new CheckBox() { Dock = DockStyle.Top };
          Controls.Add(chk);
          changeReceive.Add(chk);
          chk.BringToFront();
        }
        Controls.Add(dgv);
        dgv.BringToFront();

        // 【デバッグ用】
        // DataGridViewCheckBoxCell の状態が変化したら
        // それを CheckBox に伝える
        dgv.CellValueChanged += dgv_CellValueChanged;
      }
      DataGridView dgv;
      List<CheckBox> changeReceive;

      // 【デバッグ用】
      private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
      {
        var dgv = (DataGridView)sender;
        if (e.ColumnIndex >= 0 && e.RowIndex == 0)
        {
          var b = (bool)dgv[e.ColumnIndex, 0].Value;
          changeReceive[e.ColumnIndex].Checked = b;
        }
      }


      #region DataGridViewCheckBoxCell の派生実装
      private class CheckBoxCell : DataGridViewCheckBoxCell
      {
        public CheckBoxCell() : this(false) { }
        public CheckBoxCell(bool threeState) : base(threeState)
        {
          // データソースの既定の型を System.Boolean にしておく
          TrueValue = true;
          FalseValue = Value = false;
        }
        /// <summary>セルの余白部でもチェックボックスを反応させる</summary>
        protected override Rectangle GetContentBounds(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex)
        {
          // return base.GetContentBounds(graphics, cellStyle, rowIndex);
          var cdr = base.DataGridView.GetCellDisplayRectangle(base.ColumnIndex, rowIndex, false);
          return new Rectangle(0, 0, cdr.Width, cdr.Height);
        }
        /// <summary>クリックされたら即時にチェックボックスの状態を変更</summary>
        protected override void OnContentClick(DataGridViewCellEventArgs e)
        {
          base.OnContentClick(e);
          base.DataGridView.EndEdit();
        }
        /// <summary>チェックボックスをダブルクリックした場合にも反応させる</summary>
        protected override void OnContentDoubleClick(DataGridViewCellEventArgs e)
        {
          // base.OnContentDoubleClick(e);
          this.OnContentClick(e);
        }
      }
      #endregion
    }
記事No.87121 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87165  Re[2]: DataGridViewCheckBoxCellについて
□投稿者/ MTK -(2018/04/18(Wed) 16:45:54)
    No87160 (魔界の仮面弁士 さん) に返信

    回答ありがとうございます。


    > DataGridViewCheckBoxCell の ContentBounds プロパティが返す範囲を
    > 「チェックボックス部」から、「セル全体」に広げてしまった方が手っ取り早いかも。

    実際に検証をしてみましたが、まさにこの動きがベストです。
    セルクリックをチェックボックスに結びつけるのでは無く、チェックボックスの範囲をセル全体にする というのが目から鱗でした。
    それ以外のコードの部分もとても勉強になりました。
    ありがとうございました。
記事No.87121 のレス / END /過去ログ149より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -