C# 实现光标跳转在生成多个相同的用户自定义控件中的textbox控件上
时间: 2024-09-15 10:06:53 浏览: 39
在C#中,如果你需要在一个窗体或用户界面中动态生成多个相同的用户自定义控件,并允许光标在这些TextBox控件之间自动跳转,你可以这样做:
首先,在设计模式下,为每个TextBox添加一个公共的属性或者事件处理程序,以便外部代码可以访问它们。例如,你可以创建一个名为`TextBoxControl`的类,包含一个TextBox成员和一个用于索引的整数变量。
```csharp
public class TextBoxControl
{
public TextBox TextBox { get; set; }
public int Index { get; set; }
// 可选:添加一个焦点改变事件
public event EventHandler FocusChanged;
public void SetFocus() => TextBox.Focus();
}
```
然后,在窗体的某个方法里,你可以动态创建这些TextBox控件并存储到List<TextBoxControl>中:
```csharp
private List<TextBoxControl> textBoxControls = new List<TextBoxControl>();
private void GenerateTextBoxes(int count)
{
for (int i = 0; i < count; i++)
{
TextBoxControl textBoxCtrl = new TextBoxControl();
TextBox textBox = new TextBox();
textBox.Name = $"textBox{i}";
textBox.TextboxControl = textBoxCtrl;
textBoxCtrl.TextBox = textBox;
textBoxCtrl.Index = i;
// 将TextBox添加到容器控件,如Panel或Grid
container.Controls.Add(textBox);
// 添加焦点改变事件处理
textBoxCtrl.FocusChanged += TextBoxCtrl_FocusChanged;
}
}
private void TextBoxCtrl_FocusChanged(object sender, EventArgs e)
{
TextBoxControl textBoxCtrl = (TextBoxControl)sender;
if (textBoxCtrl != null && textBoxCtrls.Contains(textBoxCtrl))
{
// 跳转到下一个TextBox
MoveCursorToNextTextBox(textBoxCtrl);
}
}
private void MoveCursorToNextTextBox(TextBoxControl textBoxCtrl)
{
int currentIndex = textBoxCtrls.FindIndex(ctrl => ctrl == textBoxCtrl);
if (currentIndex + 1 >= textBoxCtrls.Count)
{
// 如果到达最后一个,设置第一个TextBox focus
textBoxCtrls[0].SetFocus();
}
else
{
textBoxCtrls[currentIndex + 1].SetFocus();
}
}
```
现在,当焦点从一个TextBox切换到另一个时,会按照索引顺序循环移动。如果到了最后一行,焦点将回到第一行的第一个TextBox。
阅读全文