- PR -

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

投稿者投稿内容
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-26 10:55
J.J.さん、テストの詳細な説明ありがとうございます。
J.J.さんのテスト結果は私と同じですね。取り急ぎお礼まで・・・

追記:先日「ご提示の計算では日数TextBoxに数字が入力されていなくても同様の
エラーが出ると思われます。」とのご指摘ありがとうございます。 新規の入力は
全てチェックするようにしていましたが、今回のBindしたデータはチェックして
いませんでした。今後はチェックします。
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-26 11:05
じゃんぬねっとさん、説明べたですみません。

詳細説明は、J.J.さん(2007-11-26 10:40)と同じですので重複説明しませんがお許し下さい。
なを、J.J.さんの「この状態で、(列名)TextBoxのVisibleプロパティをIDEより操作。」
とはデザイナで操作と同じと解釈しました。
じゃんぬねっとさんには大変お手数をおかけして申し訳ありません。

RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-11-27 00:51
大変遅いレスで申し訳ありません

引用:

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

おっしゃるとおり「仕様であると」誰かに保証して欲しかっただけです。
引用:

「そのようなことはないです。」との事ですが、私は非表示TextBoxとの値の読み書きは 出来ないので、不可能なのがVB.NETの仕様と考えておりました。



ところが「NO」でした。さらにじゃんぬねっとさんの指導でミニマムコードでテストした次第です。
そしてRUNさんの言われるとおり、質問者の環境は最初に説明するのは当然のことですが、上記した通り「当然の仕様」だと答えをいただけるものと思っていたことと私の動作環境は下記の通り取り立てて記載するほど特殊なことではないと考えておりました。
1.単価TextBoxのデータ取得タイミングが日数TextBoxのフォーカス喪失時であること
2.単価TextBoxはテーブルとBindしていること
3.単価TextBoxのVisibleプロパティをFalseに設定していること
あえて言うなら特殊な環境は1番ではないでしょうか、(ところが今回の現象とは無関係でした)
以上の通りRUNさんのご指摘は最もですが今回には少々違うのではないでしょうか。
ただ、じゃんぬねっとさんから指導された最も単純なテストを行っていれば、と反省しきりです。
引用:

じゃんぬねっとさんの書き込み (2007-11-22 13:46 ) より:
ミニマム コードを書きましょう。 私が提示しているコードを見れば、バインド・非表示・フォーカス喪失だけの単純な問題ではないということが明らかになります。 明らかになるということはそれだけ考えうる原因が減ったということです。 この一手が問題解決への前進になるということをよく理解した上で、どんな切り分け作業をすべきかを考えてみると良いと思います。


RUNさん、これからもよろしくご指導下さい。




>あえて言うなら特殊な環境は1番ではないでしょうか
何故それが特殊で他が特殊でないと思われたのですか?
その理由を是非ともお教えいただけませんでしょうか?

初心者故にと言うのであれば、どれが特殊かは思いつかず、とりあえず全て特殊かも知れないと判断すると思うのですが違いますかね?

少なくとも自分には2番がもっとも特殊だと判断します。
貴方が提示されている情報上では、TextBoxはWindows.FormsのコントロールのTextBoxだと判断してしまいます。
となると、TextBoxコントロール自体が何かをBindするような前提のコントロールではないので、bindすることが既に特殊です。

また、貴方の提示されていない情報から判断される、GridView内のカラムコントロールであると判断した場合でも。
1と3は一般的な殆どのコントロールに存在する動作であり、
2だけはGridコントロール特有の動作である為、やはりこれが特殊だと判断できます。

あまり直感的ななんとなくだけで物事を考えているようでは、成長はありませんよ。
大事なのは論理的思考。5W1Hです。

あと、じゃんぬさんもおっしゃられていますが、コントロールにbindさせているのはいったい何なのでしょうか?この点は非常に重要な情報です。
bindしたものによって、挙動は当然変わってきます。

あと、今回の件に関しては、
GridにDataTableをbindしているものと仮定した場合(もっともポピュラーなbind形態)
Gridからデータを取得できなかったとしても、直接DataTableからデータを取得出来ると思います。
グリッドに隠しカラムを設定する事は、比較的常套手段なので出来ないという状況自体かなり不思議に感じていますが・・・

最後に、
>これからもよろしくご指導下さい
本気でそう思っているのであれば、こちらからの状況確認の質問にはちゃんと答えてください。
このスレッドだけでも、回答者側からの質問をどれだけ無視すれば気が済むのですか?
正直、状況確認の質問を無視し続けられると、回答する意欲がなくなります
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2007-11-27 09:57
引用:

私は「フォームに下記する7個のコントロールを配置して、それぞれに対応する
Buttonを配置しました。 それぞれのButtonのイベントハンドラに
MessageBox.Show(対応するコントロール.Text) と設定し・・」のMessageBox.Show( )
を指してミニマムコードと考えました。



「このミニマムコードを書いてみて」ということです・・・
こういうことですか?

コード:
private System.Windows.Forms.TextBox textBox
			= new System.Windows.Forms.TextBox();
private System.Windows.Forms.Button button
			= new System.Windows.Forms.Button();

// コンストラクタ
public Class1()
{
	InitializeComponent();
	this.button.Click += new System.EventHandler(Button_Click);
}

private void Button_Click(object sender, EventArgs e)
{
	MessageBox.Show(textBox.Text);
}



・・・C#だったっけ・・・まぁいっか・・・
注:一切コンパイルなどしていません。間違ってたらすいません。

さて上記コードをみて、何か違ったりしませんか?私はただしくだんじりさんの言ってることをとらえているでしょうか??

コードで書いていない ⇒ 日本語で説明しているということは、何かしらの、
だんじりさんの解釈が含まれてしまう可能性があります。

そういった質問者と回答者の間のずれをうまないためにも、コードというものを提示してほしいのです。
(コードはかかれたままに動きますからね。)

※ じゃんぬさんもきっとそんなかんじのことを言いたいのだと・・
  ちがったらちがうよこの野郎!といってください。 > じゃんぬさん

回答者に対して、ほんとうに自分の意図が伝わるのか、伝わらないのであれば
どうすれば伝わるのかをもうちょっと考えてみるといいかもしれないですね。
(これは回答者側にも言えてしまうんですけどね〜 特に私はそのあたり 苦手で・・(TT))
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-27 10:37
RUNさん、ありがとうございます。
RUNさんの言われていることが私には理解できない点があります。状況説明しながら
質問させてください。

引用:

RUNさんの書き込み (2007-11-27 00:51) より:
>あえて言うなら特殊な環境は1番ではないでしょうか
何故それが特殊で他が特殊でないと思われたのですか?
その理由を是非ともお教えいただけませんでしょうか?


2番はフォームにTextBoxを配置するほとんどの場合、データソースウインドウから
該当テーブルの該当フォルダーをフォーム上にドラック&ドロップするのではないの
でしょうか。
3番の単価TextBoxのVisibleプロパティをFalseに設定することはEnabledプロパティ
同様よくFalseに設定することは一般的と思いました。以上のことからどれも一般的で
すが、あえて言うなら1番画と思いました。(ところが実際には2番と3番が複合し
て発生したようです)。また最初の状況説明が不足していたのは、エラー原因の究明
をお願いしているのではなく、「・・・不可能なようですが、このことはVB.NETの仕
様でしょうか。」との一般常識を伺ったからからです。(言い訳に聞こえますか)
よって、最初の解答で80%の解答をいただいき、J.J.さん(2007-11-22 12:24)の
解答で100%とと感じておりました。

それでもRUNさんのからの指摘がありましたのでそのときの状況を説明いたしましたが
どれも一般的で、あえて言うなら1番と思った程度で、RUNさんの言われる2番かもしれません。

引用:

貴方が提示されている情報上では、TextBoxはWindows.FormsのコントロールのTextBoxだと判断してしまいます。 となると、TextBoxコントロール自体が何かをBindするような前提のコントロールではないので、bindすることが既に特殊です。


この意味が私には理解できません。TextBoxは何のソースともBindしないでフォーム上
に配置することが普通で、bindすることが特殊なのでしょうか。私が現在開発中のソフトでは
ほとんどTextBoxは何かのソースとBindしています。この点、私の使い方がおかしいの
でしょうか
引用:

また、貴方の提示されていない情報から判断される、GridView内のカラムコントロールであると判断した場合でも。 1と3は一般的な殆どのコントロールに存在する動作であり、 2だけはGridコントロール特有の動作である為、やはりこれが特殊だと判断できます。


次の引用は私がこのスレッドの最初に提示した情報ですが・・
引用:

DataGridViewでの非表示の列項目(フィールド)とプログラムで値の読み書きは 可能ですが、フォームに配置した非表示TextBoxとの値の読み書きは不可能なよう ですが、このことはVB.NETの仕様でしょうか。


また、
引用:

