我有两个窗口的应用程序。一个窗口包含文本框,而另一个窗口是键盘。我现在的问题是当我点击我的键盘窗口时遇到错误。我无法输入我在其他窗口中单击的文本框。这是我的代码。
当我从窗口I中单击一个文本框时,我会触发此鼠标事件。
private void TextBoxPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
textBox = sender as TextBox;
textBox.Focus();
}
我使用sender作为TextBox,因为我的文本框以编程方式添加到了我的窗口。我用它来获取文本框的名称。
当我从键盘窗口单击按钮时,这是我的代码。
让我们使用按钮1:
private void button_numeric_1_Click(object sender, RoutedEventArgs e)
{
Screen1 screen1 = new Screen1();
screen1.textBox.Text += "1";
}
Screen1是包含我的文本框的窗口。
如何使用我创建的键盘在文本框中键入文本。我正在使用C#。有人请帮帮我。
答案 0 :(得分:1)
而不是使用new Screen1();
您可能需要使用屏幕的实际实例,您可以通过构造函数将其传递给键盘。
例如
class Screen
{
Keyboard keyboard;
public Screen()
{
//pass the screen instance to the keyboard
keyboard = new Keyboard(this);
}
//...
private void TextBoxPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
textBox = sender as TextBox;
textBox.Focus();
//open keyboard etc
keyboard.Show();
}
}
class Keyboard
{
private Screen screenInstance;
public Keyboard(Screen instance)
{
//store the instance in a member variable
screenInstance = instance;
}
//...
private void button_numeric_1_Click(object sender, RoutedEventArgs e)
{
//use the stored screen instance
screenInstance.textBox.Text += "1";
}
public void Show()
{
//display logic etc
}
}
以上只是基于某些假设的示例,您可以根据需要调整/合并您的代码。
如果要使用多个TextBox,可以调整它以传递TextBox实例
例如
class Screen
{
Keyboard keyboard = new Keyboard();
private void TextBoxPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
textBox = sender as TextBox;
textBox.Focus();
//open keyboard etc
keyboard.Show(textBox);
}
}
class Keyboard
{
private TextBox textBoxInstance;
private void button_numeric_1_Click(object sender, RoutedEventArgs e)
{
//use the stored TextBox instance
textBoxInstance.Text += "1";
}
public void Show(TextBox instance)
{
textBoxInstance = instance;
//display logic etc
}
}