質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

207閲覧

[C#] winフォームアプリ(.NET)でのコントロール制御について

aqua_tsu

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2019/06/25 12:45

MainForm内のコントロールの有効/無効を行いたい

MainFormにて、ログイン処理を行わなければ、他のボタンが無効状態で
ログイン処理が正常にできた場合には、他のボタンを有効にしたいです。

初めは愚直に、別関数を作成し、

if(flag){
xxx.Enable = true;
}else{
xxx.Enable = false;
}

と書いてましたが、コントロールが増えると追記しなければならないため、
特定ボタン以外をまとめて操作できるような方法を探してます。
(htmlのid的な要素)

コントロールが増えても、関数には追記する必要がない方法がありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/25 23:29

特定ボタンというのが具体的に何だか分からないのですが、それはとりあえず置いといて・・・ > htmlのid的な要素 ということは、JavaScript の getElementById と同等なメソッドが Windows Forms アプリにあれば、質問者さんの課題は解決するということですか?
aqua_tsu

2019/06/26 00:31

分かりづらくすみません。 特定ボタン = [ログイン後でないと操作させたくないボタン]とさせてください。 なので、[ログインしたらEnable,ログアウトしたらFalse]をさせたいのです。 > JavaScript の getElementById と同等なメソッドが Windows Forms アプリにあれば そのような感じです。 今後コントロールが増えた際でも、色々な場所に記載しなくても開発できるような 仕組みがないものかと考えて質問させていただきました。
Zuishin

2019/06/26 00:45

データバインディングを使ったことはありますか?
退会済みユーザー

退会済みユーザー

2019/06/26 01:31

> そのような感じです。 ControlCollection.Find で検索すると役に立ちそうな記事がヒットするのではないかと思いますが、いかがですか?
aqua_tsu

2019/06/27 13:44

> Zuishin さん   なんとなくだったので、勉強しなおします。   ありがとうございます。 > SurferOnWww さん  学びなおすことが多そうなので、合わせて勉強させていただきます。  ありがとうございます。
Zuishin

2019/06/27 13:52

データバインディングを使えば簡単に解決するが、どこから説明すればいいかわからないので、どこまで知っているかを質問しただけです。使わなくても解決すると思うので説明しません。
guest

回答2

0

ベストアンサー

Tagプロパティに何かしら識別用の値をセットしておいて、その値によって有効無効制御を行ってはどうでしょうか?

C#

1// Tagプロパティに何か値がセットしてあるコントロールのEnabledプロパティを変更する 2private void EnabledChange(bool value) 3{ 4 foreach(Control c in this.Controls) 5 { 6 if (c.Tag != null) c.Enabled = value; 7 } 8}

上記ソースはあくまでも例なので、Tagプロパティの中身をどうするか等はご自身の都合のいいようにしてください。

って、こんなことしなくても、違うパネルにコントロール置いて、そのパネルのEnabledを変化させればいいだけじゃないですか?

投稿2019/06/25 13:19

編集2019/06/25 13:59
YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2019/06/25 13:25

目的は果たせると思いますが、対象のオブジェクトを直接見たほうが良くないですか?tagになにか入ってるとか、パッと見た時にわかりづらいですし。
YAmaGNZ

2019/06/25 13:31

制御したくないコントロールがいくつあるか不明でしたので、どちらも複数あるのであれば、Tagにて識別したほうがいいのではないかと考えました。
gentaro

2019/06/25 14:11

パネルのEnabledで制御する方法は、制御の対象がうまいこと画面上でグループ化できる場合だけですね。
YAmaGNZ

2019/06/25 14:24

まぁ、画面レイアウトが分からないので質問者さんが使える手か分かりませんが、ログインに関するコントロールであれば、まとめて1つのパネルに配置できる可能性があるかと思いましたので、書いてみました。 反対にパネルに配置していないコントロールを制御するということも考えられるかと思います。
aqua_tsu

2019/06/26 00:35

>> YAmaGNZ さん    ありがとうございます。意図した動きになりました。    これからいじくって確認しますが、tagでのグループ化とかできると    いろいろと出来そうですね。 >> gentaro さん    パネルのご意見ありがとうございます。自身もAccess開発等でプロパティ見落としなど    あるので、ぱっと見たときにわかりやすい方が好きです。    画面上で配置のグループ化出来ているので、パネルも視野にいれてみます。
guest

0

Formや特定のコントロールの子はControl.Controlsプロパティでアクセスできるので、ループで取り出したりLINQを使って、その「特定のボタン」以外のEnabledプロパティをfalseにしてやればいいのでは。

投稿2019/06/25 12:51

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問