morgen!
ich hab ein problem..
ich habe ein kleines fester erstellt, in dem ein datagridview ist.
in diesem gridview möchte ich (nachdem es aufpoppt) gleich ohne umwege per tastatur durch die rows navigieren.
es funktionert, aber leider erst nachdem ich einmal in eine beliebige zelle geklickt habe.
ich habe bereits:
gridView.Focus();
gridView.Select();
probiert...
ohne gewünschtes ergebnis
ist der fokus doch nicht richtig gesetzt?
wo kann der fehler liegen?
Also bei mir klappt das sofort ohne das ich irgendwas machen musste...
vielleicht hilft es wenn du nen bissl zeigst wie du das gebastelt hast
public partial class Hardwarekategorien : Window
{
public HardwareBezeichnungen hardwareBezeichnung = new HardwareBezeichnungen();
private List<HardwareBezeichnungen> hardwarebezeichnungen = new List<HardwareBezeichnungen>();
public Hardwarekategorien()
{
InitializeComponent();
gridView.ColumnHeadersHeight = 20;
gridView.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
gridView.AllowUserToAddRows = false;
gridView.AllowUserToDeleteRows = false;
gridView.AllowUserToResizeColumns = false;
gridView.AllowUserToResizeRows = false;
hardwarebezeichnungen = generateGridSource();
gridView.DataSource = hardwarebezeichnungen;
gridView.Columns[0].Width = 45;
gridView.Columns[1].Width = 153;
gridView.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(gridView_CellClick);
gridView.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(gridView_CellDoubleClick);
gridView.KeyDown += new System.Windows.Forms.KeyEventHandler(gridView_KeyDown);
gridView.Focus();
gridView.Select();
gridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
}
private void gridView_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == System.Windows.Forms.Keys.Enter)
{
if (gridView.SelectedRows.Count > 0)
{
hardwareBezeichnung = hardwarebezeichnungen[gridView.SelectedRows[0].Index];
this.Close();
}
}
}
private void gridView_CellDoubleClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1)
{
hardwareBezeichnung = hardwarebezeichnungen[e.RowIndex];
this.Close();
}
}
private void gridView_CellClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
if(e.RowIndex!=-1)
hardwareBezeichnung = hardwarebezeichnungen[e.RowIndex];
}
<Window x:Class="RptGerät.Hardwarekategorien"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Title="Hardwarekategorien" Height="330" Width="200" WindowStyle="ToolWindow" ResizeMode="NoResize">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="270"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<wfi:WindowsFormsHost VerticalAlignment="Stretch" Grid.Row="0" >
<wf:DataGridView x:Name="gridView" RowHeadersVisible="False" />
</wfi:WindowsFormsHost>
<Button Height="25" Width="30" Content="Ok" Grid.Row="1" Click="Button_Click"></Button>
</Grid>
</Window>
Der einfachste Weg ist dafür die TabOrder richtig einzustellen (d.h. das DataGridView erhält den kleinsten Wert). Am besten über den Designer (Menüpunkt 'Ansicht/Tab-Reihenfolge' oder so ähnlich - habe gerade VS nicht am laufen).
Andernfalls solltest du Select() erst im Shown-Ereignis aufrufen (nicht schon im Konstruktor, da die Komponente sichtbar sein muß, um auch den Fokus erhalten zu können).
P.S: Verwendest du jetzt WPF oder WinForms?
ahh.. ok
werd das prüfen
danke schon mal..
ich verwende ein misch masch aus wpf und win-forms hier bei der sache...
besten dank!
läuft 😃