トップ回答者
すべてのFormからアクセスできるClassインスタンスを設定する方法

質問
回答
-
こんばんは!(^^)!ふ~です。
人生いろいろ、文法もいろいろです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace testAppli
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1_Load(object sender, EventArgs e)
{
MyData.myint = 15;
}
}static class MyData
{
public static int myint;
}
}
すべての返信
-
>Form1~Form4の複数のFormをあつかっているのですが、すべてのFormx.csでアクセスできるdata1の宣言の仕方(場所)が分かりません。よろしくお願いします。
どういう使い方をしたいのかいまいちなのですが、こういうことですか?
Code Snippet[System.Serializable]}
public class mydata
{
private static mydata instance = new mydata();
private mydata(){}public static mydata GetInstance()
{
return instance;
}public long productkey = 0;
public int[,] field = new int[1000, 1000];}
どこかしらのFormXからアクセスしたい場合は、こんな感じです。
Code Snippetmydata data = mydata.GetInstance();
data.productkey = 5; -
CrimsonPork さんからの引用
どういう使い方をしたいのかいまいちなのですが、こういうことですか?
Code Snippet[System.Serializable]}
public class mydata
{
private static mydata instance = new mydata();
private mydata(){}public static mydata GetInstance()
{
return instance;
}public long productkey = 0;
public int[,] field = new int[1000, 1000];}
シングルトンパターンとのことですが、Serializable属性がある点を考えると二の足を踏みます。
Serialize/Deserializeするのであれば、シングルトンと相性が悪いかもしれません。
-
こんにちは!(^^)!ふ~です。
VisualStudio2008では下記ソース名の場所に追加するのではと思います。
Formが複数、2つだけ作って見ました。ご参考にどうでしょうか?
usingは省略してあります。
<ソース名:Program.cs>
namespace WinApSerializable
{[Serializable()] // シリアライズ可能なクラスです。
public class mydata
{
public long productkey;
public int[,] field;// 初期化する
public mydata()
{
productkey = 0;
field = new int[1000, 1000];
}
}static class Program
{
static Form form1, form2;
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);form1 = new Form1();
form2 = new Form2();form1.Text = "1 番目のフォーム";
form2.Text = "2 番目のフォーム";
form2.Show();Application.Run(form1);
}
}
}<ソース名:Form1.cs>
namespace WinApSerializable
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
mydata f1_data = new mydata(); // インスタンス作成
f1_data.productkey = 1;
f1_data.field[0,0] = 10;
}
}
}<ソース名:Form2.cs>
namespace WinApSerializable
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
mydata f2_data = new mydata(); // インスタンス作成
f2_data.productkey = 1;
f2_data.field[0,0] = 10;
}
}
}
以上です。 -
-
関係ないところだけフォローしておきますが、
CrimsonPork さんからの引用 こちらのリンク先にあるような理由ですかね?
http://unim-scribble.blogspot.com/2006/11/javasingleton-and-serialization-dont.html
シングルトンなのにひとつに決まらないという観点からあまりよろしくなさそうですね・・・。勉強になりました。IObjectReference について調べると、しあわせになるかもしれません。サンプルコードがそのまんまですけど。 -
Code Snippet
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace testAppli
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1_Load(object sender, EventArgs e)
{
public static int myint=15;}
}
}エラー 6 '' は無効です。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 38 testAppli
エラー 2 'public' は無効です。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 12 testAppli
エラー 3 ; が必要です。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 19 testAppli
エラー 5 ; が必要です。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 38 testAppli
エラー 7 ; が必要です。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 39 testAppli
エラー 4 修飾子 'static' がこの項目に対して有効ではありません。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 19 testAppli
エラー 1 文字 ';' は予期されていません。 C:\Users\Y\Documents\Visual Studio 2005\Projects\testAppli\testAppli\Form1.cs 20 38 testApplistatic intを宣言しようとしただけで、これだけのエラーが出てしまいました。(>_<。。)
-
こんばんは!(^^)!ふ~です。
人生いろいろ、文法もいろいろです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace testAppli
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1_Load(object sender, EventArgs e)
{
MyData.myint = 15;
}
}static class MyData
{
public static int myint;
}
} -
!(^^)!ふ~さん有難うございます。下記と合わせて解決したような気がします。(^∀^)
http://homepage3.nifty.com/midori_no_bike/CS/「C# では、グローバル変数を、サポートしていない」というのは、今日初めて知りました。。。