1

最初の行のセル内にあるパネルを使用する TableLayoutPanel を持つカスタム コントロール OrderEntryCtl があります (ヘッダー行と呼びます。パネルには HeaderPanel1、HeaderPanel2 などの名前が付けられます [合計 8 つのパネル、行 0 の各列に 1 つ) TableLayoutPanel の])。各 Panel の BackColor は最初に青に設定されます。ある時点で、各 Panel の BackColor をグレーに変更したいと考えています。ここに私が直面している問題があります: 1 つのパネルの BackColor を変更すると、実際には Form に追加されたすべての OrderEntryCtl のすべての Panel の BackColor が変更されます。参考までに: どのパネルも動的に作成していません。それらはすべてデザイナーを介して作成され、VS によって作成されたコードは OrderEntryCtl.Designer.cs にあります。

したがって、フォームにいくつかの OrderEntryCtl があることを考慮してください (これらは、デザイナーではなく、コードによって実行時にプログラムまたは動的に追加されます)。ユーザーは、最初の OrderEntryCtl (OrderEntry1 と呼びます) を操作してから、コントロールの一部であるボタンをクリックします。そのボタンのクリック イベント ハンドラは、8 つの HeaderPanel を灰色に変える必要があります。

HeaderPanel1.BackColor = Color.DarkGray;
HeaderPanel2.BackColor = Color.DarkGray;
HeaderPanel3.BackColor = Color.DarkGray;
//etc

OrderEntry1 では 8 つのヘッダー パネルだけが灰色になると予想していますが、すべての OrderEntryCtl のすべてのヘッダー パネルが灰色になっています。本当に奇妙なのは、最後の 7 つの "HeaderPanel#.BackColor = Color.DarkGray;" をコメントアウトできることです。コマンド、HeaderPanel1.BackColor = Color.DarkGray のみを残します。そしてこれはまだ起こります。しかし、イベントハンドラーに追加すると

HeaderPanel2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;

OrderEntry1 のパネル 2 の枠線スタイルのみが影響を受けます。これは予期された動作です! BackColor プロパティをパネルの BorderStyle プロパティと同じように動作させるにはどうすればよいですか?

最初のコメントに応えて、Designer.cs にコードを含めました。

private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Panel HeaderPanel1;
private System.Windows.Forms.Panel HeaderPanel2;
private System.Windows.Forms.Panel HeaderPanel3;
private System.Windows.Forms.Panel HeaderPanel4;
private System.Windows.Forms.Panel HeaderPanel5;
private System.Windows.Forms.Panel HeaderPanel6;
private System.Windows.Forms.Panel HeaderPanel7;
private System.Windows.Forms.Panel HeaderPanel8;
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.HeaderPanel1 = new System.Windows.Forms.Panel();
this.HeaderPanel2 = new System.Windows.Forms.Panel();
this.HeaderPanel3 = new System.Windows.Forms.Panel();
this.HeaderPanel4 = new System.Windows.Forms.Panel();
this.HeaderPanel5 = new System.Windows.Forms.Panel();
this.HeaderPanel6 = new System.Windows.Forms.Panel();
this.HeaderPanel7 = new System.Windows.Forms.Panel();
this.HeaderPanel8 = new System.Windows.Forms.Panel();
this.tableLayoutPanel1.SuspendLayout();
this.HeaderPanel1.SuspendLayout();
this.HeaderPanel2.SuspendLayout();
this.HeaderPanel3.SuspendLayout();
this.HeaderPanel4.SuspendLayout();
this.HeaderPanel5.SuspendLayout();
this.HeaderPanel6.SuspendLayout();
this.HeaderPanel7.SuspendLayout();
this.HeaderPanel8.SuspendLayout();
// 
// tableLayoutPanel1
// 
this.tableLayoutPanel1.BackColor = System.Drawing.Color.White;
this.tableLayoutPanel1.ColumnCount = 8;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 24F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 26F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 24F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 12F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 18F));
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel2, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel3, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel4, 3, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel5, 4, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel6, 5, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel7, 6, 0);
this.tableLayoutPanel1.Controls.Add(this.HeaderPanel8, 7, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(944, 90);
this.tableLayoutPanel1.TabIndex = 0;
// 
// HeaderPanel1
// 
this.HeaderPanel1.BackColor = global::WdRx.Fulfillment.Dispensing.Workstation.Properties.Settings.Default.OrderEntryHeader;
this.HeaderPanel1.Controls.Add(this.Lbl_Header1);
this.HeaderPanel1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::WdRx.Fulfillment.Dispensing.Workstation.Properties.Settings.Default, "OrderEntryHeader", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.HeaderPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.HeaderPanel1.Location = new System.Drawing.Point(675, 0);
this.HeaderPanel1.Margin = new System.Windows.Forms.Padding(0);
this.HeaderPanel1.Name = "HeaderPanel1";
this.HeaderPanel1.Size = new System.Drawing.Size(107, 45);
this.HeaderPanel1.TabIndex = 10;

わかりました、上記を確認した後、私の問題は、BackColor プロパティを構成ファイルで定義された色に関連付けていることであり、すべてのパネルに対してこれを行っていることに気付きました。バインドはプロパティ変更イベント用であるため、1 つのパネルでプロパティを変更すると、すべてのパネルが更新されます。

そのため、OnPropertyChange イベントをバインドせずに、構成ファイルから初期色を取得する方法について提案を行っていますか? ? ? 誰 ?

4

0 に答える 0