C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Designer.csでのエラー


(過去ログ 100 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■59902 / inTopicNo.1)  Designer.csでのエラー
  
□投稿者/ Haru (12回)-(2011/06/10(Fri) 09:30:33)

分類:[C#] 

visual studio2008(C#)を使いプログラムを作っているのですが、以下のところでエラーが発生します。
しかし、Designerって全く触ったことがないので原因がわかりません。
エラー文は、【エラー 1 型 'string' を型 'System.Windows.Forms.DataGridViewTextBoxColumn' に暗黙的に変換できません。】です。
この原因は何なんでしょう。教えてください。


Form1.Designer.cs




//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(1042, 725);
this.Controls.Add(this.Owari);
this.Controls.Add(this.label1);
this.Controls.Add(this.tabControl1);
this.MaximumSize = new System.Drawing.Size(1058, 763);
this.MinimumSize = new System.Drawing.Size(1058, 763);
this.Name = "Form1"; ←ここでエラー




引用返信 編集キー/
■59903 / inTopicNo.2)  Re[1]: Designer.csでのエラー
□投稿者/ shu (778回)-(2011/06/10(Fri) 09:51:54)
No59902 (Haru さん) に返信

突然発生したのなら、開いているドキュメント(コード、デザイン)をすべて閉じて
リビルドするとなおることが多いです。

それでもなおらないようなら何の操作をしたらそうなったか思い出してその操作を戻してみると
よいかと思います。
引用返信 編集キー/
■59904 / inTopicNo.3)  Re[1]: Designer.csでのエラー
□投稿者/ 魔界の仮面弁士 (2213回)-(2011/06/10(Fri) 10:05:30)
No59902 (Haru さん) に返信
> エラー文は、【エラー	1	型 'string' を型 'System.Windows.Forms.DataGridViewTextBoxColumn' に暗黙的に変換できません。】です。
> この原因は何なんでしょう。教えてください。

そのエラーは、以下の手順で再現できます。

(1) Form1 に DataGridView を貼る。
(2) dataGridView1 を選択し、右上の三角マークを開く。
(3) [列の編集...]をクリックして、「列の編集」ダイアログを開く。
(4) [追加]ボタンを押して、「列の追加」ダイアログを開く。
(5) 非バインド列の名前を、"Column1" から "Name" に変更する。
(6) [追加(A)]ボタンを押したのち、[閉じる]でダイアログを閉じる。
(7) 「列の編集」ダイアログに戻るので、[OK]でダイアログを閉じる。
(8) 編集中の Form1.cs を保存し、Form1.cs デザイナをいったん閉じる。
(9) コンパイルすると、Form1.designer.cs にて下記の警告とエラーが検出される。

コンパイラ エラー [CS0029]
 型 'string' を型 'System.Windows.Forms.DataGridViewTextBoxColumn' に暗黙的に変換できません。

レベル2 警告 [CS0108]
 'WindowsFormsApplication1.Form1.Name' は継承されたメンバ 'System.Windows.Forms.Control.Name' を非表示にします。非表示にする場合は、new キーワードを使用してください。


> Designerって全く触ったことがないので

対処方法としては、Form1.designer.cs 内の
 private System.Windows.Forms.DataGridViewTextBoxColumn Name;
という箇所を見つけ、上記 "Name" と書いてある箇所で右クリックして、
[リファクタ] → [名前の変更]を用いるなどして、"Name" という変数名を
"NameDataGridViewTextBoxColumn" などの別名にしてしまうことです。
(リファクタリング ツールが使えない環境の場合は、自身でリネームしてください)

なお、この置換作業において、void InitializeComponent() 内の
 this.Name = "Form1";
までもが
 this.NameDataGridViewTextBoxColumn = "Form1";
に置き換えられてしまう事がありますが、これは Name のままにしておいてください。

引用返信 編集キー/
■59905 / inTopicNo.4)  Re[2]: Designer.csでのエラー
□投稿者/ 魔界の仮面弁士 (2214回)-(2011/06/10(Fri) 10:21:59)
No59904 (魔界の仮面弁士) に追記
> なお、この置換作業において、void InitializeComponent() 内の
>  this.Name = "Form1";
> までもが
>  this.NameDataGridViewTextBoxColumn = "Form1";
> に置き換えられてしまう事がありますが、これは Name のままにしておいてください。

説明不足だと思うので、さらに追記。


元のコードでは恐らく、InitializeComponent の先頭部分に、
>  this.Name = new System.Windows.Forms.DataGridViewTextBoxColumn();
があり、後半部に
>  this.Name = "Form1";
があると思います。前半部はリネーム対象ですが、後半部はリネームしません。
すなわち、それぞれは
 this.NameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
と
 this.Name = "Form1";
という形にリネームするという事です。



また、リファクタによるリネームを行った場合には、
 // 
 // Name
 // 
 this.Name.HeaderText = "Column1";
 this.Name.Name = "Name";
の部分のコードが、
 this.NameDataGridViewTextBoxColumn.HeaderText = "Column1";
 this.NameDataGridViewTextBoxColumn.Name = "Name";
などと置換されるかと思いますが、ここは
 this.NameDataGridViewTextBoxColumn.HeaderText = "Column1";
 this.NameDataGridViewTextBoxColumn.Name = "NameDataGridViewTextBoxColumn";
のように、列の Name を変数名と一致させておくのが本来の形となります。
(ただし列の Name プロパティと 列の変数名 が違っていたとしても、動作上は問題ありません)

引用返信 編集キー/
■59906 / inTopicNo.5)  Re[3]: Designer.csでのエラー
□投稿者/ shu (779回)-(2011/06/10(Fri) 10:59:42)
No59905 (魔界の仮面弁士 さん) に返信

なるほど、コントロール名(コンポーネント名)を付ける時にコントロール名(コンポーネント名)間の重複は
チェックされるけどフォーム上のプロパティ、メソッド名などとのチェックが
行われないために発生する現象ですね。

引用返信 編集キー/
■59907 / inTopicNo.6)  Re[2]: Designer.csでのエラー
□投稿者/ Haru (13回)-(2011/06/10(Fri) 11:16:01)
2011/06/10(Fri) 11:16:14 編集(投稿者)

みなさんのを参考にやってみたところ、無事解決しました。ありがとうございます。
解決済み
引用返信 編集キー/
■59918 / inTopicNo.7)  Re[3]: Designer.csでのエラー
□投稿者/ Azulean (759回)-(2011/06/10(Fri) 22:10:24)
とりあえず、標準的なプロパティとかコントロールとかクラスとか、そういったものと同じ名前をつけるのは辞めた方がよいでしょう。
今回の事例に限らず、いろいろとハマる可能性があるので。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -