none
Datagridviewのクリック制御 RRS feed

  • 質問

  • はじめまして。

    Datagridviewにて特定のColumnIndex以外はクリックさせたくないのですが・・・datagridview.enbled = false だと表全体がコントロールされてしまうので、

    例えば選択されたColomnIndexが2以外をクリックさせないような制御方法が有れば何か良い方法が有ればご教授をお願い致します。

     

     

    2006年8月28日 2:37

回答

  • mars12さん

    返信ありがとう御座います。そして内容不十分の記述で申し訳ないです^^;

    やりたいことは、ヘッダー部分の制御ではなくて、データを入力させるフィールドだけにフォーカスさせたいのです。(ReadOnlyの制御をさせているセルのところ(非入力フィールド)に対してはユーザの動作を制限したいのです。)

     

    取り合えず、記載されたソースを参考にして作ってみます。有難う御座います。

    2006年8月29日 2:11

すべての返信

  • いまいちやりたいことがわからないですが
    (クリックさせたくないのはセルなのかヘッダなのか、クリックさせないときにどうしたいのか等)、
    ヘッダー部分ならヘッダー部分をクリックされたときのイベントを拾えばよいのでないでしょうか。

            dataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_ColumnHeaderMouseClick);

            void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                if (e.ColumnIndex != 2)
                {
                    // 該当するもの以外が押されたときの処理
                }
            }

     単純に並び替えしたくないとかなら
                dataGridView1.Columns[2].SortMode = DataGridViewColumnSortMode.NotSortable;
    な感じでだめでしょうか。

    2006年8月28日 10:16
  • mars12さん

    返信ありがとう御座います。そして内容不十分の記述で申し訳ないです^^;

    やりたいことは、ヘッダー部分の制御ではなくて、データを入力させるフィールドだけにフォーカスさせたいのです。(ReadOnlyの制御をさせているセルのところ(非入力フィールド)に対してはユーザの動作を制限したいのです。)

     

    取り合えず、記載されたソースを参考にして作ってみます。有難う御座います。

    2006年8月29日 2:11
  • DataGridViewにはフォーカスを制御する仕組みは標準では用意されていないようです。
    もしやるなら、以下のようにして、OnMouseDownやOnKeyDownを握りつぶすしかないでしょう。
    以下の例では、3列目だけクリックできないようにしています。
    
    public class dataGridView1RestrictFocus : DataGridView
    {
      protected override void OnMouseDown(MouseEventArgs e)
      {
        if (this.HitTest(e.X, e.Y).ColumnIndex != 2)      
          base.OnMouseDown(e);
      }
    }
    
    2006年8月29日 2:18
    モデレータ
  • mars12さん

    datagridview1.CellMouseClick += new DataGridViewCellMouseEventHandler(datagridview1_CellMouseClick);

     

    private void datagridview1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                // 入力セル以外の場合
                if (e.ColumnIndex != 3){

                      // 処理
                }
            }

     

    で解決致しました。ありがとう御座いました。

    2006年8月29日 2:35
  • trapemiyaさん

    回答して頂きありがとう御座います。

    記載して頂いたやり方もあるんですね^^;

    色々と勉強になりました。本当に有難う御座いました。

    2006年8月29日 2:37