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

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

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

Re[13]: ラベル、ラジオボックス配置を任意の数配置する


(過去ログ 97 を表示中)

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

■57932 / inTopicNo.1)  ラベル、ラジオボタン配置を任意の数配置する
  
□投稿者/ 杏 (1回)-(2011/03/22(Tue) 15:49:11)

分類:[C#] 

2011/03/22(Tue) 16:09:25 編集(投稿者)
2011/03/22(Tue) 15:49:46 編集(投稿者)

こんにちわ
Windows XP
Visual Studio2010
C#
で開発しています。

データベースに
Table1というテーブルがあります。
そのTable1内のデータをラベルに表示したいです。

Table1には、
Id,tName,tTel,tDate
という列があります。
その中で表示したいのはIdとtDateです。
Idはinteger型
tDateはdete型です。
Idはラジオボタンの名前に設定したいです。

◎Id
日付 tDate
◎Id
日付 tDate
◎Id
日付 tDate

↑このように全てのデータを表示したいと思っています。

Table1にはいくつのデータがあるかわかっていません。
Rows.Count()などでデータ数はわかるので
そこは問題ないのですが、
問題なのは、ラベルとラジオボタンの表示です。
Rows.Count()にあわせてラベルとラジオボタンを
作成し、表示したいのですが、
配置の仕方がわかりません。

プログラム内で、任意の数の
ラベル、ラジオボックスの配置の仕方を教えてください。

わかりにくい説明かと思いますので、
何かあれば補足いたします。
よろしくお願いいたします。
引用返信 編集キー/
■57934 / inTopicNo.2)  Re[1]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ PATIO (100回)-(2011/03/22(Tue) 16:00:37)
何個あるか分からない物をずらっと縦に並べるのでしょうか?
そうなると画面内にはおさまらないような気がします。
画面内におさまる数しか存在しないという保証があれば良いのですが。

あとラジオボックスと書かれていますけれど、
ラジオボタンかチェックボックスではないかと思うのですが、
違いますか?

一般的には複数選択が可能な場合はチェックボックスを
単一選択の場合はラジオボタンを使うと思います。

リストコントロールを使って表示しても同じような操作は出来そうですが、
それでは駄目ですか?

引用返信 編集キー/
■57936 / inTopicNo.3)  Re[2]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (2回)-(2011/03/22(Tue) 16:08:06)
No57934 (PATIO さん) に返信
> 何個あるか分からない物をずらっと縦に並べるのでしょうか?
はい。
> そうなると画面内にはおさまらないような気がします。
> 画面内におさまる数しか存在しないという保証があれば良いのですが。
保証はないです・・・。
ですが、ほかに方法がありません。
何かいい方法はありますか?

> あとラジオボックスと書かれていますけれど、
> ラジオボタンかチェックボックスではないかと思うのですが、
> 違いますか?
> 一般的には複数選択が可能な場合はチェックボックスを
> 単一選択の場合はラジオボタンを使うと思います。
すみません、書き込みミスです。
ラジオボタンです。

> リストコントロールを使って表示しても同じような操作は出来そうですが、
> それでは駄目ですか?
リストコントロールというものを調べてみます。
ありがとうございます。
引用返信 編集キー/
■57938 / inTopicNo.4)  Re[3]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (3回)-(2011/03/22(Tue) 16:12:50)
> ■No57934 (PATIO さん) に返信
> 何個あるか分からない物をずらっと縦に並べるのでしょうか?
> そうなると画面内にはおさまらないような気がします。
すみません、
Panel1上にラジオボタンとラベルを配置するので、
スクロールバーが表示されると思うので
この点は問題ないです。
引用返信 編集キー/
■57941 / inTopicNo.5)  Re[4]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ アサイン (1回)-(2011/03/22(Tue) 16:21:18)
No57938 (杏 さん) に返信
パネルを用いて、スクロール可であるのなら、原始的なやり方ですが、
テーブルの行の分ループを行って、各行毎にラベル・ラジオボタンのインスタンスを作成して、
行数に応じてラベル・ラジオボタンのLocationY座標を指定し、パネルに追加する方法でもいいのではないでしょうか。
引用返信 編集キー/
■57945 / inTopicNo.6)  Re[5]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ マサヤ (294回)-(2011/03/22(Tue) 16:32:47)
似たような質問としては
http://bbs.wankuma.com/search.cgi?no=0&word=%83p%83l%83%8B%83R%83%93%83g%83%8D%81%5B%83%8B%82%C9%94z%92u%82%B5%82%BD%83%89%83x%83%8B%82%CC%83N%83%8A%83b%83N%83C%83x%83%93%83g%82%CC%8E%E6%93%BE&andor=and&logs=all&PAGE=20
これでしょうか?
引用返信 編集キー/
■57952 / inTopicNo.7)  Re[6]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (5回)-(2011/03/22(Tue) 17:42:28)
アサインさん
マサヤさん
ありがとうございます。
お二人の意見を参考に下記のように
コーディングしました。
思っていたことは出来たのですが、
直した方がいいところなどありましたら
教えたいただけたらうれしいです。

