// auf dem Formular befindet sich ein ListView mit Namen ListView1
// alle Zellen des Formulars können editiert werden
public partial class Form1 : Form
{
// die Textbox mit der Editiert wird
private TextBox _tbEdit = new TextBox();
// Verweise auf das ListViewElement
private ListViewItem.ListViewSubItem _lvSubItemEdit = null;
public frmMain()
{
InitializeComponent();
// Textbox initialisieren
_tbEdit.Visible = false;
// Rahmen entfernen, damit die Textbox genau in die Zelle des ListViews passt
_tbEdit.BorderStyle = BorderStyle.None;
// Eventhandler für die Textbox hinzufügen
_tbEdit.Leave += new EventHandler(_tbEdit_Leave);
_tbEdit.KeyPress += new KeyPressEventHandler(_tbEdit_KeyPress);
// der Form hinzufügen
this.Controls.Add(_tbEdit);
}
// Event des ListViews
// zum Merken des zuletzt angeklickten ListViewItems
private void ListView1_MouseUp(object sender, MouseEventArgs e)
{
ListViewHitTestInfo htInfo = ListView1.HitTest(e.X, e.Y);
if (htInfo != null)
{
if (htInfo.Item != null && htInfo.SubItem != null)
{
_lvSubItemEdit = htInfo.SubItem;
}
}
}
// bei Doppelklick auf ein SubItem die Textbox anzeigen
private void ListView1_DoubleClick(object sender, EventArgs e)
{
// Größe anpassen
_tbEdit.Top = ListView1.Top + _lvSubItemEdit.Bounds.Top + 2;
_tbEdit.Left = ListView1.Left + _lvSubItemEdit.Bounds.Left + 2;
_tbEdit.Width = _lvSubItemEdit.Bounds.Width;
_tbEdit.Height = _lvSubItemEdit.Bounds.Height;
// Inhalt übergeben
_tbEdit.Text = _lvSubItemEdit.Text;
// anzeigen
_tbEdit.Visible = true;
_tbEdit.BringToFront();
_tbEdit.Focus();
}
// Event für den Tastendruck im Textfeld
private void _tbEdit_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case (char)(int)Keys.Escape:
// bei Escape Eingabe nicht übernehmen
EndEditing(false);
break;
case (char)(int)Keys.Enter:
// bei Escape Eingabe übernehmen
EndEditing(true);
break;
}
}
// Event für das Verlassen des Textfeldes per Maus
// die Eingabe im Textfeld wird nicht übernommen
private void _tbEdit_Leave(object sender, EventArgs e)
{
EndEditing(false);
}
// Aktion beim Verlassen des Textfeldes
private void EndEditing(bool AcceptChanges)
{
if (_lvSubItemEdit != null)
{
if (AcceptChanges)
{
// bei "Enter", den Text übernehmen
_lvSubItemEdit.Text = _tbEdit.Text;
}
}
// Textbox ausblenden
_tbEdit.Visible = false;
}
}