2

部分クラス (「ボタン 2」クリック ハンドラーがあるとします) に関数があり、フォーム デザイナーで「ボタン 2」をダブルクリックすると、Intellisense (または現在担当しているもの) は常に私を新しい部分クラス モジュール 'Button2.cs' ではなく、'Form1.cs モジュール' (不適切な定義または空白行)。「Button1」をダブルクリックすると、「正しい」アクションが実行されます。

例えば:

「Form1.cs」では:

namespace test01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Button 1 pressed");
        }

    }
}

「Button2.cs」(パブリック部分クラス):

namespace test01
{
    public partial class Form1 : Form
    {


        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Button 2 pressed");
        }
    }
}

これは私が VS2008 で見たものであり、現在は VS2010 であり、(私にとって) 解決する明白な方法はありません。

そこに何か助けはありますか?

4

1 に答える 1

1

これは、ボタンではなくフォームを設計しているためです。デザイナーは、フォーム上のコントロールのすべてのイベント ハンドラーがボタンのソース コードではなく、フォームのソース コードに配置されていることを (慣例により) 想定しています。これは、(一般的に) button2.cs がおそらく"Button2" である Name プロパティを持つクラスのインスタンスではなく、というクラスを定義する必要があることを考えると理にかなっています。button2Button

編集:

部分クラスは、非常に特定の目的のために設計されています。クラスがデザイナーまたは他のコード ジェネレーターによって生成される場合、通常、開発者がそのクラスを手動で編集することは安全ではありません (コード ジェネレーターが後で来て、ファイルを上書きするため)。開発者の手書き部分を含む)。部分クラスを使用すると、クラスを 2 つのファイルに分割できます。1 つは (この場合はデザイナーによって) 生成され、もう 1 つは手書きコード用です。クラスは「部分的」として定義されているため、コンパイラは、クラスの他の部分が他のファイルで定義されている可能性があることを認識しています。

あなたが説明したようないくつかの異なる機能領域を持つプロジェクトの場合、それらを UI とは無関係のクラスに整理し (機能を個別に単体テストできるように)、必要に応じて UI クラスから呼び出します。これがどのように機能するかを理解するには、 Model-View-ControllerModel-View-ViewModel のデザイン パターンなどの概念を調べる必要があります。

このようなフォルダー構造は、出発点として不合理ではありません。

Root
|-GUI           // Contains folders related to GUI elements
| |-Forms       // Contains your forms
| |-Controls    // Contains any custom controls
|-Common        // Contains folders for common functionality
| |-IO          // Contains classes relating to I/O
| |-Diagnostics // Contains classes relating to diagnostics
|-Logic         // Contains classes folders to specific business use cases
  |-UseCase1    // Contains classes folders to use case #1 (use a better name, obviously)
  |-UseCase2    // Contains classes folders to use case #2
于 2012-08-29T20:16:13.717 に答える