- PR -

C# 他のフォームからコントロールの操作

1
投稿者投稿内容
Fukudome
会議室デビュー日: 2005/07/21
投稿数: 9
投稿日時: 2005-07-21 16:31
はじめまして。
ほんとに初心者で申し訳ないですが
教えて頂ければと思い投稿しました。
Form1にtext1〜text100が存在します。
そのtext1からtext100のクリック時のイベントで
class1に移動し、どのテキストがクリックされたかわかるように
配列[1]にtext1ならtext1(テキスト名)、配列[2]にtext2ならtext2(テキスト名)
を入れます。
その後サブフォームが開きボタン1が選択されると
class1の中で配列に格納されたテキスト名を取り出し
そのテキストに対して選択されたボタンのCaptionを入れる。
と言う動作を行いたいのですが。
Accessで言うと
Global SiControl(100) As Control
でControlの宣言をして
Set SiControl(1) = Forms![Form1]![Text1]
という形をとれば
SiControl(1).Caption = "Caption"
で別のフォーム内のテキストの操作が出来るのですが
C#ではどのようにしたら
実現出来るのでしょうか??
ご理解頂けるか分かりませんが
教えて頂ければ幸いです。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-07-21 16:41
TextBox.Clickイベントに結び付けられているイベントハンドラ(おそらくTextBoxXX_Click()というメソッド)の引数のsenderというのがクリックされたTextBoxです。

string caption = ShowSubForm();
((TextBox)sender).Text = caption;

でどうです?
ShowSubForm()ってのがSubFormを表示して、その押されたボタンのキャプションを返すメソッドです。
Fukudome
会議室デビュー日: 2005/07/21
投稿数: 9
投稿日時: 2005-07-21 17:27
早速のお返事ありがとうございます。
string caption = ShowSubForm();
((TextBox)sender).Text = caption;
はクラスの中で記述するのでしょうか?
すいません。
流れとしましては
@Form1のtext1〜text100をクリックした際にClassを呼び出す。
AClassの中で配列の中へ選択されたテキスト分@のテキスト名を代入する
Bその後ClassよりForm2(サブフォオーム)を起動する。
CForm2にてボタンの選択がされたらAに戻り配列に格納されたテキスト全部に
 Captionを代入する
 です。
この際@からAにどのようにしてテキスト名を渡して配列に代入し
その後配列から出してどのようにForm1のテキストに値を代入するかです。
本当に知識が無くて申し訳ありません。
3日ほど調べましたが
知識不足のせいか当てはまるものがありませんでした。

 
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-07-21 17:54
私の提示したソースはTextBoxXX_Click()みたいな名前のメソッドの中に書いてください。

"Classを呼び出す"ことは目的ですか?手段ですか?
"配列の中へテキスト名を代入"するのは目的ですか?手段ですか?

TextBoxのTextプロパティにForm2で押されたButtonのTextの値を代入することは目的と受け取りましたので、私はその方法しか提示していません。
クリックしたTextBox全てのTextを変更するなら、配列やコレクションでそのTextBox達への参照を持っている必要がありますね。

TextBox[] とか Arraylist とか使ってみてください。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-07-21 17:59
一旦、「クラス」とか「配列」などの実装手段を考えずに
やりたいことを整理して書いてみるといいかもしれません。

#なんとなく、「Access でこうやっていた」という考えに
#引きずられているような気がします。
Fukudome
会議室デビュー日: 2005/07/21
投稿数: 9
投稿日時: 2005-07-21 18:05
一郎さん、にしざきさんありがとうございます。
ずっとAccessやVB6での開発だった為
急にC#の開発になったら
使い勝手が
???の世界になってしまいました。
整理してみます。
頑張ります。
又分からない時は質問すると思いますが
付き合って下さい。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-07-21 18:52
うーん、言葉が足らないと思います。

引用:

Form1にtext1〜text100が存在します。


コントロールの配列として存在しているという記述が一切ありません。
ベタにあると普通は思ってしまいそうなところです。

引用:

class1に移動し


これの意味を感じ取れる人は多分いないと思います。
自分はわかるからと言って暗黙しないで、明示化して欲しいです。

class1 云々はおいておいて、コントロールの配列で、
イベント駆動の元となったコントロールが何であるか知りたいだけなのでは?
class1 は余計な情報だと思います。

そもそも、コントロールは Form に隠蔽化されているべきなので、
Form 外に出したりすることは、カプセル化の概念を壊します。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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