C#7 VS2017Community WinFormsの環境です。
ユーザーコントロールを作っています。
たとえばTextBoxControlのMultiLineプロパティを変更した時、
即座にデザイナー画面のテキストボックスは状態が変わって
「変更を受け付けてくれたんだな」とわかります。
このような事を自作コントロールで行いたい
(例えばあるboolの値を切り替えると色やサイズを変える等)
と思っていますがどのような仕組みで実現できるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
変更したらデザインが変わってほしい値をプロパティで公開し、プロパティ値が変わったらそのプロパティのsetでデザインを変更すればよいと思います。
以下に簡単な例を用意しましたが、これはHogeHogeというプロパティをユーザコントロールに追加したもので、これを変更するとユーザコントロールの背景色が変わる、というものですが、デザイナ上でフォーム等にこのユーザコントロールを貼り付けた場合、デザイナでフォーム上のこのユーザコントロールの該プロパティを変更した場合でもこのユーザコントロールの背景色は変わります。
※DefaultValueとかは考慮していません。
C#
1 public partial class UserControl1 : UserControl 2 { 3 private bool _hogehoge = false; 4 5 public UserControl1() 6 { 7 InitializeComponent(); 8 HogeHoge = false; 9 } 10 11 public bool HogeHoge 12 { 13 get { return _hogehoge; } 14 set 15 { 16 _hogehoge = value; 17 if (value) 18 { 19 this.BackColor = Color.Red; 20 } 21 else 22 { 23 this.BackColor = Color.Blue; 24 } 25 } 26 } 27 }
投稿2018/11/14 03:35
総合スコア772
0
自己解決
自己解決しました。
原因は記述ミスでした。
bool値を反転させる処理が重複した為に何も変化がないように見えていただけでした。
特に変わった事をしなくともsetプロパティの行からデザイン変更メソッドを呼び出すことができました。
お騒がせしました。
以下に希望の動作ができたコードを記述します。
デザイナー画面からChangeDesignFlagを変更すると即座にPictureBox1の色が青か赤に変わる。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Drawing; 5using System.Data; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace WindowsFormsApp1 12{ 13 14 public partial class MyScrollBar : UserControl 15 { 16 17 public MyScrollBar() 18 { 19 InitializeComponent(); 20 } 21 22 bool keepValue; 23 24 [Browsable(true)] 25 [Description("これを変えるだけですぐに反応して欲しい")] 26 public bool changeDesignFlag 27 { 28 get 29 { 30 return keepValue; 31 } 32 set 33 { 34 keepValue = value; 35 ColorChange(); 36 } 37 } 38 39 private void ColorChange() 40 { 41 if (keepValue) 42 { 43 pictureBox1.BackColor = Color.Blue; 44 } 45 else 46 { 47 pictureBox1.BackColor = Color.Red; 48 } 49 } 50 51 52 private void MyScrollBar_Resize(object sender, EventArgs e) 53 { 54 ColorChange(); 55 } 56 57 58 private void MyScrollBar_Load(object sender, EventArgs e) 59 { 60 ColorChange(); 61 } 62 } 63} 64 65 66
投稿2018/11/14 03:34
総合スコア31
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。