utilizo un cuadro de texto oculto para editar todos los elementos de ListView/subelementos. El único problema es que el cuadro de texto debe desaparecer tan pronto como se produzca un evento fuera del cuadro de texto y la vista de lista no active el evento de desplazamiento, de modo que si desplaza la vista de lista, el cuadro de texto seguirá estando visible. Para evitar este problema que creó el evento de desplazamiento con este overrided listview.
Aquí está mi código, constatly reutilizarlo lo que podría ser de ayuda para alguien:
ListViewItem.ListViewSubItem SelectedLSI;
private void listView2_MouseUp(object sender, MouseEventArgs e)
{
ListViewHitTestInfo i = listView2.HitTest(e.X, e.Y);
SelectedLSI = i.SubItem;
if (SelectedLSI == null)
return;
int border = 0;
switch (listView2.BorderStyle)
{
case BorderStyle.FixedSingle:
border = 1;
break;
case BorderStyle.Fixed3D:
border = 2;
break;
}
int CellWidth = SelectedLSI.Bounds.Width;
int CellHeight = SelectedLSI.Bounds.Height;
int CellLeft = border + listView2.Left + i.SubItem.Bounds.Left;
int CellTop =listView2.Top + i.SubItem.Bounds.Top;
// First Column
if (i.SubItem == i.Item.SubItems[0])
CellWidth = listView2.Columns[0].Width;
TxtEdit.Location = new Point(CellLeft, CellTop);
TxtEdit.Size = new Size(CellWidth, CellHeight);
TxtEdit.Visible = true;
TxtEdit.BringToFront();
TxtEdit.Text = i.SubItem.Text;
TxtEdit.Select();
TxtEdit.SelectAll();
}
private void listView2_MouseDown(object sender, MouseEventArgs e)
{
HideTextEditor();
}
private void listView2_Scroll(object sender, EventArgs e)
{
HideTextEditor();
}
private void TxtEdit_Leave(object sender, EventArgs e)
{
HideTextEditor();
}
private void TxtEdit_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
HideTextEditor();
}
private void HideTextEditor()
{
TxtEdit.Visible = false;
if (SelectedLSI != null)
SelectedLSI.Text = TxtEdit.Text;
SelectedLSI = null;
TxtEdit.Text = "";
}
recomiendo el editor in situ. Mucho más fácil de implementar. –
El segundo ejemplo es bueno, solo recuerde que debe agregar un subelemento pase lo que pase, incluso si es solo texto en blanco o si no recibe una excepción fuera de rango. – Vidar
Con respecto a la segunda gran solución, no olvide que el control que envía a la GUI debe agregarse al control. no se puede simplemente enviar un "nuevo cuadro de texto", se arrojará una excepción Null (intenta manejar a su padre) – ephraim