Zugreifen Datagridview Zellenwert, während sein Wert wird editiert
-
22-08-2019 - |
Frage
Ich habe ein Formular mit einem Datagridview und wenn Benutzer Startwert für in der ersten Reihe ersten Zelle eintritt, kann auch f2 drücken, die diesen Wert unterwerfen, aber ich kippe Wert Zugriff Zelle, es sei denn Benutzer Tab getroffen und in eine andere Zelle gehen
Folgende ist mein Code für den Zugriff auf Zellenwert, wenn f2 getroffen wird
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
var key = new KeyEventArgs(keyData);
ShortcutKey(this, key);
return base.ProcessCmdKey(ref msg, keyData);
}
protected virtual void ShortcutKey(object sender, KeyEventArgs key)
{
switch (key.KeyCode)
{
case Keys.F2:
MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());
break;
}
}
dataGridView1.SelectedCells [0] .Wert null zurück
Lösung 2
@BFree dank Code inspiriert mich;) warum nicht nur this.dataGridView1.EndEdit Aufruf (); vor MessageBox.Show (dataGridView1.SelectedCells [0] .Value.ToString ());
Dieser Code funktioniert gut:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
var key = new KeyEventArgs(keyData);
ShortcutKey(this, key);
return base.ProcessCmdKey(ref msg, keyData);
}
protected virtual void ShortcutKey(object sender, KeyEventArgs key)
{
switch (key.KeyCode)
{
case Keys.F2:
dataGridView1.EndEdit();
MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());
break;
}
}
Andere Tipps
Wie wäre es so etwas wie dies stattdessen tun. Haken in die Datagridview der „EditingControlShowing“ Ereignis und erfassen die F2 dort. Einige Code:
public partial class Form1 : Form
{
private DataTable table;
public Form1()
{
InitializeComponent();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(HandleEditingControlShowing);
this.table = new DataTable();
table.Columns.Add("Column");
table.Rows.Add("Row 1");
this.dataGridView1.DataSource = table;
}
private void HandleEditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var ctl = e.Control as DataGridViewTextBoxEditingControl;
if (ctl == null)
{
return;
}
ctl.KeyDown -= ctl_KeyDown;
ctl.KeyDown += new KeyEventHandler(ctl_KeyDown);
}
private void ctl_KeyDown(object sender, KeyEventArgs e)
{
var box = sender as TextBox;
if (box == null)
{
return;
}
if (e.KeyCode == Keys.F2)
{
this.dataGridView1.EndEdit();
MessageBox.Show(box.Text);
}
}
}
Die Idee ist einfach, Sie in das EditingControlShowing Ereignis verknüpfen. Jedes Mal, wenn eine Zelle Bearbeitungsmodus eintritt, dass wird ausgelöst. Die kühle Sache ist, macht es die tatsächliche zugrundeliegende Steuerung und Sie können es auf die tatsächliche WinForms Kontrolle gegossen und Haken in all seinen Veranstaltungen wie gewohnt.
Sie können versuchen, diese
string str = dataGridView.CurrentCell.GetEditedFormattedValue
(dataGridView.CurrentCell.RowIndex, DataGridViewDataErrorContexts.Display)
.ToString();
Es gibt einen OnKeyDown
Handler für das DataGridViewCell
:
http://msdn.microsoft .com / en-us / library / system.windows.forms.datagridviewcell.onkeydown.aspx
Doch das einzige Problem ist, dass Sie Ihre eigene Zelle DataGridViewTextBoxCell
Basis haben werden erstellen, um die beabsichtigte Funktionalität zu erhalten. Denn es gibt kein Ereignis für diesen Handler ausgesetzt.