title image


Smiley Re: Eventhandler wird nicht ausgelöst!?
Hi,



du willst verhindern, dass die Zeile deselektiert wird.

Das ist vom ColumnStyle aus nicht sinnvoll zu steuern, da der Focus ja wie gesagt nicht mehr am Column liegt.



Ich würde da an deiner Stelle die Events des DataGrids verwenden.



Folgender Code selektiert immer die ganze Zeile, wenn eine Zelle der 2ten Spalte selektiert wird:



myDataGrid.CurrentCellChanged += new EventHandler(myDataGrid_CurrentCellChanged);



private void myDataGrid_CurrentCellChanged(object sender, EventArgs e)

{

DataGrid grid = (DataGrid)sender;

if( grid.CurrentCell.ColumnNumber == 1 )

grid.Select( grid.CurrentCell.RowNumber );

}



Somit bleibt in deiner MADGridTextBox Klasse nichts mehr übrig außer das Überschreiben der Edit Methode:



public class MADGridTextBox : DataGridTextBoxColumn

{

public MADGridTextBox(){}



protected override void Edit(System.Windows.Forms.CurrencyManager source,

int rowNum, System.Drawing.Rectangle bounds,

bool readOnly, string instantText, bool cellIsVisible)

{}

}



Natürlich wird jetzt noch nicht abgefangen, wenn mit den Pfeiltasten über die Tabelle hinaus navigiert wird, also in Zeile 1 stehen und Pfeil nach oben drücken.



Dazu noch ein paar Infos:

Das Event KeyPress wird bei Pfeiltasten nicht ausgelöst.

Dazu musst du das Event KeyDown verwenden.

Und ums noch extra kompliziert zu machen, wird das KeyDown Event nur für Keys ausgelöst, für die die Methode IsInputKey des Controls 'true' zurückgibt.

Die Pfeiltasten gehören da leider nicht dazu :-)



Also musst du eine eigene Klasse abgeleitet vom DataGrid erstellen und die dann verwenden.



Mit folgendem Code wird KeyDown ignoriert, wenn der Cursor in der ersten Zeile steht und die Pfeiltaste nach oben gedrückt wird oder wenn der Cursor in der ersten Spalte steht und die Pfeiltaste nach links gedrückt wird:



public class MyDataGrid : DataGrid

{

protected override bool IsInputKey(Keys keyData)

{

switch( keyData )

{

case Keys.Left:

case Keys.Up:

return true;

default:

return base.IsInputKey (keyData);

}

}



protected override void OnKeyDown(KeyEventArgs e)

{

switch( e.KeyData )

{

case Keys.Left:

if( this.CurrentCell.ColumnNumber != 0 )

base.OnKeyDown (e);

break;

case Keys.Up:

if( this.CurrentCell.RowNumber != 0 )

base.OnKeyDown (e);

break;

default:

base.OnKeyDown (e);

break;

}

}

}



Gruß

Bostich

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: