2017-02-19 10 views
0

私は、WindowsフォームアプリケーションをVBからC#に変換しています。MDIchildフォームを再含める

要するに、フォームが渡される(ダブルクリック中に発生する)formLocation()クラスのメソッドがあり、MainFormのMDIChildとしてフォームをリセットすることができます。何らかの理由で、このVBコードはC#に変換されません。子フォームがMainFormの現行インスタンスに入っていなければならないので、理想的ではないMainFormの新しいインスタンスを強制的に作成する必要があります。ここでVBのコードは次のとおりです。基本的に私はちょうどC#の同等のものが必要です。

Public Sub contain(ByVal form As Form) 
    With form 
     .MdiParent = MainForm 
    End With 
End Sub 
+1

インスタンスに移動する必要がある場合は、MainFormのインスタンスをメソッドに渡します。問題の内容が表示されません。また、MainFormが何であるかわからないため、新しいインスタンスを作成する必要があるのもなぜですか? – Codexer

+0

VB.NETの恐ろしいデフォルトインスタンスの機能を無効にするにはしばらく時間がかかるでしょう。最も簡単な回避策はform.MdiParent = Application.OpenForms [0]; –

答えて

0

VBは、歴史的に多くの混乱を引き起こしたフォームクラスと同じ名前でアクセスされたフォームの既定のインスタンスを作成します - すべての数行のコードを節約するという名のもとに。あなたの「MainFormを」クラスで

、以下を挿入します。

private static MainForm _DefaultInstance; 
public static MainForm DefaultInstance 
{ 
    get 
    { 
     if (_DefaultInstance == null) 
      _DefaultInstance = new MainForm(); 

     return _DefaultInstance; 
    } 
} 

のために、コードを変更します。これは、VBがあなたのために何を再現するための最も近い方法です

form.MdiParent = MainForm.DefaultInstance; 

が、最終的にフォームをインスタンス化するより標準的な方法に移行する必要があります。

VBをC#に変換すると、VBのプログラマから詳細を隠そうとする意図があって、プログラミングの概念(インスタンスとタイプなど)の基本的な理解が妨げられています。

+0

そしてはい!私はVBの "良い意思"が私に頭痛を引き起こす原因となっている "無限の"状況に遭遇しました。 – Matt

+0

ありがとう!それはたくさん説明します!しかし、これはエラーではありませんが、フォームはmainFormに戻りません。そのmdiparent = nullがダブルクリックされてもメインフォームに戻されない – Matt

+0

@Mattこれは、上記のコメントで述べたメインフォームインスタンスへの参照が必要なためです。新しいものを作成することは、あなたが後になっているインスタンスではなく助けになりません。 – Codexer

関連する問題