以编程方式将TextBox置于编辑模式

时间:2019-07-29 13:19:27

标签: c# .net winforms listview textbox

我正在修改多列列表视图,以便能够编辑其单元格。当用户单击已选择的单元格时,将显示一个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。

2 个答案:

答案 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();
}