使用另一个窗口在窗口中填充文本框

时间:2014-09-24 01:42:50

标签: c# wpf

我有两个窗口的应用程序。一个窗口包含文本框,而另一个窗口是键盘。我现在的问题是当我点击我的键盘窗口时遇到错误。我无法输入我在其他窗口中单击的文本框。这是我的代码。

当我从窗口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#。有人请帮帮我。

1 个答案:

答案 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
    }
}