// auf dem Formular befindet sich ein ListView mit Namen ListView1
public partial class Form1 : Form
{
// die Combobox mit der Editiert wird
private ComboBox _cbEdit = new ComboBox();
// Verweise auf das ListViewElement
private ListViewItem.ListViewSubItem _lvSubItemEdit = null;
public frmMain()
{
InitializeComponent();
// ComboBox initialisieren
_cbEdit.Visible = false;
// Werte nur anzeigen, kein Editieren zulassen
_cbEdit.DropDownStyle = ComboBoxStyle.DropDownList;
// Eventhandler für die Textbox hinzufügen
_cbEdit.Leave += new EventHandler(_cbEdit_Leave);
// ein paar Beispielwerte
_cbEdit.Items.Add("0.5");
_cbEdit.Items.Add("0.8");
_cbEdit.Items.Add("0.9");
// der Form hinzufügen
this.Controls.Add(_cbEdit);
}
// Event für das Verlassen der Combobox per Maus
void _cbEdit_Leave(object sender, EventArgs e)
{
if (_lvSubItemEdit != null)
{
if (_cbEdit.SelectedItem != null)
{
_lvSubItemEdit.Text = _cbEdit.SelectedItem.ToString();
}
}
_cbEdit.Visible = false;
}
// Event des ListViews
// zum Merken des zuletzt angeklickten ListViewItems
// und zum Plazieren der Combobox
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)
{
// wenn Subitem in Spalte 2 (Index == 1) gewählt
// dann ComboBox anzeigen
if (htInfo.Item.SubItems.IndexOf(htInfo.SubItem) == 1)
{
_lvSubItemEdit = htInfo.SubItem;
_cbEdit.Top = ListView1.Top + _lvSubItemEdit.Bounds.Top + 2;
_cbEdit.Left = ListView1.Left + _lvSubItemEdit.Bounds.Left + 2;
_cbEdit.Width = _lvSubItemEdit.Bounds.Width;
_cbEdit.Height = _lvSubItemEdit.Bounds.Height;
_cbEdit.SelectedIndex = _cbEdit.Items.IndexOf(_lvSubItemEdit.Text);
_cbEdit.Visible = true;
_cbEdit.BringToFront();
_cbEdit.Focus();
}
else
{
_lvSubItemEdit = null;
}
}
}
}
}