- PR -

Win.Formでコントロールを配列にするには?

1
投稿者投稿内容
えっこ
常連さん
会議室デビュー日: 2004/05/11
投稿数: 29
投稿日時: 2004-05-31 15:28
現在、VB.NETで開発しています。
仕様により、カレンダーコントロールを使わずに自作でカレンダーを
作らなくてはなりません。
ちなみにその月の日付の数だけボタンを表示させ、ボタンに日付を
表示させるというカレンダーです。

以前のVB6.0のころはコントロール配列を使うことができたので、
自作でカレンダーをつくるには、(下記例ではトグルボタンで作っています。)

Public Sub DateSet()
Dim i As Integer, st As Date, wd As Integer
With Me
st = DateSerial(.Y, .M, 1) '表示年月の1日を設定
wd = WeekDay(st) '1日の曜日を求める
For i = 0 To 36 '不用枠をクリアする
Me("c" & i).Caption = ""
hiduke = Null
Me("c" & i).Visible = False
Next i
i = 1
Do
Me("c" & wd - 1).Caption = i '日付を書込む
If Year(Date) = .Y And Month(Date) = .M And Day(Date) = i Then hiduke = i
Me("c" & wd - 1).Visible = True
wd = wd + 1
i = i + 1
Loop Until Day(st + i - 1) = 1 '翌月1日が出て来るまで繰り返す
End With
End Sub

といった感じで作れたと思うのですが、VB.NETではどのようにしたらよいか
わかりません。
まだまだVB.NET初心者なのでわからないことばかりです。
よろしくお願いします。

[ メッセージ編集済み 編集者: えっこ 編集日時 2004-05-31 15:39 ]

[ メッセージ編集済み 編集者: えっこ 編集日時 2004-05-31 16:17 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-31 16:12
 タイトルは正しく付けましょう。『自作でカレンダーを作るには?』ではなく、『Win.Formでコントロールを配列にする』の方が、問題を的確に表していると思います。

 それで、右上にhttp://www.atmarkit.co.jp/bbs/phpBB/search.php][検索]というリンクがあるのがわかりますか?これ(ではなく、この段落の「検索」を)クリックして、キーワードに【コントロール 配列】、【すべてが含まれる投稿を検索】をチェック、会議室に【Insider.NET】を選択して、[検索]ボタンをクリックしましょう。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-05-31 16:13
要はコントロール配列を使いたいってことでしょうか?
自分VB.NETはよく分からんのですが(じゃあ、答えるなって?汗)
C#でもフォームのデザイン時にはコントロール配列が使えません。
しかし、以下のようにコードで書けばコントロールも配列化できます。
(例がC#で申し訳ない。VB.NETに読み替えてください)

たぶんVB.NETでもできるはず。

-----------------------------------------------------
フォームのメンバ変数
private Button[] days = new Button[35];

-----------------------------------------------------
フォームの初期化ロジックで
(VB.NETにもコンストラクタってある?)

int index = 0;
for(int i = 0 ; i < 5 ; i++)
{
for(int j = 0 ; j < 7 ; j++)
{
index = i * 7 + j;
days[index] = new Button();
days[index].Size = new Size(50, 50);
days[index].Location = new Point(j * 50, i * 50);
days[index].Visible = true;
days[index].Text = index.ToString();
days[index].Name = index.ToString();
this.Controls.Add(this.days[index]);
}
}
-----------------------------------------------------
えっこ
常連さん
会議室デビュー日: 2004/05/11
投稿数: 29
投稿日時: 2004-05-31 18:02
Jittaさん>
おっしゃる通りです。すみませんでした。

noderaさん>
ありがとうございました。参考になりました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-31 18:19
引用:

noderaさんの書き込み (2004-05-31 16:13) より:

フォームのメンバ変数
private Button[] days = new Button[35];

-----------------------------------------------------
days[index].Location = new Point(j * 50, i * 50);



 えっこさんの36も気になったのですが、例えば今年の5月は、
コード:
1|  .  .  .  .  .  . 1.
2| 2. 3. 4. 5. 6. 7. 8.
3| 9.10.11.12.13.14.15.
4|16.17.18.19.20.21.22.
5|23.24.25.26.27.28.29.
6|30.31.  .  .  .  .  .


と、7×6=42必要だと思うのですが???えっこさんのだと、終わりを切っているので、36で足りるのかな?とも思ったり。。。
1

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