- PR -

数値型をソースとするTextBoxに一旦入れた後空白にしたい

投稿者投稿内容
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2008-01-08 16:14
数値型をソースとするTextBoxに一旦数値を入れた後
空白にするとNullにしたいのに
フォーカスがTextBoxから離れなくなってしまい困っています。
どうすれば良いのでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-08 17:09
引用:

island_townさんの書き込み (2008-01-08 16:14) より:

数値型をソースとするTextBoxに一旦数値を入れた後
空白にするとNullにしたいのに
フォーカスがTextBoxから離れなくなってしまい困っています。
どうすれば良いのでしょうか。


意味がわからないので再現可能なソース コードを提示して頂けないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2008-01-08 17:14
すみません。
TextBoxを数値型のデータセットにバインドしただけで
フォームを表示します。
空のTextBoxに一旦数値を入れ空白に戻します。
するとデータソースをNullにして欲しいのに
エラーになるらしくTextBoxからフォーカスが離れなくなってしまうのです。


[ メッセージ編集済み 編集者: island_town 編集日時 2008-01-08 17:25 ]
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-01-08 17:44
引用:

island_townさんの書き込み (2008-01-08 17:14) より:

TextBoxを数値型のデータセットにバインドしただけで
フォームを表示します。
空のTextBoxに一旦数値を入れ空白に戻します。
するとデータソースをNullにして欲しいのに
エラーになるらしくTextBoxからフォーカスが離れなくなってしまうのです。


引用:

じゃんぬねっとさんの書き込み (2008-01-08 17:09) より:

意味がわからないので再現可能なソース コードを提示して頂けないでしょうか?


再現可能なソースコードでと書かれているので、言葉で説明
するのではなくソースコードを提示していただけないでしょう
か。
ちなみに上の文章を読んだ上で、私も意味がわかりませんで
した。

TextBoxを数値型のデータセットにバインドし、空のTextBox
に数値を入力したあと空白に戻しましたが、フォーカスは
普通に移動できました。
なので「再現可能なソースコードを」と私も書いてみます。
再現できなければ解決策を示すこともできませんので、よろ
しくお願いします。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2008-01-08 17:45
雰囲気は分るんですけど、情報が足りなくてisland_townさんと同じコードを書いて動作させてみることができません。
そもそもWindwosFormかWebかも分かりませんし。

再現可能な最小のソースコードを提示していただけますか。
その最小のソースコードを作っている途中で問題が解決することが結構ありますし、そうでなくても切り分けができるため問題の存在する範囲が絞られて掲示板を見ている他の方に伝わりやすくなります。
ぜひお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-01-08 19:03
開発環境とかも please


実は Validating イベントで何かしているとか。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-01-08 21:26
超度Lv 1のエスパーである私が、先見してしんぜよう。

以下の条件を満たす場合、発生する
DataTableにおいて、Not Nullの項目をデータバインディングしている。
.NET Framework 2.0以降の場合は、AutoValidateプロパティがEnableAllowFocusChangeではない。
(2.0以前にはないプロパティなので、その場合は一番目の条件のみ)

TextBoxの内容を空にすると、バインディング先のDataTableにDbNullを渡そうとする。
# 渡すタイミングは、経験上、Validatingイベント通過後(e.Cancel = false)、Validatedイベント前。
# 多分、OnValidating()の中でしょう。
しかし、Not Nullの項目にNullをセットしようとするので、内部的にエラーが発生する(してると思われる)。
OnValidating()がキャンセル扱いになり、フォーカスアウトできない。きっとそんなところ。

じゃあなぜ、TextBoxの内容を空のままだと、フォーカスアウトできるのか?
多分DataTableの現在値が同じだから、エラーとはしなかったんじゃないかと。これは推測なので、きっと事実とは異なるでしょう。

ちなみに、.NET Framework 2.0以降の場合は、AutoValidateプロパティがEnableAllowFocusChangeであれば、フォーカス移動は可能。
その場合、DB更新前に厳密な入力値チェックを行っとかないと、DB更新でおちるよ〜。

ついでに、ミニマムコードは、Not Nullの項目をバインドさせたもので
(ぺたぺた貼り付けて、デザイナ上でプロパティいじるだけで)、簡単に再現できるでしょう。

超度Lv 1ではここまでが限界です。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-01-08 21:30
引用:

ぽぴ王子さんの書き込み (2008-01-08 17:44) より:

TextBoxを数値型のデータセットにバインドし、空のTextBox
に数値を入力したあと空白に戻しましたが、フォーカスは
普通に移動できました。
なので「再現可能なソースコードを」と私も書いてみます。
再現できなければ解決策を示すこともできませんので、よろ
しくお願いします。


バインドした項目は、Not Nullの列ですかね?
それでもなお、フォーカス移動したなら、先の回答は嘘っぱちにになるな。
#うちでは再現したんだけど

スキルアップ/キャリアアップ(JOB@IT)