2014-09-24 375 views
1

我有一個帶有兩個窗口的應用程序。一個窗口包含文本框,而另一個窗口是鍵盤。我現在的問題是,當我點擊我的鍵盤窗口時,我遇到錯誤。我無法在我點擊另一個窗口的文本框上輸入內容。這是我的代碼。使用另一個窗口填充窗口中的文本框

當我從窗口I單擊一個文本框時,我觸發了這個鼠標事件。

private void TextBoxPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    textBox = sender as TextBox; 
    textBox.Focus();  
} 

我用發件人作爲文本框,因爲我的文本框以編程方式添加到我的窗口。我用它來獲取文本框的名稱。

這裏是我的代碼,當我點擊我的鍵盤窗口中的按鈕。

讓使用按鈕1:

private void button_numeric_1_Click(object sender, RoutedEventArgs e) 
{ 
    Screen1 screen1 = new Screen1(); 
    screen1.textBox.Text += "1"; 
} 

屏蔽1是包含我的文本框的窗口。

我怎麼可能能夠使用我創建的鍵盤在我的文本框中鍵入文本。我正在使用C#。任何人都請幫助我。

回答

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

以上只是基於一些假設,你可以調整/根據需要與您的代碼合併的例子。

你可以調節相同的傳遞,如果你有多個文本框被使用

例如

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 
    } 
} 
文本框實例