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

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

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

Re[8]: C#フォームに関して


(過去ログ 28 を表示中)

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

■13058 / inTopicNo.1)  C#フォームに関して
  
□投稿者/ はやし (1回)-(2008/01/23(Wed) 23:46:58)

分類:[C#] 

初歩的なことかもしれませんが、本やネットで調べたのですが結局わからなっかたので書き込みします。
どなかたわかる方がいましたら、お手数かもしれませんがご教授お願いします。

内容は、C#のフォームに関することで
「form2においてform1のtextboxのtextが使えるか?」です。

もう一つ質問がありまして
「普通は初回起動時はform2が表示するようになると思うのですが、最初からform2を表示する
方法があるのか?」です。

わかる方いましたらお願いします。
引用返信 編集キー/
■13059 / inTopicNo.2)  Re[1]: C#フォームに関して
□投稿者/ やじゅ (27回)-(2008/01/23(Wed) 23:56:53)
やじゅ さんの Web サイト
2008/01/24(Thu) 01:03:39 編集(投稿者)
2008/01/24(Thu) 00:03:32 編集(投稿者)

No13058 (はやし さん) に返信
> 「form2においてform1のtextboxのtextが使えるか?」です。

使える。
http://www.geocities.jp/hatanero/form1andform2.html

> 「普通は初回起動時はform1が表示するようになると思うのですが、最初からform2を表示する
> 方法があるのか?」です。

方法 : Windows アプリケーションでスタートアップ フォームを選択する
http://msdn2.microsoft.com/ja-jp/library/a2whfskf(VS.80).aspx
引用返信 編集キー/
■13060 / inTopicNo.3)  Re[1]: C#フォームに関して
□投稿者/ Azulean (18回)-(2008/01/23(Wed) 23:59:19)
> 内容は、C#のフォームに関することで
> 「form2においてform1のtextboxのtextが使えるか?」です。
Form2がForm1の参照を持っていれば可能です。
TextBoxはModifiersプロパティあたりで調整が必要かもしれません。

> もう一つ質問がありまして
> 「普通は初回起動時はform2が表示するようになると思うのですが、最初からform2を表示する
> 方法があるのか?」です。
「初回起動時はform1」の間違いでしょうか?
そのプロジェクトにProgram.csというものがありますので、どうしてForm1が最初に表示されるかを見てみてください。
それが理解できればForm2を最初に表示することは十分可能です。
引用返信 編集キー/
■13062 / inTopicNo.4)  Re[2]: C#フォームに関して
□投稿者/ はやし (2回)-(2008/01/24(Thu) 00:25:59)

「普通は初回起動時はform1が表示するようになると思うのですが、最初からform2を表示する
 方法があるのか?」です。
の間違いでした。
失礼いたしました。
引用返信 編集キー/
■13067 / inTopicNo.5)  Re[3]: C#フォームに関して
□投稿者/ 七曜 (38回)-(2008/01/24(Thu) 01:25:23)
No13062 (はやし さん) に返信
> 
> 「普通は初回起動時はform1が表示するようになると思うのですが、最初からform2を表示する
>  方法があるのか?」です。
> の間違いでした。
> 失礼いたしました。

ん〜form1を経由する必要がなければ・・・
namespace DataSetMergeSample
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

のApplication.Run(new Form1());のForm1をForm2にすれば・・・と思ったりして。意図と違いますかね。

引用返信 編集キー/
■13068 / inTopicNo.6)  Re[4]: C#フォームに関して
□投稿者/ はやし (3回)-(2008/01/24(Thu) 01:44:52)
やじゅさん、Azuleanさん、七曜さん教えていただきありがとうございます。

2番目の方は解決しました。こんなに簡単だったんですね。

1番目の方はまだちょっと実現できていない状態です。
1番目の具体的内容なのですが、form2ではtextboxは作らないので、
form1にあるtextboxに入力された内容をform2においてその内容を
利用したいということです。
引用返信 編集キー/
■13069 / inTopicNo.7)  Re[5]: C#フォームに関して
□投稿者/ やじゅ (28回)-(2008/01/24(Thu) 01:59:17)
やじゅ さんの Web サイト
No13068 (はやし さん) に返信
> 1番目の方はまだちょっと実現できていない状態です。
> 1番目の具体的内容なのですが、form2ではtextboxは作らないので、
> form1にあるtextboxに入力された内容をform2においてその内容を
> 利用したいということです。

提示したリンク先を見て、その上で何がわからないのか
しめしてもらわないと。
答えを書くのは簡単だけど、考えさせるのも大切だしね。
引用返信 編集キー/
■13070 / inTopicNo.8)  Re[6]: C#フォームに関して
□投稿者/ 七曜 (40回)-(2008/01/24(Thu) 02:26:24)
2008/01/24(Thu) 02:30:31 編集(投稿者)

No13069 (やじゅ さん) に返信
> 答えを書くのは簡単だけど、考えさせるのも大切だしね。

