1

私のフォームの場合、クリップボードのテキストをクリアしたいだけですLostFocus。つまり、ユーザーがキーボードまたはマウスを使用して何かをコピーし、LostFocusイベントでそれをクリアする必要がある場合、フォームが再びフォーカスを受け取ったときにテキストを元に戻す必要があるということです。どうすればこれを達成できますか?

string sValue = "";
public Form1()
{
    InitializeComponent();
    this.LostFocus += new EventHandler(Form1_LostFocus);
    this.GotFocus += new EventHandler(Form1_GotFocus);
}

void Form1_GotFocus(object sender, EventArgs e)
{
    Clipboard.SetText(sValue);
    textBox1.Text = Clipboard.GetText();
}

void Form1_LostFocus(object sender, EventArgs e)
{
    sValue = textBox1.Text;
    Clipboard.Clear();
}

これは動作しません; LostFocusイベントは呼び出されますが、呼び出さGotFocusれません。どうすればこれを解決できますか?

4

2 に答える 2

5

フォーム自体にイベント ハンドラーを追加する代わりに、機能する簡単な回答を得るには、それらをTextBoxコントロールに追加します。

textBox1.LostFocus += new EventHandler(Form1_LostFocus);
textBox1.GotFocus += new EventHandler(Form1_GotFocus);

GotFocusフォームに表示可能なコントロールが含まれている場合、またはLostFocusイベントはトリガーされません。

ただし、フォーム レベルでこの動作を処理するための推奨される方法は、次を使用することです。

this.Deactivate += new EventHandler(Form1_LostFocus);
this.Activated += new EventHandler(Form1_GotFocus);

また

textBox1.Leave += new EventHandler(Form1_LostFocus);
textBox1.Enter += new EventHandler(Form1_GotFocus);

マイクロソフトは次のように述べています。

  1. Control.GotFocus イベントの場合

    GotFocus および LostFocus イベントは、WM_KILLFOCUS および WM_SETFOCUS Windows メッセージに関連付けられている低レベルのフォーカス イベントです。通常、GotFocus および LostFocus イベントは、UICues を更新するとき、またはカスタム コントロールを作成するときにのみ使用されます。代わりに、Activated および Deactivate イベントを使用する Form クラスを除くすべてのコントロールに対して、Enter および Leave イベントを使用する必要があります。

  2. Form.Activated イベントの場合

    アプリケーションがアクティブで複数のフォームがある場合、アクティブなフォームは入力フォーカスのあるフォームです。表示されていないフォームをアクティブ フォームにすることはできません。表示されているフォームをアクティブにする最も簡単な方法は、フォームをクリックするか、適切なキーボードの組み合わせを使用することです。

  3. Control.Enter イベントの場合

    Enter および Leave イベントは Form クラスによって抑制されます。Form クラスの同等のイベントは、Activated イベントと Deactivate イベントです。

于 2013-01-16T11:39:43.167 に答える
0
    string sVal = "";
    public Form1()
    {
        InitializeComponent();
        this.Activated += new EventHandler(Form1_GotFocus);
        this.Deactivate += new EventHandler(Form1_LostFocus);

    }

    void Form1_LostFocus(object sender, EventArgs e)
    {
        sVal = Clipboard.GetText();
        Clipboard.Clear();
    }

    void Form1_GotFocus(object sender, EventArgs e)
    {
        Clipboard.SetText(sVal);
    }
于 2013-01-16T12:10:43.887 に答える