C#でツールを作っています。
ボタンを押すと、TextBoxやらbuttonが生成されるツールを作ったのですが、
ボタンのうまい消し方がわかりません。
最初にボタンを押すと、機能1のためのボタンやTxtboxが作られるとこまではいいのですが、機能2のボタンを押すと、機能1のボタンが残ったまま機能2のボタンが作られてしまいます。
今は、別にVISIBLEをfalseするボタンで対応しましたが、やっぱり不便です。二度手間です。よそのアプリケーションはどれもほかの機能のボタンを押した時点で切り替わってくれます。
どのように書けばいいのでしょうか?
No.4ベストアンサー
- 回答日時:
> public void DLL関数(Control.ControlCollection Controls)
> {
> var textbox1 = new TextBox();
> textbox1.Location = new System.Drawing.Point(10, 260);//
> textbox1.Size = new System.Drawing.Size(180, 20);
> textbox1.Name = "textbox1";
> Controls.Add(textbox1);
> }
DLL側がまさにこうだとすると、ちょっとあまりよろしくないのではないでしょうか。
TextBoxのNameプロパティも被るし、作成したコントロールを戻しているわけでもないし。
実際、その生成されたコントロールを操作したい場合はどのようにしているのでしょうか?
生成されたコントロールが判断つくなら、フォーム内で
Control control = 対象コントロール;
this.Controls.Remove(control);
control.Dispose();
で消せます。
以下、実際の動きとは異なるでしょうが、機能1ボタン、機能2ボタンでコントロールを切り替える例になります。
Findメソッドは全プロパティからその文字列を検索するので、都合が悪いようなら、やはり
生成したコントロールを呼び元で認識できる方が良いと思います。
Nameプロパティだけを調べて見つけ出すには、下記ページのように作りこまなければならないので、
そもそも複雑な制御でない場面で、それが必要になる方が問題のような気がします。
http://jeanne.wankuma.com/tips/csharp/form/findc …
public void DLL関数(Control.ControlCollection Controls)
{
var textbox1 = new TextBox();
textbox1.Location = new System.Drawing.Point(10, 260);//
textbox1.Size = new System.Drawing.Size(180, 20);
textbox1.Name = "textbox1";
Controls.Add(textbox1);
}
private void 機能1_Click(object sender, EventArgs e)
{
this.removeDynamicControls();
this.DLL関数(this.Controls);
}
private void 機能2_Click(object sender, EventArgs e)
{
this.removeDynamicControls();
this.DLL関数(this.Controls);
}
private void removeDynamicControls()
{
Control[] controls = Controls.Find("textbox1", true);
foreach (Control control in controls)
{
this.Controls.Remove(control);
control.Dispose();
}
}
この回答への補足
しまった、補足とお礼の使い方が逆になってしまった。
よってお礼です。
僕のほしかったものそものもがソースでもらえるとは思いませんでした。かるく数時間の僕の時間が短縮されました。
ここまでしていただいて文字でお礼することしかできないのが心苦しいですが、そういった部分は僕がもっと学びレベルを上げて同じように困っている人を助けることで恩返しとさせていただきます。
本当にありがとうございました。
No.3
- 回答日時:
Private Sub 機能1ボタン_Click() Handles 機能1ボタン.Click
ボタンB.Visible = False
テキストB.Visible = False
ボタンA.Visible = True
テキストA.Visible = True
End Sub
Private Sub 機能2ボタン_Click() Handles 機能2ボタン.Click
ボタンA.Visible = False
テキストA.Visible = False
ボタンB.Visible = True
テキストB.Visible = True
End Sub
でいいのでは。
ボタンA、ボタンB、テキストA、テキストB自体がそもそもデザイン中にフォーム上に『静的』に
設置しているならば、上記で十分です。
Aグループ、Bグループごとにユーザーコントロールにしているならば
そのユーザーコントロールのVisibleプロパティを変更すればいいです。
『動的』にTextBoxやButtonなどをプログラム上でインスタンス化して画面上に表示させようと
しているようだとちょっと違います。
あれこれ書くと混乱してしまいそうですから敢えて記しません。
解決しないようでしたら、現在、どのようなプログラムでボタンやテキストの表示を実現しているのかを
示した方が良いでしょう。
この回答への補足
DLLを動的に読み込むプロゴラム(MEF)で、テキストボックスやボタンの情報はDLL側にあります。
public void DLL関数(Control.ControlCollection Controls)
{
var textbox1 = new TextBox();
textbox1.Location = new System.Drawing.Point(10, 260);//
textbox1.Size = new System.Drawing.Size(180, 20);
textbox1.Name = "textbox1";
Controls.Add(textbox1);
}
メイン側では
foreach (var item in ○○){
item.DLL関数(this.webBrowser7, this.tabControl1, this.Controls);
}
なのでインスタンス化してるパターンになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 扇風機・冷風機・サーキュレーター スマートプラグで最近の扇風機は操作できない? 5 2022/11/04 13:37
- Android(アンドロイド) スマホ chromeの戻るボタンが機能しにくい スマホ(OPPO reno5A、Android12) 1 2022/09/11 20:39
- ノートパソコン DELLノートがスリープから復帰しない 5 2022/09/01 20:08
- ノートパソコン Windows10のノートパソコンをさっきまで使っていて、指紋がついてたからぱっぱっとティッシュでキ 6 2022/07/13 01:52
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(AV機器・カメラ) 至急!Panasonicのリモコンを使ってるのですが、電源ボタンなどや音量ボタン入力切り替えのボタン 3 2022/06/02 14:43
- docomo(ドコモ) ocnで使用可能なガラケー 2 2023/03/18 16:55
- 扇風機・冷風機・サーキュレーター 扇風機リモコンの反応劣化。接点復活材で対処。 4 2022/08/14 21:34
- グループウェア 電子メールのソフト「Outlook2016」の機能について 1 2023/04/04 21:22
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
C# Controls.Addで動的に配置したコントロールのRemoveについて
C言語・C++・C#
-
【C#】別フォームも同時に閉じるには?
C言語・C++・C#
-
間違えて配置してしまったコントロールの削除
Visual Basic(VBA)
-
-
4
C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか
C言語・C++・C#
-
5
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
6
C#のループでtextboxに値を入れる方法
C言語・C++・C#
-
7
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
8
フォームの再読み込み
Visual Basic(VBA)
-
9
【C#】textBoxの指定行のデータを削除
C言語・C++・C#
-
10
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
11
C#でキーイベントが発生しないようです
C言語・C++・C#
-
12
c# 文字列の最後から1文字削除したい
C言語・C++・C#
-
13
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
14
【C#】FindWindowExの使い方を教えてください
その他(プログラミング・Web制作)
-
15
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
16
C# dataGridViewの値だけクリア
C言語・C++・C#
-
17
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
18
C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-
19
CSVファイルの特定行の削除
Visual Basic(VBA)
-
20
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
ユーザーフォームに別シートか...
-
VBA(エクセル)で自動的にボタン...
-
最小化のボタンだけ表示したい...
-
VBAで多数のプログラムを一つの...
-
Vba 電卓 一文字消すボタン
-
ボタン
-
Excel VBA Application.caller...
-
ショートカットキーについて
-
プロシージャからイベントをコ...
-
アイコンとボタンの違い
-
C♯初心者で、四則演算の電卓を...
-
コマンドボタンやイメージにマ...
-
ボタンをマウスで押し続けたと...
-
if(wp & MK_ LBUTTON)
-
C#プログラムで、ボタンをショ...
-
ボタン(コントロール)を丸くしたい
-
ユーザーフォーム中の入力順番...
-
ユーザフォーム AfterUpdate処...
-
C#でFormのタイトルバーにボタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
Excel VBA Application.caller...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
プロシージャからイベントをコ...
-
他のアプリケーションとの連携
-
閉じると「+」になり開くと「-...
-
C#で動的に作ったtextboxを消す。
-
ボタンをマウスで押し続けたと...
-
VBA でのボタンの移動について
-
CommandButtonのCaptionを変化...
-
ボタン
-
TextBoxでEnterキーを押すと、...
-
C♯初心者で、四則演算の電卓を...
おすすめ情報