2

でフォームを開発していdatagridviewます。

私が欲しい結果は次のとおりです。

  • ユーザーが読み取り専用セルをクリックすると、カーソルが編集可能セルに移動します。
  • ユーザーが編集可能セルをクリックすると、カーソルはこの現在の編集可能セルになります。

私はこれをオンにしCell_Enter Eventます(これをコード化する理由がCell_Enterあります。Cell_Enterを使用する必要があります)。

DataGridViewCell cell = myGrid.Rows[cursorRow].Cells[cursorCol];
myGrid.CurrentCell = cell;
myGrid.BeginEdit(true);

クリックしてEditable Cellも問題ありません。クリックするとReadOnly Cell例外エラーが発生します。

エラー- > 操作は無効です。これは、SetCurrentCellAddressCore関数への再入可能な呼び出しが発生するためです。

それで、この問題の解決策はありますか?(ユーザーがをクリックするReadOnly Cellと、カーソルがEditableセルに移動します。)

編集:必要な解決策は、現在のセルではない他のセルにカーソルを移動するにはどうすればよいですか?

4

3 に答える 3

2

この問題の解決策をここで見つけました。


      private void myGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            //Do stuff
            Application.Idle += new EventHandler(Application_Idle);

        }

        void Application_Idle(object sender, EventArgs e)
        {
            Application.Idle -= new EventHandler(Application_Idle);
            myGrid.CurrentCell = myGrid[cursorCol,cursorRow];
        }
于 2013-02-07T07:34:45.313 に答える
1

を使用してみてくださいIf.. else ..statement

if (cursorCol == 1) //When user clicks on ReadOnly Cell, the Cursor will move to Editable Cell.
{
   myGrid.CurrentCell = myGrid[cursorRow, cursorCol];
}
else //When user clicks on Editable Cell, the Cursor will be on this Current Editable Cell.
{
  //Do stuff
  myGrid.BeginEdit(true);
}
于 2013-02-07T05:03:54.690 に答える
1

これがあなたの状況でうまくいくかどうかは 100% 確信が持てませんが、クライアントのばかげた UI 要件の 1 つが原因で、このような問題に遭遇したことがあります。クイックフィックスは、コードを でラップすることでしたBeginInvoke。例えば:

BeginInvoke((Action)delegate
{
    DataGridViewCell cell = myGrid.Rows[cursorRow].Cells[cursorCol];
    myGrid.CurrentCell = cell;
    myGrid.BeginEdit(true);
});

基本的に、これにより、CellEnterイベントの後にコードが実行DataGridViewされ、例外の原因となった舞台裏で実行できることは何でも実行できるようになります。

DataGridView最終的に、拡張されてBeginInvoke不要になったカスタム コントロールにリファクタリングされました。

于 2013-02-07T18:02:26.313 に答える