- PR -

TextBox のVisibleプロパティを False に設定するとプログラムから書き込みも参照も出来なくなる。

投稿者投稿内容
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-22 11:01
皆さんどうもありがとうございます。投稿前には勿論別のプロジェクトを作成し
テストも行いました。
再度じゃんぬねっとさんからご指摘いただいたミニマムコードで再確認したところ
正常に動作しました。(デザイナでVisible = Falseに設定しても正常でした。)

となると投稿前のテストとじゃんぬねっとさんの指摘内容とは違いがあるようでです。
以下、エラーが発生する状況を詳しく説明します

日数TextBoxに入力後[Enter]ボタンか[Tab]ボタンで、日数TextBoxからフォーカス
喪失たときに次の処理を行っています。
→金額TextBox.Text = (CInt(日数TextBox.Text) * CInt(単価extBox.Text)).ToString

この場合の単価TextBoxのVisibleプロパティをFalseに設定しておくと次のような
エラーが発生し、単価が参照されていないようです。
ただし、この単価はテーブルからバインドしたデータで、フォームのLoad時に単価を
単価TextBoxに設定をした場合は正常に動作するようです。
勿論、単価TextBox.TextのVisibleプロパティをTrueに設定すると正常に動作します。
エラー内容→String "" から型 'Integer' への変換は無効です。

どうもフォーカス喪失時では、VisibleプロパティをFalseに設定しているTextBox
のデータを参照できないようです。又書き込みも同様に出来ません。

以上のようなテスト結果ですが、よろしくご指導下さい。



13行目の単価TextBox.Texを単価TextBoxに修正

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-22 11:24 ]
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-11-22 11:22
引用:

→金額TextBox.Text = (CInt(日数TextBox.Text) * CInt(単価extBox.Text)).ToString


この処理の直前に
MessageBox.Show(単価TextBox.Text)
するとどうなります?
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-22 11:46
まるくさん、早速ありがとうございます。
ご指摘の「MessageBox.Show(単価TextBox.Text) 」を挿入してテストしましたが
MessageBoxに[OK]ボタンが表示される以外に何も表示されません。
ちなみにIntelliSense機能でCInt(単価TextBox.Text)を見ましたが
テキストビジュアライザは""(空白)となっています。

また単価TextBoxのVisibleプロパティをTrueに設定すると当然MessageBoxには
単価金額が表示され、計算結果の金額TextBoxにも正常に表示されます。
以上ですが、取り急ぎ報告いたしました。


修正・・入力した数字→単価金額


[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-22 11:53 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-22 11:48
引用:

まるくさんの書き込み (2007-11-22 11:22) より:
引用:

→金額TextBox.Text = (CInt(日数TextBox.Text) * CInt(単価extBox.Text)).ToString


この処理の直前に
MessageBox.Show(単価TextBox.Text)
するとどうなります?


いや、それより
CInt("").ToString
のほうがわかりやすいんじゃない?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-22 11:53
引用:

だんじりさんの書き込み (2007-11-22 11:01) より:

となると投稿前のテストとじゃんぬねっとさんの指摘内容とは違いがあるようでです。


仰っている意味が良くわかりませんが、私が何か間違ったことを書いてしまったということでしょうか?

引用:

日数TextBoxに入力後[Enter]ボタンか[Tab]ボタンで、日数TextBoxからフォーカス
喪失たときに次の処理を行っています。
→金額TextBox.Text = (CInt(日数TextBox.Text) * CInt(単価extBox.Text)).ToString


検証もなしにいきなりコンバートしてはまずいでしょう。 Integer.TryParse (System.Int32.TryParse) メソッドを使用してください。

引用:

この場合の単価TextBoxのVisibleプロパティをFalseに設定しておくと次のようなエラーが発生し、単価が参照されていないようです。ただし、この単価はテーブルからバインドしたデータで、フォームのLoad時に単価を単価TextBoxに設定をした場合は正常に動作するようです。勿論、単価TextBox.TextのVisibleプロパティをTrueに設定すると正常に動作します。 エラー内容→String "" から型 'Integer' への変換は無効です。

引用:

どうもフォーカス喪失時では、VisibleプロパティをFalseに設定しているTextBoxのデータを参照できないようです。又書き込みも同様に出来ません。


本当にそうでしょうか?

コード:

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.TextBox2.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.TextBox1, "Text"))
    End Sub

    Private Sub TextBox2_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Leave
        System.Console.WriteLine(Me.TextBox2.Text)
        Me.TextBox2.Visible = False
        System.Console.WriteLine(Me.TextBox2.Text)
        Me.TextBox2.Text = "You Liar! Liar! もう信じられないや!"
        System.Console.WriteLine(Me.TextBox2.Text)
    End Sub


再現しないことを確認しました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-22 11:54
引用:

だんじりさんの書き込み (2007-11-22 11:46) より:

また単価TextBoxのVisibleプロパティをTrueに設定すると当然MessageBoxには
入力した数字が表示され、計算結果の金額TextBoxにも正常に表示されます。


じゃぁ、単価や日数を入力しなかったら?
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-11-22 12:24
こんにちは。

今回の問題はVisibleプロパティ云々ではなく、単価TextBoxに値が設定されているかどうかの問題のような気がします。
どうも問題箇所の切り分けができてないように思えます。
・どの時点(操作)で単価TextBoxに値が入っているか
・どの時点になると単価TextBoxに値がクリアされているか
を調べて、その間の処理をステップ実行などすると解決するかと思います。

引用:

エラー内容→String "" から型 'Integer' への変換は無効です。


また、ご提示の計算では日数TextBoxに数字が入力されていなくても同様のエラーが出ると思われます。
その辺りもご注意ください。
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-22 12:25
じゃんぬねっとさん、ありがとうございます。
書き方が悪く誤解されたようですが、再度以下の通り説明します。
説明→となると私が投稿前のテストした状況と、じゃんぬねっとさんの再確認指摘
(ミニマムコード)とは状況の違いがあるようで、再度私のテスト状況を説明します。

また確認していただいたコードをいただきましたが少し状況が違うようようですので
再度説明します。
日数TexBoxに数字を入力し、[Enter]キー等を押して日数TexBoxからフォーカスが
喪失したときにVisibleプロパティをFalse設定している単価textBoxの値を取得でき
ない問題です。

Jittaさん、ありがとうございます。
単価や日数を入力しなかったら?との事ですが、単価はあらかじめバインドされた
テーブルの単価フィールドから表示(非表示ですが)していて、日数TextBoxに日数
ノミを入力しますが、何も入力しないとフォーカスが日数TextBoxに居て、何も発生
しません。

以上取り急ぎ報告します。


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