※ ChatGPTを利用し、要約された質問です(原文:別フォームでMainFormのArrayListを使いたい)
別フォームでMainFormのArrayListを使いたい
このQ&Aのポイント
MainForm(Form1)からメールの新規作成をする際に、新たにメール作成用フォーム(ここではForm3 NewMailForm)をShowDialogで表示しているため複数件のメールを打つ事が出来ない仕様なのですが、これを複数件打てるようにNewMailForm.Show()に変更すると、今まで使用できたDialogResult.OKなどの判定が使用できないのと、MainFormで使用しているcollectionMail(ArrayList)が使えないのですが、どうすれば解決できるでしょうか?
MainForm(Form1)からメールの新規作成をする際に、新たにメール作成用フォーム(ここではForm3 NewMailForm)をShowDialogで表示しているため、複数件のメールを打つ事が出来ない仕様です。NewMailForm.Show()に変更すると、DialogResult.OKなどの判定が使用できなくなります。また、MainFormで使用しているcollectionMail(ArrayList)が使えない問題も発生します。この問題を解決するためにはどうすれば良いでしょうか?
MainForm(Form1)からメールの新規作成をする際に、新たにメール作成用フォーム(ここではForm3 NewMailForm)をShowDialogで表示しているため複数件のメールを打つ事が出来ない仕様です。この問題を解決するためには、NewMailForm.Show()に変更すると、DialogResult.OKなどの判定が使用できなくなります。また、MainFormで使用しているcollectionMail(ArrayList)も使えません。どのようにすれば解決できるでしょうか?
別フォームでMainFormのArrayListを使いたい
MainForm(Form1)からメールの新規作成をする際に新たに
メール作成用フォーム(ここではForm3 NewMailForm)を
ShowDialogで表示しているため複数件のメールを
打つ事が出来ない仕様なのですが、これを複数件打てるように
NewMailForm.Show()に変更すると今まで使用できた
DialogResult.OKなどの判定が使用できないのと
MainFormで使用しているcollectionMail(ArrayList)が使えない
のですが、どうすれば解決できるでしょうか?
環境はVS2005(C#)、.NET2.0です。
// Form1側(メール作成)
private void menuMailNew_Click(object sender, EventArgs e)
{
String date = "未送信";
bool notSendFlag = true;
Form3 NewMailForm = new Form3();
NewMailForm.ShowDialog();
if(NewMailForm.resultSendMail == DialogResult.OK){
// 直接送信を選択した場合
if(NewMailForm.directSendFlag == true){
DirectSendMail(NewMailForm.textAddress.Text, NewMailForm.textSubject.Text, NewMailForm.textBody.Text, NewMailForm.attachName);
date = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
notSendFlag = false;
}
// コレクションに追加する
Mail newMail = new Mail(NewMailForm.textAddress.Text, "", NewMailForm.textSubject.Text, NewMailForm.textBody.Text, NewMailForm.attachName, date, "", "", notSendFlag, "");
collectionMail[SEND].Add(newMail);
// ツリービューとリストビューの表示を更新する
UpdateTreeView();
UpdateListView();
}
}
// Form3側(送信メニュークリック)
private void menuFileSend_Click(object sender, EventArgs e)
{
string attachList = "";
// アドレスと本文がない場合はキャンセル扱いにする
if(textAddress.Text != "" && textBody.Text != ""){
resultSendMail = DialogResult.OK;
if(textSubject.Text == ""){
textSubject.Text = "(無題)";
}
// 文面の末尾が\r\nでないときは\r\nを付加する
if(!textBody.Text.EndsWith("\r\n")){
textBody.Text = textBody.Text + "\r\n";
}
// 添付ファイルが1個以上ある場合
if(buttonAttachList.DropDownItems.Count > 1){
for(int cnt = 0; cnt < buttonAttachList.DropDownItems.Count; cnt++){
// 添付ファイルが1個の場合(添付ファイルが複数ある場合の1回目)
if(cnt == 0){
attachList = buttonAttachList.DropDownItems[cnt].Text;
}
else{
// 2個以上の添付ファイルがある場合、カンマ区切りで
attachList = attachList + "," + buttonAttachList.DropDownItems[cnt].Text;
}
}
// 添付ファイル名のリストを変数に渡す
attachName = attachList;
}
}
else{
resultSendMail = DialogResult.Cancel;
}
this.Close();
}
お礼
回答ありがとうございます。 サンプル側に実装してみてうまく動きました。 Form1のインスタンスをForm3に引き渡すようにして Form1のUpdateListView()とUpdateTreeView()を 呼び出せるようにしてみました。 直接送信のメソッドも呼べるようにしているので 一応やりたい事は出来ました。 本当にありがとうございます。 private Form1 _pForm; public Form1 pForm { set { _pForm = value; } get { return _pForm; } }