あと、じゃんぬさんもおっしゃられていますが、コントロールにbindさせているのはいったい何なのでしょうか?この点は非常に重要な情報です。 bindしたものによって、挙動は当然変わってきます。


Bindされたソース側のデータはテキストであれ数字であれごく一般的なデータです。
2007-11-22 11:01の例で言いますとDataSetの社員名簿テーブルの単価フィールドです。
RUNさん、色々ご指導ありがとうございました。
最後に回答者さんからの質問は、教わる質問者として出来る限り早く詳しく書いている
つもりですが、RUNさんのこのスレッドに最初解答いただいたのは次のように最初の
1行目から大変恐ろしく感じてしまい、無視させていただいた次第です。
引用:

RUNさんの書き込み (2007-11-22 00:38) より:
個人的に突っ込みどころ満載なのだが、出来るだけ簡潔かつ簡単な事だけ書きます。
まず、どの様な確認方法によって、非表示TextBoxとの値の読み書き方法を確認されましたか? 実際に使用したコードの提示をお願いします。


いずれにいたしましても皆様のご協力で、「BindされたコントロールのVisibleプロパ
ティをデザイナで Falseに設定しておくとBindが無効になる。」といえそうです。
ありがとうございました。


渡す→私に修正
[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-27 11:17 ]
"quote"の修正


[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-27 13:23 ]
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-27 11:02
Toshiさん、ありがとうございます。
Toshiさんやじゃんぬねっとが言われた、相手に説明するのに「コードで書け」が間違いなく
伝わる方法と私も理解できますが、次のことをコードで記述する方法が私にはわかりません。
1.TextBoxをフォームに配置する場合、データソースウインドウから該当テーブルの
該当フィールドをドラック&ドロップ(バインド)するコード記述
2.TextBoxが該当フィールドとBindしてデータを受取る前に、Visibleプロパティを
Falseに設定するコードをどの場所に書くか。(フォーム_Load時なら正常に動作します)

また大変申し訳ありませんが、Toshiさんがご提示いただいたコードも上記条件が
満足されたものかどうかは、私の力では解読できません。

それでもコードを記述して相手に伝えることは間違いなく伝えられることと、そのまま
テストできる点等、重要であることは、よく理解しました。
ご親切にありがとうございました。


5行目に(バインド)を追加
[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-27 11:33 ]
フォルダをフィールドに修正

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-27 13:54 ]
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-11-27 11:28
スレ主さんへ

他の方からも言われているので鬱陶しいと感じられるかもしれませんが、一言だけ。

回答者が「ミニマムコード」を求めるのは、以下の理由があります。
・回答者が問題点を見つけやすい
・回答者側で同様の環境を作りやすい
・何より質問者が問題点を見つけやすい

今回の場合、私の提示した手順であっているのであれば、デザイナで操作する部分が多い為
実際に書き込んだコード量は少なかったのかもしれません。
そういう場合は、実際に行った操作を順に並べるというやり方で表現したほうが分かりやすい
場合もあります。

スレ主さんが仕事でプログラムを作っているのであれば、ユーザーから
「エラーが出る。どうにかしろ。」
と言われた場合、どうされますか?その言葉だけじゃ対応できないですよね?

私の場合は、最低でも以下のことを確認します。
・エラーメッセージは何と表示されているか
・どのような操作を行った場合に発生したか
状況で他にもいくつか追加されますが、これらが分かるだけでもある程度問題点を絞り込めるからです。
本来は、今回私が提示したようなものをスレ主さんから提示してほしかったのだと思います。






で、ここからは別の話。
引用:

こんにちは。
内容が混乱してるようなので全部読んでいませんが、確かVisibleプロパティがFalseのコントロールはBindしないのは仕様だと思いますが、その辺は確認されていますでしょうか。


Jittaさんもおっしゃってますが、私も「仕様である」という情報を見つけられません。
Visual C# 2008 Beta2でも同様の結果となりましたので、仕様・・・というかそのような
設計思想なのかなと勝手に思ってますが、出来れば確証がほしいです。

どなたかご存知ありませんか?
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-27 13:07
J.J.さん、またまたありがとうございました。
お恥ずかしい話ですがToshiさんにお答えしたとおり、状況をコード化する力量がなく、
またJ.J.さんをはじめ、KIさん(2007-11-22 19:44)やふみおさん(2007-11-22 14:35)
のようにご理解いただいていたもので、それ以上の説明をしていませんでした。
申し訳ありません。


3行目の"含め"を削除

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-27 13:59 ]

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