前提・実現したいこと
フォーム上にある10個のチェックボックスの状態をボタンクリック時に別のメソッドを呼び出し取得したいです。
呼び出すメソッドにはfor文で10個のチェックボックスの状態を取得し、チェックされた項目に対しいろいろな処理をさせます。
発生している問題・エラーメッセージ
チェックした状態でボタンをクリックしてもchecked=falseになってしまいます。
該当のソースコード
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form1 obj = new Form1(); obj.test(); } private void test() { MessageBox.Show(Convert.ToString(checkBox1.Checked)); } }
試したこと
チェックボックスとボタンだけを設置したフォームでテストしましたが同じくFalseになってしまいます。
ボタンクリックメソッドで取得した時は正常に状態を取得できました。
まだ初心者なので用語等間違っていたらすみません。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019
コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。
ご指摘ありがとうございます。
修正しました。
初めての為消してしまいました。
button1_Click の中のコードが変です。2 行とも削除(またはコメントアウト)して、代わりに以下のようなコードを入れてデバッガで result がどうなるか調べてみてはいかがですか。
bool result = this.checkBox1.Checked;
ありがとうございます。
resultはtrueになりましたがtestメソッドが呼び出されません。
あと書き忘れてしまいましたが、本当はチェックボックスを10個用意して全ての状態をtestメソッドでforを使い取得して処理しようとしています。
質問に追記します。
> resultはtrueになりましたがtestメソッドが呼び出されません。
上の私のコメントの通り「2 行とも削除(またはコメントアウト)」したのであればそうなるのは当然ということは分かりますよね。test() を呼び出すならそのコードを書かないと。その場合書くのは obj.test(); ではないですよ。button1_Click の中のコードに test(); を追加して以下のようにしたらどうなりますか?
bool result = this.checkBox1.Checked;
test();
質問者さん、基本的なところが分かってない=掲示板で話が通じない・・・という状況のようです。質問する前に、話が通じる程度には勉強が必要かと思います。
勉強が必要なのは確かですがまだ初心者って書いてありますよね?
2行削除してbool result = this.checkBox1.Checked;でどうですかって言われてobj.test();ではなくtest();を足す初心者がいますか?
ただ、教えてくださったので感謝致します。
ありがとうございました。
> 2行削除してbool result = this.checkBox1.Checked;でどうですかって言われてobj.test();ではなくtest();を足す初心者がいますか?
初心者と言っても色々なレベルの人がいますから、「button1_Click の中のコードが変です」と言われたのだから、何が変なのかに気付いて、test(); で試す人は多々いると思いますけど。
そもそも、あなたが質問に書いたコードでは、第三者は CheckBox が存在しているのかどうかも分からないのは認識してますか? だから「デバッガで result がどうなるか調べてみてはいかがですか」と書いたのです。で、あなたは「resultはtrueになりました」と確認してくれたのですよね。
そしたら、次のステップは、「button1_Click の中のコードが変です」と言っているのですから、あなたが何が変なのかを考えて問題に気が付くか、考えても分からなければ聞いてくると思っていたのですが、そういうのはあなたには期待しすぎでしたか?
試したことの欄読んでますか?
チェックボックスとボタンだけ配置したって書いてありますし
ボタンクリックメソッド内ではtrueになるのは既に確認してます。
>CheckBox が存在しているのかどうかも分からない
チェックする為だけに存在するチェックボックスのコードをどこになにを書くんですか?
>考えても分からなければ聞いてくると思っていたのですが
色々考えてわからなかったから質問してるんです。
test();で呼び出せることを知っていたらそもそもこんな質問しません。
あなたレベルの人だとそんなことも知らないなんて想像もつかなかったでしょうね。
期待に応えられずすみませんでした。
> 試したことの欄読んでますか?
読みましたよ。でも「チェックボックスとボタンだけを設置したフォームでテストしましたが同じくFalseになってしまいます」と書いてありますね。それをどう読めというのですか? 自分はちゃんと CheckBox が配置されているとは思えなかったですけど。アップされているコードもあり得ないことをしているし、何か想像の斜め上のことをやっているのではと疑がわざるを得ません。だから「デバッガで result がどうなるか調べてみてはいかがですか」と書いたのですよ。その答えで CheckBox は button1_Click で Checked が取得できるように配置されているようだとやっと確認できた次第です。自分はエスパーではないので・・・
一度 https://teratail.com/help/question-tips を読んでいただければと思います。
試したことを読んでもチェックボックスが配置されてるか疑う人がいるんですね。捻くれてますね。
チェックボックスとボタンを設置したと書いてあるのに「デバッガで result がどうなるか調べてみてはいかがですか」と書いてチェックボックスの存在を確認しようとしてたなんて想像の斜め上を行ってて気づきませんでした。
他の回答者さんは理解して頂いてるみたいなのでエスパーなんですかね。
>アップされているコードもあり得ないことをしているし
ボタンをクリックして別のメソッドを呼び出すのはそんなにあり得ないんですか?
教えてくれる人が近くいないし、やりたいことを全部ネットで調べて勉強しながら作ってるのでおかしいコードを書いてるかもしれませんね。
自分なりに伝わりやすいようにやりたいところだけのコードを作って質問したんですけど伝わらない事もあるんだと勉強になりました。
ありがとうございます。
もう時間の無駄なので返事はしません。
一人で書き込んでて下さい。
> 試したことを読んでもチェックボックスが配置されてるか疑う人がいるんですね。捻くれてますね。
疑ってかかって、きちんと確認しなければ、迷走するのは初心者との話ではよくあることです。
あなた自身が「まだ初心者なので」とか言っているんだからもっと謙虚になった方が良いと思いますよ。そういう態度であなたが何も得することはないはず。
> 他の回答者さんは理解して頂いてるみたいなのでエスパーなんですかね。
他の人の回答は 2020/06/26 12:16 と 2020/06/26 12:20 で、私が下のレスを返したのは 2020/06/26 11:53 ということは認識してますか?
> 上の私のコメントの通り「2 行とも削除(またはコメントアウト)」したのであればそうなるのは当然ということは分かりますよね。test() を呼び出すならそのコードを書かないと。その場合書くのは obj.test(); ではないですよ。button1_Click の中のコードに test(); を追加して以下のようにしたらどうなりますか?
> bool result = this.checkBox1.Checked;
> test();
上のレスで解決しているはずなのですが・・・ 他の人の回答は基本私のレスと同じことを言ってますよ。
もう一回言いますが、質問者さん、基本的なところが分かってない=掲示板で話が通じない・・・という状況のようです。質問する前に、話が通じる程度には勉強が必要かと思います。
> もう時間の無駄なので返事はしません。一人で書き込んでて下さい。
そういうのは逃げというのでは?
回答2件
あなたの回答
tips
プレビュー