- PR -

C#でForm以外のモジュールからのFormモジュールの呼び出し

投稿者投稿内容
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-08-31 16:34
Hasumiです。

引用:
VBで言うプロジェクトファイルに追加したhogehoge.bas中のMainから、Showメソッドで表示された
Form・・という流れを例にして、C#でやりたいというのが本旨です。


ということだったので、C#にはVB.NETでいうモジュールはないのでただのクラスに
Mainメッソドを追加してそこからフォームを表示するコードを記述しました。
#引用内のコードを変更するのはなんか違うような・・・。
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-08-31 16:39
みなさん、ありがとうございます。

コード:
  public class Class1:Form {
    [STAThread]
    static void Main() {
      Application.Run(new Class1());
    }
  }



Formに対してCS0246エラーが出ます。
調べます。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-08-31 17:02
引用を変更してごめんなさい。
下記の場合、Class1のコンストラクタが必要ですね。

引用:

iStationさんの書き込み (2004-08-31 16:15) より:
コード:
using System;
using System.Windows.Forms;

namespace WindowsApplication1 {
  /// <summary>Class1 の概要の説明です。</summary>
  public class Class1:Form {
    [STAThread]
    static void Main() {
      Application.Run(new Class1());
    }
  }
}



かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-08-31 17:08
引用:

Formに対してCS0246エラーが出ます。



コード:
	/// <summary>
	/// Class1 の概要の説明です。
	/// </summary>
	public class Class1
	{
		[STAThread]
		static void Main() 
		{
			//Application.Run(new Class1());
			Form Formhoge = new Form();
			Application.Run(Formhoge);
		}
	}



エラーは回避できたのですが、今度は開きたいフォームではないフォームが開くようになって
しまいました(苦)

うーん。
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-08-31 17:25
Hasumiです。

引用:
脳味噌筋肉さんの書き込み(2004-08-31 17:08)より
エラーは回避できたのですが、今度は開きたいフォームではないフォームが開くようになって
しまいました(苦)



Formhoge クラスとClass1 クラスが存在しているなら、
コード:
public class Class1
{
  [STAThread]
  static void Main() 
  {
    Formhoge hoge = new Formhoge();
    Application.Run(hoge);
  }
}


では。

引用:
iStationさんの書き込み(2004-08-31 17:02)より
引用を変更してごめんなさい。


2004-08-31 16:15の書き込みを見たときに一瞬?となっただけなので気になさらないでください。
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-08-31 17:28
みなさんアドバイスありがとうございました。

Formをプロジェクトから削除して作り直して再追加したところうまく起動できるように
なりました。

根本的な究明には至りませんが、プロジェクトのプロパティをいじってましたのでおそらく
そのせいではないかと思います。

今後ともよろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-31 17:54

  1. ソリューションを新規に空で作成
  2. C#コンソールアプリケーションプロジェクトを追加
  3. C#クラスライブラリを追加
  4. クラスライブラリにフォームを追加
  5. クラスライブラリをビルド
  6. コンソールアプリケーションの参照設定に、クラスライブラリとSystem.Windows.Formsを追加
  7. コンソールアプリケーションのmainメソッドに、
    コード:

    ClassLibrary1.Form1 frm = new Form1();
    frm.ShowDialog();

    を追加
  8. 実行


嗚呼、解決してる。。。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-08-31 17:55 ]
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-08-31 18:25
引用:

脳味噌筋肉さんの書き込み (2004-08-31 17:28) より:

根本的な究明には至りませんが、プロジェクトのプロパティをいじってましたのでおそらく
そのせいではないかと思います。



参考にどうぞ!
コード:

// file : SimpleWindowsForm.cs
// compile : csc /t:winexe /main:Class1 SimpleWindowsForm.cs
// compile : csc /main:Class1 SimpleWindowsForm.cs // Console Coexists

using System;
using System.Windows.Forms;
using System.ComponentModel;

public class Class1
{
public static void Main()
{
SimpleWindowsForm hoge = new SimpleWindowsForm();
Application.Run(hoge);
}
}

public class SimpleWindowsForm : Form
{
public SimpleWindowsForm()
{
// set up form...
Text = "SimpleWindowsForm"; // title bar text
Width = 400; // form width
Height = 100; // form height
CenterToScreen(); // display center screen

// Button
Button b=new Button();
b.Text="Test";
Controls.Add(b);

// create container for components...
components = new Container();
}

protected override void Dispose(bool disposing) {
if (disposing)
if (components != null)
components.Dispose(); // dispose of components...
base.Dispose(disposing);
}
private Container components; // contains components
}



[ メッセージ編集済み 編集者: iStation 編集日時 2004-09-01 10:50 ]

スキルアップ/キャリアアップ(JOB@IT)