C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 複数フォームでメインフォームで宣言した構造体を編集


(過去ログ 72 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■42051 / inTopicNo.1)  複数フォームでメインフォームで宣言した構造体を編集
  
□投稿者/ asuka (4回)-(2009/10/07(Wed) 11:05:38)

分類:[C#] 

親フォームにて宣言した構造体があります。
public struct StructTest
{
 public string strTest;
 public bool bTest;
 public int nTest;
}
public StructTest[] m_structTest = new StructTest[10];

子フォームからの親で宣言した構造体を編集したいため、親にてフォームインスタンスを宣言し、
下記のように子フォームを呼び出しております。

private static FormParent m_InstFormParent; //親フォームインスタンス
private FormChild m_InstFormChild;   //子フォームインスタンス

//プロパティ
public static FormParent PropFormParentInst
{
 get
 {
  return m_InstFormParent;
 }
 set
 {
 m_InstFormParent= value;
 }
}
//インスタンス保持
m_InstFormParent= this;

//子フォーム表示 - モーダル
m_InstFormChild = new FormChild();
m_InstFormChild.ShowDialog(this);



子フォームにて構造体の配列数を削除する処理があり、親フォームで宣言した構造体の配列を、
下記のようにリサイズしております。
Array.Resize<名前空間.FormParent.StructTest>
(ref FormParent.PropFormParentInst.m_structTest, 9);

コンパイルは通るのですが、下記のような警告が出ており、理解出来ないままでおります。
『参照マーシャリング クラスのフィールドであるため、'名前空間.FormParent.m_structTest' を
ref または out として渡す、またはそのアドレスを取得すると、
ランタイム例外が発生する可能性があります。』



このような構造体の使い方は間違っておりますでしょうか?

複数フォームで同じインスタンスの構造体をどのフォームからでも値の編集、リサイズなどを行う場合、
どのように実装するべきか御教授頂ければ幸いです。

引用返信 編集キー/
■42055 / inTopicNo.2)  Re[1]: 複数フォームでメインフォームで宣言した構造体を編集
□投稿者/ επιστημη (2183回)-(2009/10/07(Wed) 11:22:56)
επιστημη さんの Web サイト
StructTest[] 改め List<StructTest> ではいかがでしょうか。

引用返信 編集キー/
■42058 / inTopicNo.3)  Re[2]: 複数フォームでメインフォームで宣言した構造体を編集
□投稿者/ asuka (5回)-(2009/10/07(Wed) 12:01:51)
επιστημη さんお返事ありがとうございます。

おっしゃるとおり、警告が出なくなりました☆

ありがとうございます。
m(__)m



そしてすいません、とても初歩的な質問で恐縮なのですが、

構造体のメンバが値を取る際、私が提示させて頂いたソースですと、

m_structTest[0].strTest = "hogehoge";
m_structTest[0].bTest = true";
m_structTest[0].nTest = 100;

などとしてメンバに値をセット出来たのですが、

下記のようにListにした場合(要素数は指定しなくてもよい?)、
public List<StructTest> m_structTest = new List<StructTest>();

どのように値を設定(取得)すればよいでしょうか?



単なる文字列のListであれば
string strTest = "";
strTest.Add("one"); のようにして取得出来るかと思うのですが、

構造体の場合、
(m_structTest[0].strTest).Add( "hogehoge" );
としてもエラーになってしまいます、、、TT
引用返信 編集キー/
■42059 / inTopicNo.4)  Re[3]: 複数フォームでメインフォームで宣言した構造体を編集
□投稿者/ επιστημη (2184回)-(2009/10/07(Wed) 12:16:26)
επιστημη さんの Web サイト
newした時点では要素数0(からっぽ)です。

StructTest item = new StructTest(); // ひとつ用意して、
item.strTest = "hogehoge"; // ナカミを詰めて、
item.bTest = true;
item.nTest = 100;
m_structTest.Add(item); // ケツに一個追加。

引用返信 編集キー/
■42061 / inTopicNo.5)  Re[4]: 複数フォームでメインフォームで宣言した構造体を編集
□投稿者/ asuka (6回)-(2009/10/07(Wed) 12:40:37)
επιστημη さん!!!

うおー!
感謝多謝でございます ^^

まさかこんなやり方があるとは全くもって存じませんでした。

本当にありがとうございます。
m(__)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -