4

というわけで、ここでちょっと苦戦。私は C# で Windows コンソール アプリケーションを作成しており、frmLogin というアプリケーション用のログイン フォームを作成しました。MS で文書化された方法を使用してみました。

Form f = new Form();
f.ShowDialog();

しかし、これは明らかに空白のフォームをロード/表示し、フォームデザイナーで定義したフォームではありません。

私のメインアプリケーションでは、ログインフォームをプログラムで表示できるようにしたいのですが、使用しようとすると;

frmLogin.ShowDialog();

「非静的フィールド、メソッド、またはプロパティ 'System.Windows.Forms.Form.ShowDialog()' にはオブジェクト参照が必要です。

昔は、上記のコード スニペットを使用するだけでフォームを表示できました。そのため、前回 Windows コンソール アプリを作成してから明らかに何かが変わっています。

誰かが私のやり方の誤りを教えてもらえますか?

4

4 に答える 4

10

これにより、 type の新しいインスタンスが作成されますForm

Form f = new Form();

もちろん、これは空白のフォームです。あなたのタイプは と呼ばれているようfrmLoginです。通常、これはクラス名ではなく変数名のように聞こえますが、ここで表示されるエラーは、それがクラスであることを示しています。

frmLogin.ShowDialog();

それを考えると、問題を解決する最も簡単な方法は、フォームのインスタンスを作成して表示することです。

frmLogin login = new frmLogin();
login.ShowDialog();

ただし、命名の基準と規則に従って (将来の混乱や問題を防ぐために)、フォーム自体の名前を次のように変更することを強くお勧めします。

LoginForm

次に、変数名として次のようなものを使用できますfrmLogin。これは、より一般的なアプローチです。

LoginForm frmLogin = new LoginForm();
frmLogin.ShowDialog();
于 2013-11-12T20:35:38.997 に答える
3

問題は、Microsoft から取得したコード スニペットを使用して、ベース タイプを構築していたことです。フォームを作成する必要があります。の代わりにnew Form、次のものを作成しますnew frmLogin

var f = new frmLogin();
f.ShowDialog();
于 2013-11-12T20:35:43.573 に答える
2

これで問題が解決しない場合は、回答を削除しますが、フォームをインスタンス化していないと想定しています。

Form2 frmLogin = new Form2();
frmLogin.ShowDialog();

これは私にとってはうまくいきます。個人的には、私は単純に次の.Show()方法を使用します。

Form2 frmLogin = new Form2();
frmLogin.Show();
于 2013-11-12T20:36:27.673 に答える
1

たとえば、「frmStudent」を開こうとしている FORM のオブジェクトを作成します。

方法 1:

frmStudent obj = new frmStudent();
obj.Show();

方法 2:

フォームが開きますが、フォームを閉じるまで別のフォームに移動することはできません。

frmStudent obj = new frmStudent();
obj.ShowDialog();
于 2016-02-23T14:42:10.250 に答える