0

テキストボックスでの貼り付けイベントの検出に関する投稿を作成し、これを行うコードのある場所に誘導されました..私はそれを機能させましたが、Program.csメインイベントから独自のテキストボックスコントロールを作成する必要がありました. コードは次のとおりです。

    var txtNum = new MyTextBox();
    txtNum.Pasted += (sender, args) => MessageBox.Show("Pasted: " + args.ClipboardText);
    txtNum.Size = new System.Drawing.Size(578, 20);
    txtNum.Location = new System.Drawing.Point(12, 30);
    var form = new Form1();
    form.Controls.Add(txtNum);
    Application.Run(form);

新しい問題は、txtNum で何かを処理しようとすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されることです。これを解決するにはどうすればよいですか? それはwinformsアプリケーションです.net 4.0

エラーはここにあります:

    private void button1_Click(object sender, EventArgs e)
    {
        string s = txtNum.Text; //OBJECT REFERENCE ERROR

            string[] numbers = s.Split(' ');
            double sum = 0;
            for (int i = 0; i < numbers.Length; i++)
            {
                double num = double.Parse(numbers[i]);
                sum += num;
            }
            lblRESULT.Text = sum.ToString();
            if (cp == true)
            {
                Clipboard.SetText(lblRESULT.Text);
            }

    }
4

2 に答える 2

2

のスコープでテキストボックスを宣言したためですMain()

static TextBox txtNum = new TextBox();
[STAThread]
static void Main()
{
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
// txtNum.Paste += (sender, args) => MessageBox.Show("Pasted: " + args.ClipboardText);
txtNum.Size = new System.Drawing.Size(578, 20);
txtNum.Location = new System.Drawing.Point(12, 30);
Form1 form = new Form1();
form.Controls.Add(txtNum);
Application.Run(form);
}

より良いアプローチは、Form1s コンストラクターまたはForm_Loadイベントにテキスト ボックスを追加することです。

TextBox txtNum = new TextBox();
public Form1()
{
InitializeComponent();
txtNum.Size = new System.Drawing.Size(578, 20);
txtNum.Location = new System.Drawing.Point(12, 30);
txtNum.PreviewKeyDown += (sender, e) =>
{
    if (e.KeyValue == 17 && e.Control == true)
    {
        MessageBox.Show("you pasted:" + Clipboard.GetText());
    }
};
this.Controls.Add(txtNum);

}
于 2012-11-16T00:23:36.973 に答える
0

OK、Main でテキスト ボックスを宣言するコードは単なる例です。Jeremy's answer に従って、フォームコードでテキストボックスを宣言する必要があります。

MyTextBoxまたは、ツールボックスでコントロールを見つけることができるはずです。他のコントロールと同じようにフォームにドラッグし、Pasted通常のようにイベント ハンドラー コードを追加するだけです。

于 2012-11-16T00:52:26.147 に答える