我正在修改多列列表视图,以便能够编辑其单元格。当用户单击已选择的单元格时,将显示一个TextBox,然后通过键入文本来更改该单元格的内容(当然,在确认输入后)。
但是当我使用下面的方法时,出现了TextBox,但它似乎没有被聚焦,因此也没有进入编辑模式:插入符号未显示,并且使用键盘键入的内容不会更改TextBox。仅在第二次单击文本框后,插入符号才会出现。
public void startEditing(TableIndex cell)
{
editedCell = cell;
editTextBox.Bounds = CellBounds(cell);
editTextBox.Text = this[editedCell.RowIndex, editedCell.ColumnIndex];
editTextBox.Show();
editTextBox.Focus();
}
如何以编程方式将TextBox置于编辑模式?
在任何人不愿意提出建议之前:不,我不想切换到DataGridView等。每当我尝试使用它们时,它们都是如此缓慢,以至于让我感觉就像我在Raspberry Pi上模拟Windows。
答案 0 :(得分:1)
OP:我在ListView.OnMouseDown中调用它。
在OnMouseUp
中显示和集中编辑器控件。
ListView
处理WM_LBUTTONDOWN
并按下焦点,这意味着在处理了OnMouseDown
代码后,ListView
将获得焦点。
让TextBox
成为焦点的最简单方法是显示TextBox
并集中在OnMouseUp
。
答案 1 :(得分:0)
如果您要像listView.ItemSelectionChanged
那样在listView上调用事件处理程序,则在触发eventHandler后,焦点将返回到listView框,这就是为什么它切换回选择listView的原因。
您可以通过以下方法解决此问题:在原始事件处理程序之后再有一个GotFocus事件处理程序,然后将焦点设置到文本框。
this.listView1.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler( this.listView1_SelectedIndexChanged);
this.listView1.GotFocus += new System.EventHandler(this.listView1_Focused);
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
//call startEditing code
}
private void listView1_Focused(object sender, EventArgs e)
{
editTextBox.Focus();
}