this.Id.Text = "0";
this.tData.Text = dt.Rows[0]["tDate"].ToString();
for (int i = 1; i < dt.Rows.Count; i++)
{
this.Id= new System.Windows.Forms.RadioButton();
this.Id.AutoSize = true;
this.Id.Location = new System.Drawing.Point(5, 3+50*i);
this.Id.Name = "Id";
this.Id.Size = new System.Drawing.Size(88, 16);
this.Id.Text = i.ToString();
this.Id.UseVisualStyleBackColor = true;

this.tData= new System.Windows.Forms.Label();
this.tData.AutoSize = true;
this.tData.Location = new System.Drawing.Point(121, 5+50*i);
this.tData.Name = "tData";
this.tData.Size = new System.Drawing.Size(35, 12);
this.tData.Text = dt.Rows[i]["tData"].ToString();

this.label10 = new System.Windows.Forms.Label();
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(227, 5+50*i);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(41, 12);
this.label10.TabIndex = 12;
this.label10.Text = "日付";

this.panel1.Controls.Add(this.Id);
this.panel1.Controls.Add(this.tData);
this.panel1.Controls.Add(this.label10);
}
引用返信 編集キー/
■57953 / inTopicNo.8)  Re[7]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ マサヤ (295回)-(2011/03/22(Tue) 17:48:52)
2011/03/22(Tue) 17:49:49 編集(投稿者)

>this.Id.Name = "Id";
>this.tData.Name = "tData";
>this.label10.Name = "label10";
これを
this.Id.Name = "Id" + i.ToString();
this.tData.Name = "tData" + i.ToString();
this.label10.Name = "label10" + i.ToString();
こうしてあげるといいかな。
タブインデックスも似たような感じで。
引用返信 編集キー/
■57970 / inTopicNo.9)  Re[8]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (6回)-(2011/03/23(Wed) 09:45:23)
No57953 (マサヤ さん) に返信
> 2011/03/22(Tue) 17:49:49 編集(投稿者)
>
> >this.Id.Name = "Id";
> >this.tData.Name = "tData";
> >this.label10.Name = "label10";
> これを
> this.Id.Name = "Id" + i.ToString();
> this.tData.Name = "tData" + i.ToString();
> this.label10.Name = "label10" + i.ToString();
> こうしてあげるといいかな。
> タブインデックスも似たような感じで。

ありがとうございます。

もう1つ質問なのですが、
Panel1にラジオボタン(Id)とラベル(tData)が配置されていますが、
どのラジオボタンがチェックされているかを取得して、
そのラベル(tData)を取得したいです。
どのようにすればいいでしょうか?

ラジオボタンのチェックを
foreach (RadioButton rb1 in panel1.Controls)
{
if (rb1.Checked)
//処理
}
このようにやったのですが、
RadioButtonとLabelが交互に見られているため、
型 'System.Windows.Forms.Label' のオブジェクトを型 'System.Windows.Forms.RadioButton' にキャストできません。
というエラーになってしまいます。
なにかうまくやる方法はないでしょうか?
引用返信 編集キー/
■57972 / inTopicNo.10)  Re[9]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ マサヤ (296回)-(2011/03/23(Wed) 09:58:17)
2011/03/23(Wed) 09:58:44 編集(投稿者)
パネルからコントロールを取り出すことにこだわるのであれば下記のやり方でできるかもしれないです。
foreach (Object object in panel1.Controls)
{
  try
  {
    RadioButton rb = (RadioButton)object;
    if (rb.Checked)
    //処理
  }
  catch
  {}
}

引用返信 編集キー/
■57974 / inTopicNo.11)  Re[10]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (8回)-(2011/03/23(Wed) 10:21:45)
No57972 (マサヤ さん) に返信
> 2011/03/23(Wed) 09:58:44 編集(投稿者)
>
> パネルからコントロールを取り出すことにこだわるのであれば下記のやり方でできるかもしれないです。
こだわりはないです。
それしか方法が無いと思ったので・・・。
ほかにあるようでしたら
教えていただけたらうれしいです。

> foreach (Object object in panel1.Controls)
> {
>   try
>   {
>   RadioButton rb = (RadioButton)object;
>   if (rb.Checked)
>   //処理
>   }
>   catch
>   {}
> }
このやり方ですと、ラベルを見たときにエラーが発生してしまい、
foreach (RadioButton rb1 in panel1.Controls)
{
if (rb1.Checked)
//処理
}
これと同様になってしまいました。
引用返信 編集キー/
■57977 / inTopicNo.12)  Re[11]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ マサヤ (297回)-(2011/03/23(Wed) 10:27:57)
こだわりがないのでしたら単純に
this.Id.Name = "Id" + i.ToString();
これを見てあげたらいいのではないでしょうか?
そのために"Id" + i.ToString()で一意な命名をしているのですから。
rb1が"Id" + i.ToString()だと思っていただければ問題ないかと思います。
引用返信 編集キー/
■57978 / inTopicNo.13)  Re[9]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 魔界の仮面弁士 (2139回)-(2011/03/23(Wed) 10:30:43)
No57970 (杏 さん) に返信
> foreach (RadioButton rb1 in panel1.Controls)
> {
>  if (rb1.Checked)
>  {

下記のようにしてみてください。

foreach (var rb1 in panel1.Controls.OfType<RadioButton>())
{
 if (rb1.Checked)
 {
  MessageBox.Show(rb1.Text); // 処理
 }
}

あるいは、このようにも書けます。

foreach (var rb1 in panel1.Controls.OfType<RadioButton>().Where(r => r.Checked))
{
 MessageBox.Show(rb1.Text); // 処理
}



また、ラジオボタンはいずれか一つのみがチェックされた状態となるので、ループさせずとも、
 var rb1 = panel1.Controls.OfType<RadioButton>().Where(r => r.Checked).FirstOrDefault();
だけでも良いかもしれません。

# AutoCheck = false にしていた場合は、複数の RadioButton を
# 同時にチェック状態にできますが、それなら CheckBox を使う方が素直ですね。
引用返信 編集キー/
■57985 / inTopicNo.14)  Re[12]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (10回)-(2011/03/23(Wed) 11:14:36)
No57977 (マサヤ さん) に返信
> こだわりがないのでしたら単純に
> this.Id.Name = "Id" + i.ToString();
> これを見てあげたらいいのではないでしょうか?
> そのために"Id" + i.ToString()で一意な命名をしているのですから。
> rb1が"Id" + i.ToString()だと思っていただければ問題ないかと思います。

ありがとうございます。
これもforeachで回すのでしょうか?
引用返信 編集キー/
■57986 / inTopicNo.15)  Re[10]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (11回)-(2011/03/23(Wed) 11:18:12)
No57978 (魔界の仮面弁士 さん) に返信
> ■No57970 (杏 さん) に返信
>>foreach (RadioButton rb1 in panel1.Controls)
>>{
>> if (rb1.Checked)
>> {
>
> 下記のようにしてみてください。
>
> foreach (var rb1 in panel1.Controls.OfType<RadioButton>())
> {
>  if (rb1.Checked)
>  {
>   MessageBox.Show(rb1.Text); // 処理
>  }
> }
>
> あるいは、このようにも書けます。
>
> foreach (var rb1 in panel1.Controls.OfType<RadioButton>().Where(r => r.Checked))
> {
>  MessageBox.Show(rb1.Text); // 処理
> }
>
>
>
> また、ラジオボタンはいずれか一つのみがチェックされた状態となるので、ループさせずとも、
>  var rb1 = panel1.Controls.OfType<RadioButton>().Where(r => r.Checked).FirstOrDefault();
> だけでも良いかもしれません。
>
> # AutoCheck = false にしていた場合は、複数の RadioButton を
> # 同時にチェック状態にできますが、それなら CheckBox を使う方が素直ですね。

ありがとうございます。
>  var rb1 = panel1.Controls.OfType<RadioButton>().Where(r => r.Checked).FirstOrDefault();
これで出来ました。
ですが、取得したRadioButton(Id)の
Label(tData)の取得の仕方がわかりません。
教えていただけますでしょうか?
引用返信 編集キー/
■57990 / inTopicNo.16)  Re[11]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 魔界の仮面弁士 (2140回)-(2011/03/23(Wed) 12:37:52)
No57986 (杏 さん) に返信
>>  var rb1 = panel1.Controls.OfType<RadioButton>().Where(r => r.Checked).FirstOrDefault();
> これで出来ました。
> ですが、取得したRadioButton(Id)の
> Label(tData)の取得の仕方がわかりません。

RadioButton を動的に生成した時に、RadioButton の Tag プロパティに
対応する Label コントロールをセットしておいては如何でしょうか。

そうすれば、
 Label lbl = (Label)rb1.Tag;
のように簡単に取得できるかと思います。


あるいは、Label と RadioButton の命名規約が、
> this.Id.Name = "Id" + i.ToString();
のように決まっているのなら、rb1.Name プロパティ経由で番号を調べ、
それを基に Label の名前を割り出して、
 panel1.Controls.Find(ラベル名, false)
または
 panel1.Controls[〜]
で探す事もできます。


他には、ラジオボタンやラベルを配列やコレクションで管理しておくのも手かと。
引用返信 編集キー/
■57999 / inTopicNo.17)  Re[12]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (13回)-(2011/03/23(Wed) 15:03:33)
No57990 (魔界の仮面弁士 さん) に返信
> あるいは、Label と RadioButton の命名規約が、
>>this.Id.Name = "Id" + i.ToString();
> のように決まっているのなら、rb1.Name プロパティ経由で番号を調べ、
> それを基に Label の名前を割り出して、
>  panel1.Controls.Find(ラベル名, false)
> または
>  panel1.Controls[〜]
> で探す事もできます。

こんな感じでやってみました。
string date;
Control[] control_date;

foreach (var rb1 in panel1.Controls.OfType<RadioButton>())
{
if (rb1.Checked)
{
foreach (char c_no in rb1.Name.ToString())
{
if (0 <= c_no.CompareTo('0') && c_no.CompareTo('9') <= 0)
{
control_date = panel1.Controls.Find("tDate" + c_no, false);

date = control_date[0].Text;
MessageBox.Show(date);
break;
}
}
}
}

これで、取得することが出来ました。
ですが、
◎Id ※
日付 tDate ※
◎Id
日付 tDate
◎Id
日付 tDate

このようになっている※の部分
つまり、一つ目のId,tDataが取得できません。
RadioButtonやLabelをループで回して追加しているのは
二つ目からなのでそれが原因でしょうか?
一つ目を取得するにはどうしたらいいですか?

その取得したLabelを使って
データベースから
データを取得したいので、
一つ目も取得しないとうまくいきません・・・
よろしくお願いいたします。
引用返信 編集キー/
■58000 / inTopicNo.18)  Re[13]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ 杏 (15回)-(2011/03/23(Wed) 15:11:46)
> これで、取得することが出来ました。
> ですが、
> ◎Id ※
> 日付 tDate ※
> ◎Id
> 日付 tDate
> ◎Id
> 日付 tDate
>
> このようになっている※の部分
> つまり、一つ目のId,tDataが取得できません。
> RadioButtonやLabelをループで回して追加しているのは
> 二つ目からなのでそれが原因でしょうか?
> 一つ目を取得するにはどうしたらいいですか?
>
> その取得したLabelを使って
> データベースから
> データを取得したいので、
> 一つ目も取得しないとうまくいきません・・・
> よろしくお願いいたします。

一つ目のRadioButtonとLabelの名前を
変更してId1,tData1と名づけ、
ループで回して作成しているRadioButtonとLabelは
Id2,tData2から、iの値を増やしていくことで
思っていたとおりの動きをさせることが出来ました。

いろいろありがとうございました!
また、よろしくお願い致します。
解決済み
引用返信 編集キー/
■58001 / inTopicNo.19)  Re[13]: ラベル、ラジオボックス配置を任意の数配置する
□投稿者/ マサヤ (298回)-(2011/03/23(Wed) 15:13:34)
2011/03/23(Wed) 15:15:07 編集(投稿者)

RadioButtonのName とLabel(tDate)のTextをCollectionに格納して持っておけばいいのでは?
NameをキーにしてtDateのTextを取得できるようになりますよ。

すみません、解決済みですね。
解決済み
引用返信 編集キー/
■58004 / inTopicNo.20)  Re[14]: ラベル、ラジオボックス配置を任意の数配置する
 
□投稿者/ 杏 (16回)-(2011/03/23(Wed) 16:12:55)
No58001 (マサヤ さん) に返信
> 2011/03/23(Wed) 15:15:07 編集(投稿者)
>
> RadioButtonのName とLabel(tDate)のTextをCollectionに格納して持っておけばいいのでは?
> NameをキーにしてtDateのTextを取得できるようになりますよ。
>
> すみません、解決済みですね。

いえいえありがとうございます。
勉強になります!
調べてみたいと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -