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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

4433閲覧

ユーザーコントロールのプロパティをデザイナー画面で変更した時にすぐに反応しない

gamu

総合スコア31

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/11/14 01:17

編集2018/11/14 02:49

C#7 VS2017Community WinFormsの環境です。
ユーザーコントロールを作っています。

たとえばTextBoxControlのMultiLineプロパティを変更した時、
即座にデザイナー画面のテキストボックスは状態が変わって
「変更を受け付けてくれたんだな」とわかります。

このような事を自作コントロールで行いたい
(例えばあるboolの値を切り替えると色やサイズを変える等)
と思っていますがどのような仕組みで実現できるのでしょうか?

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

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

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

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

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

takabosoft

2018/11/14 02:44

WPFなのかWinFormsなのかUWPなのかの情報を載せてください。
gamu

2018/11/14 02:48

WinFormsです。失礼いたしました
gamu

2018/11/14 02:48

WinFormsです。失礼いたしました
YAmaGNZ

2018/11/14 03:06

どのように実装してできないとなっているのでしょうか?
guest

回答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

kenshirou

総合スコア772

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

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

kenshirou

2018/11/14 03:38

解決したとのこと、大変失礼しました。 何の役にも立てず、ゴメンナサイ。
gamu

2018/11/14 05:35

ご丁寧にありがとうございます。 私の方こそわかりにくい質問、そしてミスに気づかずに質問してしまい申し訳ありません。
guest

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

gamu

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問