Hallo allerseits,
ich möchte in einem ListView einzelne Zellen editieren. Dazu lege ich eine TextBox über die entsprechende Zelle, editiere diese und kopiere das Ergebnis in das SubItem. Mit einem Code von Codezentrale "Editieren von ListView Subitems mittels TextBox" funktioniert das auch prinzipiell. Allerdings erscheint die TextBox nicht über der zu editierenden Zelle, sondern 45 Pixel zu tief und 2 Pixel zu weit rechts. Hier ist die entsprechende Stelle:
// Event des ListViews
// zum Merken des zuletzt angeklickten ListViewItems
private void ListViewRGB_MouseUp(object sender, MouseEventArgs e)
{
ListViewHitTestInfo htInfo = ListViewRGB.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 ListViewRGB_DoubleClick(object sender, EventArgs e)
{
// Größe anpassen
_tbEdit.Top = ListViewRGB.Top - 45 + _lvSubItemEdit.Bounds.Top + 2;
_tbEdit.Left = ListViewRGB.Left -2 + _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();
}
ListViewRGB ist meine Listbox. _tbEdit ist die Textbox.
Ich habe schon -45 und -2 als Korrektur eingefügt, aber das kann es ja nicht wirklich sein.
Wo ist mein Fehler? Hat jemand eine Idee?
Wer ist denn der Parent
vom _tbEdit
?
Und sitzt die ListViewRGB
direkt auf der Form
oder hast du evtl. noch ein Panel
o.ä. als Parent
davon?
Das beste ist, du benutzt das ListViewRGB
als Parent
vom _tbEdit
- dann brauchst du nur relativ davon die Position berechnen.
Ich denke, dass ich _tbEdit an ListViewRGB angehängt habe.
ListViewRGB.Controls.Add(_tbEdit);
ListViewRGB ist in einer GroupBox und es gibt noch ein Label mit der Überschrift oberhalb von ListViewRGB.
Habe jetzt gerade festgestellt: wenn ich ListViewRGB innerhalb der GroupBox verschiebe, ändert sich auch der Offset...
Wenn es schon direkt der ListViewRGB
untergeordnet ist, dann brauchst du dessen Position (ListViewRGB.Top
, ListViewRGB.Left
) nicht mehr (und diese sind wohl (45, 2)...):
_tbEdit.Top = _lvSubItemEdit.Bounds.Top + 2;
_tbEdit.Left = _lvSubItemEdit.Bounds.Left + 2;
Es funktioniert jetzt und ist nicht mehr abhängig von der Position der ListView. Allerdings muss ich immer noch eine Positions-Korrektur machen.
_tbEdit.Top = _lvSubItemEdit.Bounds.Top + 2;
_tbEdit.Left = _lvSubItemEdit.Bounds.Left + 6;
Die könnte noch von irgendwelchen Paddings und Margins herkommen.
Danke für deine Hilfe!