2017-04-18 4 views
0

ブラウンフィールド開発を行っています。このようなコードで多くの古いフォームを処理する必要があります。フォームのアップグレード時にWinFormsデザイナーがイベントハンドラの割り当てを取り除きます。

// 
// Button1 
// 
Button1.Location = new System.Drawing.Point(556, 447); 
Button1.Name = "Button1"; 
Button1.Size = new System.Drawing.Size(136, 23); 
Button1.TabIndex = 112; 
Button1.Text = "Restart kontor"; 
Button1.Click += Button1_Click; 

これらのフォームの1つを編集しようとすると、フォームがアップグレードされます。すべての識別子には、 "this"修飾子が前に付けられます。残念ながら、Visual Studio 2015では、ファイル内のすべてのイベントハンドラの割り当てを取り除くだけです。これは、上の例のスニペットの最後の行が単に消えることを意味します。

どうしてですか?それを防ぐための非常に簡単な方法はありますか?

私は、各フォームに対して合理的に迅速に対応できる回避策を見つけました。回避策は回答として掲載されています。これらのフォームを数日から数時間にアップグレードする作業を削減します。

もし誰かが速い方法を知っていれば、おそらく、私は知りたいのですが。壊れたイベントハンドラの割り当てを修正するためにフォーム全体を編集

+0

フォームを編集しようとしていますか?デザイナで、またはデザイナで生成されたコードを手動で編集していますか?そのイベントハンドラを最初に追加したのは何ですか?デザイナーがコードを直接所有するのではない限り、デザイナーが生成したコードを手動で編集しないでください。デザイナーはそのコードを所有しています。あなたが行った変更を取り消します。 –

+0

フォームは手動で編集されていません。これはVisual Studioのバグです。 –

+1

それで、 'Button1.Click + = Button1_Click;'コードを生成したのは?私はそのコードを生成するVSのバージョンを見たことはないと思う。あなたはそれがVSによって生成されたと言っている場合は、正確なバージョンを知っていますか? –

答えて

1

回避策

非常に時間がかかることがあります。この回避策は、デザイナーがアップグレードを試みる前にソースを修正することによって、プロセスを大幅に高速化します。 (「アップグレード」が適切な用語であるかどうかはわかりませんが、誰が気にしますか)

デザイナーがフォームをアップグレードできるようにする前に、この方法で手動でフォームソースを編集してください。

イベントハンドラですべての行を明示的に新しいSystem.EventHandlerを行うように編集します。関連する行を見つけるために必要なのは、 "+ ="を検索することだけです。これは、質問のスニペットの行がそのように見えるようにするものです。

Button1.Click += new System.EventHandler(Button1_Click); 

これが完了したら、何らかの形でデザイナーを起動してフォームをアップグレードする必要があります。これは、例えば、デザイナーを介してフォームのタイトルを変更し、それを元に戻します。設計者は、すべてのラインを正しくアップグレードすることを願っています。この質問のスニペット全体は、アップグレード後に次のようになります。

// 
    // Button1 
    // 
    this.Button1.Location = new System.Drawing.Point(556, 447); 
    this.Button1.Name = "Button1"; 
    this.Button1.Size = new System.Drawing.Size(136, 23); 
    this.Button1.TabIndex = 112; 
    this.Button1.Text = "Restart kontor"; 
    this.Button1.Click += new System.EventHandler(this.Button1_Click); 

これまで問題に対処するには、この方法では、アップグレードを検証する際に重要であり、元の形、との比較が容易なアップグレードの形で私を残します。

関連する問題