C#でテキストボックスとスクロールバーをバインディングしていて、更にエラープロバイダーをセットしエラーメッセージが出るようになっていてe.cancel=trueを書いています。
やりたいことは、テキストボックス空欄でタブを押下したときにエラーメッセージがでてe.cancel=trueが反応し動作できなくなることです。
現在、テキストボックス空欄でタブを押したときにエラーメッセージは出ますがe.cancel=trueが反応せず、テキストボックス内が空欄→0になり進んでしまいます。
ちなみにバインディングしているスクロールバーの最小値は0に設定しています。
是非ともご教授お願いします(._.)
No.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;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA ユーザーフォーム内のラベルにテキストボックスの小計を出す方法 5 2022/08/17 14:27
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) ExcelVBAでユーザーフォームでテキストボックスなどからセルに連続して入力するコーディングの際の 2 2022/06/29 22:51
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) エクセルの数式について教えて下さい。 8 2023/05/27 12:17
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Access(アクセス) アクセス IDが空白の時、メッセージボックスがでるようにするには 1 2022/08/04 11:06
- Visual Basic(VBA) ユーザーフォームで銀行に対応した支店コードの入力ができません Sheet1のA列に銀行名、B列に銀行 5 2022/07/28 17:50
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オートマトンNFAからDFAへの変換
-
Q&Aフォームを作成したいのです...
-
戻るボタンで、ログイン中を維...
-
ボタン1を押すと…
-
【JavaScript?HTML?】Webペー...
-
ボタンを押すと、テキストエリ...
-
htmlでsubmit送信時、actionよ...
-
HTMLだけでボタン作成
-
Webページ上のボタン等の位置を...
-
formの送信ボタンをテキストに...
-
VBAで一時中断したプログラムの...
-
「押下」は「おうか」と読む?
-
C#でドラッグ&ドロップが機能し...
-
getParameterで値が取得できず...
-
ACCESS リストボックスに検索結...
-
チャレンジタッチの画面にスマ...
-
コネクション・セッション・ト...
-
チェックボックスの値をコピー
-
ボタンをクリックした時に、入...
-
VBAでこれってどういう意味でし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面遷移が不正ですと表示されます
-
ASPで画面間のパラメタ受け渡し
-
HTTPリクエストヘッダーの設定...
-
【ASP.NET】ページ遷移してもGr...
-
エクセルVBA 別のブックのユ...
-
オートマトンNFAからDFAへの変換
-
スマホで、左右にスワイプして...
-
セッション変数への値の代入方...
-
ASP.NET による画面遷移で質問...
-
【ASP.net】リンク押下時に次の...
-
VB.NET 画面遷移
-
java scriptはseo的には影響な...
-
PowerPointのボタンにマクロ設定
-
request.QueryStringについて
-
POSTだけして、ページの移動を...
-
Access2013 VBA 複数の画面の遷移
-
unityでクイズゲームを作ってい...
-
VB.NETのWebアプリケーション開...
-
ASPとASP.netの連携について
-
Request Header の追加
おすすめ情報
お返事ありがとうございます。
具体的実装といいますとソースのことですか?
validationのイベントに
try(整数変換
errorprovider(〜)):
catch(exception)
e.cancel=true:
errorprovider(〜)):
ざっくりこんなかんじです。
ちなみに、トラックバーとバインディングしていないところはこれで制御できています。