7

私はその中にコントロールTableLayoutPanelのグリッドを持っています。PictureBoxそれぞれを手動で削除して各セルに新しいコントロールを配置するのではなく、すべてをラベルコントロールに変更するためのショートカット方法を見つけようとしています。

デザイナーコードにアクセスして、PictureBoxをLabelで検索/置換できると思っていましたが、今では

「オブジェクトがターゲットタイプと一致しません」

VisualStudioのエラーリストのエラー。デザイナーページも表示できなくなりました。これは許可されていませんか?それが許可されている場合、それを行う正しい方法は何ですか?

4

4 に答える 4

17

生成されたコードを詳しく見ると、次のようになります。

label1

this.label1 = new System.Windows.Forms.Label();
// 
// label1
// 
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(134, 163);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(35, 13);
this.label1.TabIndex = 1;
this.label1.Text = "label1";

pictureBox1

this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
// 
// pictureBox1
// 
this.pictureBox1.Location = new System.Drawing.Point(97, 75);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(100, 50);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;

私の推測では、

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();

あなたによって次のようなものに変更されます:

((System.ComponentModel.ISupportInitialize)(this.label1)).BeginInit();

これは機能せず、デザイナーの問題が発生します。Object does not match target type.

したがって、すでに行った変更を適用し、次のような行を削除します。

((System.ComponentModel.ISupportInitialize)(this.label1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.label1)).EndInit();

そして、私はあなたが行ってもいいと思います。

于 2013-01-29T20:55:01.550 に答える
1

デザイナーコードを変更しないでください。そのようなものは自動的に生成されます。変更によって予期しない動作が発生するだけでなく、上書きされる可能性もあります。

私はあなたのフォーム、またはあなたのデザイナーが背後にあるものに変更を加えることを試み、それがすべてのコードを再生成することを願っています。

于 2013-01-29T20:39:55.930 に答える
1

デザイナのすべての画像ボックスを削除してから、_loadイベント(または別の便利なイベント)にすべてのラベルを追加できます。そうすれば、次回の変更が簡単になります。

于 2013-01-29T20:44:25.833 に答える
0

Haxxが示すように、PictureBoxに必要な追加の初期化もクリーンアップする必要があります。受け取ったエラーは、インターフェイスキャストエラーです。あなたの場合、Haxxが推測したように、LabelコントロールはISupportInitializeインターフェースを実装していません。

ほとんどの場合とは異なり、私は便宜のためにデザイナーコードを変更することを恐れていません。あなたがしていることのために、そうしても大丈夫です。オブジェクトを知っているだけで、チェックインする前にチェックインしてください。カスタムコードをそこに入れないでください。

于 2013-01-29T21:01:50.347 に答える