以编程方式将 TextBox 置于编辑模式
Put TextBox into editing mode programmatically
我正在修改多列列表视图以便能够编辑其单元格。当用户单击已选择的单元格时,将显示一个文本框,随后键入文本,将更改单元格内容(当然是在确认输入后)。
但是当我使用下面的方法时,出现了文本框,但它似乎没有被聚焦,所以没有进入编辑模式:插入符号没有显示,用键盘输入也没有改变文本文本框的字段。只有在第二次单击文本框后才会出现插入符号。
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
如果您在 listView 上调用事件处理程序,例如 listView.ItemSelectionChanged
焦点会在事件处理程序被触发后返回到 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();
}
OP: I am calling it in ListView.OnMouseDown.
在 OnMouseUp
中显示并聚焦编辑器控件。
ListView
处理 WM_LBUTTONDOWN
并推送焦点,这意味着在处理您的 OnMouseDown
代码后,ListView
将获得焦点。
让 TextBox
获得焦点的最简单解决方法是显示 TextBox
并聚焦在 OnMouseUp
。
我正在修改多列列表视图以便能够编辑其单元格。当用户单击已选择的单元格时,将显示一个文本框,随后键入文本,将更改单元格内容(当然是在确认输入后)。
但是当我使用下面的方法时,出现了文本框,但它似乎没有被聚焦,所以没有进入编辑模式:插入符号没有显示,用键盘输入也没有改变文本文本框的字段。只有在第二次单击文本框后才会出现插入符号。
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如果您在 listView 上调用事件处理程序,例如 listView.ItemSelectionChanged
焦点会在事件处理程序被触发后返回到 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();
}
OP: I am calling it in ListView.OnMouseDown.
在 OnMouseUp
中显示并聚焦编辑器控件。
ListView
处理 WM_LBUTTONDOWN
并推送焦点,这意味着在处理您的 OnMouseDown
代码后,ListView
将获得焦点。
让 TextBox
获得焦点的最简单解决方法是显示 TextBox
并聚焦在 OnMouseUp
。