■No60344 (aaa さん) に返信 > DISPTEXTの構造体定義は、残念ながら今見られません。 > しかし静的配列で渡すと、うまくいく可能性があるのですね。 > 試してみます。 > よろしければ、なぜ動的配列である必要がありえるのか教えていただけないでしょうか。 静的配列の要素がアドレス上順番に並んでいるのに対し、動的配列では、要素が順番に並んでいるとは限らないからです。 DISPTEXTの定義が分からないので何とも言えませんが、可能性として、dll側では引数の先頭アドレスから順にメモリを 参照し、演算を行いますが、VB側で用意したDISPTEXTがアドレス上順番に並んでいなければ、VB側に戻った時には おかしな値になってしまいます。もちろん、別の用途に確保したメモリで演算を行おうとすれば、 「保護されているメモリに読み書きしようとした」エラーが出てしまいます。 > それから、VB.NETで構造体配列を静的に定義することってできましたっけ。 > 再定義する方法しか知らなかったもので。 > とりあえず、調べてみます。 DISPTEXTの定義が分からないので、うまくいくかどうか分かりませんが、以下はどうでしょう。 Public Sub Initialize() Dim aaa(31) As Byte aaaFont = aaa End Sub
■No92914 (shu さん) に返信 おはようございます。shu さん、お返事ありがとうございます。 >>わからないこと点1 >>ラジオボタンの値をどのように取得すれば良いでしょうか? >>chbNaiyou_1_1_1 >>chbNaiyou_1_1_2 >>上記のラジオが配置されていて >>chbNaiyou_1_1_2が「true」ならば、内容に「2」(コントロール名の右端の数値)とセットしたいです。 > chbNaiyou_1_1_2.checkedを確認すればよいです。 今回は、コントロール取得の繰り返しの処理中に ラジオボタンの状態が知りたかったです。 下記の様にすると、判定することができました。 同様にチェックボタンの方も判定できそうです。 if (((RadioButton)ctl).Checked == true) { naiyou = btn_num; } >>わからないこと点2 > 繰り返しの順番が決まっているのなら > 処理する順番に配列に設定したものを用意すると処理しやすいかと思います。 >> List<T> buf = new List<T>(); >> foreach (Control ctrl in top.Controls) >> { >> if (ctrl is T) buf.Add((T)ctrl); >> buf.AddRange(GetAllControls<T>(ctrl)); >> } >> return buf; > ここでうまく順番通りになるようにするか、top.Controlsを使わず固定で配列初期化を行うようにする。 そうですね。パネルに配置するコントールは決まっているので、 コントロールのリストを作成して試してみます。
- Child Tree -