簡體   English   中英

如何在 C# 中設計鍵盤?

[英]How to design a keypad in C#?

我是 C# 新手,我打算設計自己的鍵盤,但我不知道如何/從哪里開始。 如圖所示,我有 4 個文本框作為鍵盤按鈕。

我想到的第一個問題是:如何檢測光標位置(光標在哪個 textBox 中?)。

因此,例如,如果我只有一個文本框,那么我可以很容易地在 button1 內寫: textBox1.text = "1" 和在 button2 內: textBox1.text = "2" 和在 button_A 內: textBox1.text = "A" .. .. 等等,但我有 4 個文本框,這很令人困惑。

您能否給我一個想法或在每個按鈕內寫什么以在光標所在的文本框中打印其值。

謝謝專業人士。

照片

首先,有一個文本框代表被選中的文本框(在子程序之外但在類內):

TextBox SelectedTextBox = null;

然后讓每個 TextBox 的“Click”事件看起來像這樣:

private void textBoxNUM_Click(object sender, EventArgs e)
{
    SelectedTextBox = sender as TextBox;
}

然后讓每個 Button 的“Click”事件看起來像這樣:

private void buttonNUM_Click(object sender, EventArgs e)
{
    if (SelectedTextBox != null)
    {
        SelectedTextBox.Text = buttonNUM.Text;//Or set it to the actual value, whatever.
    }
}

或者如果那個不起作用,這應該。

private void buttonNUM_Click(object sender, EventArgs e)
{
    if (SelectedTextBox != null)
    {
        (SelectedTextBox as TextBox).Text = buttonNUM.Text;//Or set it to the actual value, whatever.
    }
}

要檢查文本框是否聚焦,您可以執行

if(textbox1.Focused)
{
  //Print the value of the button to textbox 1
}
else if (textbox2.Focused)
{
  //Print the value to textbox 2
}

更新:

由於單擊按鈕時文本框將失去焦點,因此您應該有一個臨時文本框(即 lastTextboxThatWasFocused),每次文本框獲得焦點時都會保存該文本框。 編寫一個 OnFocused 方法並執行類似的操作

public void Textbox1OnFocused(/*Sender Event Args*/)
{
   lastTextboxThatWasFocused=textbox1;
}

然后點擊按鈕,你可以做

if(lastTextboxThatWasFocused.Equals(textbox1))
{
  //ETC.
}

你可以嘗試一下這些方面的東西。 為按鈕創建一個通用的單擊處理程序,然后將值分配給來自按鈕的文本的文本框,這恰好是該值。 您可以檢查哪個框是 TextBoxes 的 Click 事件中最后一個聚焦的框。 創建一個全局變量來存儲哪個變量並在下面的方法中使用它。

        private TextBox SelectedTextBox { get; set; }

    private void NumericButton_Click(object sender, EventArgs e)
    {
        var clickedBox = sender as Button;

        if (clickedBox != null)
        {
            this.SelectedTextBox.Text += clickedBox.Text;
        }
    }

    private void TextBox_Click(object sender, EventArgs e)
    {
        var thisBox = sender as TextBox;

        if (thisBox == null)
        {
            return;
        }
        this.SelectedTextBox = thisBox;
    }

試試這個代碼:

TextBox LastTxtBox;

private void textBox_Enter(object sender, EventArgs e)
    {
        LastTxtBox = sender as TextBox;
    }

private void button_Click(object sender, EventArgs e)
    {
        LastTxtBox.Text = this.ActiveControl.Text;
    }

為所有文本框輸入事件添加textBox_Enter函數。
button_Click添加到所有按鈕單擊事件。

按鈕進入事件

    Control _activeControl;
    private void NumberPadButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        if (_activeControl is TextBox || _activeControl is RichTextBox)
        {
            _activeControl.Text += btn.Text;
            if (!_activeControl.Focused) _activeControl.Focus();
        }
    }

   

TextBox 或 RihTextBox 輸入事件

    private void TextBoxEnter_Click(object sender, EventArgs e)
    {
        _activeControl = (Control)sender;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM