プロが教える店舗&オフィスのセキュリティ対策術

C#でテキストボックスとスクロールバーをバインディングしていて、更にエラープロバイダーをセットしエラーメッセージが出るようになっていてe.cancel=trueを書いています。

やりたいことは、テキストボックス空欄でタブを押下したときにエラーメッセージがでてe.cancel=trueが反応し動作できなくなることです。

現在、テキストボックス空欄でタブを押したときにエラーメッセージは出ますがe.cancel=trueが反応せず、テキストボックス内が空欄→0になり進んでしまいます。
ちなみにバインディングしているスクロールバーの最小値は0に設定しています。

是非ともご教授お願いします(._.)

質問者からの補足コメント

  • お返事ありがとうございます。
    具体的実装といいますとソースのことですか?

      補足日時:2016/06/20 16:52
  • validationのイベントに

    try(整数変換
    errorprovider(〜)):
    catch(exception)
    e.cancel=true:
    errorprovider(〜)):

    ざっくりこんなかんじです。

      補足日時:2016/06/20 17:16
  • ちなみに、トラックバーとバインディングしていないところはこれで制御できています。

      補足日時:2016/06/20 17:19

A 回答 (3件)

通常、TextBox内でTabを押下した時、次のコントロールへフォーカスが遷移しますが、遷移しない場合もあります。


(次のコントロールとして認識されるものがない場合もあり得る)

そのため、Tabの制御をValidatingイベントで実装することは非現実的です。

Tab制御を問題視しているのか、Validatingイベントの制御を問題視しているのかがよくわかりません。

以下のようにした場合、フォーカス遷移が行われる際に必ずキャンセルされます。
それはTabキー押下に限った話ではありません。
private void textBox1_Validating(object sender, CancelEventArgs e)
{
errorProvider1.SetError(textBox1, "hoge");
e.Cancel = true;
}

Tabキーの話をしているのならば、PreviewKeyDownイベントで実装し、Tabを入力キーとしてしまって、フォーカス遷移を行わないようにできます。
が、TabがWindowsの仕様と異なることになります。
当たり前ですが、色々制御した結果、ヨシとした場合、それによってフォーカスが遷移するならば、Validatingイベントも走行しますので。
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Tab)
{
errorProvider1.SetError(textBox1, "hoge");
e.IsInputKey = true;
}
}
    • good
    • 0

> 具体的実装といいますとソースのことですか?


はい。
    • good
    • 0

具体的な実装は、今どうなってるんですか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!