まぁ、その通りではあるのですが、示してあるリンクってVBでの話だったり・・・分類はC#なのでC#での例を示しているなら・・・と思ったり。
(言語仕様の違いを吸収というか推測できるのが、当たり前ではないのですよね。)

で、しかも示されている例(http://www.geocities.jp/hatanero/form1andform2.html)は、
VS2005(C#)でWindow アプリケーション プロジェクト テンプレートを使用して、
Windows フォームデザイナでTextBoxを配置した場合、Form1.Designer.csでprivateで宣言されるので、
あの通りには行かない様な気がしますが・・・。
(まぁ、TextBoxのModifersをpublicにすればいいわけですけどね。)
引用返信 編集キー/
■13073 / inTopicNo.9)  Re[7]: C#フォームに関して
□投稿者/ はやし (4回)-(2008/01/24(Thu) 03:12:10)
form1のtextbox1のModefersをpublicにして
form1のロードイベントに

     Form2 child = new Form2(); // 子フォームの生成
child.pointer = this; // 子フォーム内から親フォームを参照するためのポインターを指定

を入力しました。
次にform2でまず

public partial class Form2 : Form
{
public Form1 pointer ; // 親フォーム参照のためのポインタ

を入力し,form2のロードイベントに

string url = pointer.textBox1.Text;

とやったのですがうまく動作しません。
何か間違えている箇所があるでしょうか?
引用返信 編集キー/
■13074 / inTopicNo.10)  Re[8]: C#フォームに関して
□投稿者/ 七曜 (43回)-(2008/01/24(Thu) 03:33:48)
No13073 (はやし さん) に返信
> form1のtextbox1のModefersをpublicにして
> form1のロードイベントに
>
>      Form2 child = new Form2(); // 子フォームの生成
> child.pointer = this; // 子フォーム内から親フォームを参照するためのポインターを指定
>
> を入力しました。
> 次にform2でまず
>
> public partial class Form2 : Form
> {
> public Form1 pointer ; // 親フォーム参照のためのポインタ
>
> を入力し,form2のロードイベントに
>
> string url = pointer.textBox1.Text;
>
> とやったのですがうまく動作しません。
> 何か間違えている箇所があるでしょうか?

さて・・・部分コードなのでどこがうまくいってないのかは推測になりますが
(1)Form.Load イベントは、フォームが初めて表示される直前に発生します。
[Form.Load イベント]
  http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.form.load.aspx
  つまり、どこかでForm2のShowメソッドを実行してないと駄目ですね。
(2)urlを他のイベントかメソッドで使用しようとしている。
form2のロードイベントに・・・とあるので、そのイベントハンドラ以外ではurlは見れませんね。
(3)Form1.textBox1.Textは、そもそも空かも・・・
  form2で参照する前にTextプロパティに何か設定されていますか。

ちなみに、Form.Showメソッドに親フォーム(というかウィンドウハンドル)を渡すと、Form.Ownerプロパティで参照出来るので
> public Form1 pointer ; // 親フォーム参照のためのポインタ
これは不要でしょうね。(キャストは必要になりますが。)

ブレークポイントを適宜入れて、動作を追ってみては如何でしょうか。
引用返信 編集キー/
■13120 / inTopicNo.11)  Re[7]: C#フォームに関して
□投稿者/ やじゅ (33回)-(2008/01/24(Thu) 19:49:06)
No13070 (七曜 さん) に返信
> 2008/01/24(Thu) 02:30:31 編集(投稿者)
>
> ■No13069 (やじゅ さん) に返信
>>答えを書くのは簡単だけど、考えさせるのも大切だしね。
>
> まぁ、その通りではあるのですが、示してあるリンクってVBでの話だったり・・・分類はC#なのでC#での例を示しているなら・・・と思ったり。
> (言語仕様の違いを吸収というか推測できるのが、当たり前ではないのですよね。)
>

言語が違うのは認識してたんですが、ヒントを出したんだから、そこから、さらに追っていってもらえるかなと
あわい期待をしているわけです。不親切といえば不親切でしたかね。
引用返信 編集キー/
■13152 / inTopicNo.12)  Re[8]: C#フォームに関して
□投稿者/ Hirotow (151回)-(2008/01/25(Fri) 01:22:27)
まあ方法はいろいろあるけど、
スマートな実装としてはForm2でテキストボックスのTextを文字列型のプロパティとして公開して、
string Text1
{
    get{ return textBox1.Text; }
    set{ textBox1.Text = value; }
}

textbox1のTextChangedに対応するイベントを追加
public event EventHandler Text1Changed;

//これは別途イベント追加するように
private void textBox1_TextChanged(object sender, EventArgs e)
{
    if(Text1Changed != null)
        Text1Changed(this, EventArgs.Empty);
}

Form1のメンバ変数としてForm2のインスタンスを保持しておき
private Form2 form2;

コンストラクタで表示します。
InitializeConponent();
form2 = new Form2();
form2.Text1Changed += new EventHandler(form2_Text1Changed);
form2.Show();

あとは普通にform2.Text1を参照すればいいだけです。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -