タイトル通りです。
テキストボックスなどをコントロール配列で持つときに二次元配列で持つ方法はないでしょうか?

ご回答の方、宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

コントロールのIndexプロパティを利用する方法では二次元配列はできません。


しかし、変数としての二次元配列ならできます。

Dim TextBoxes(3, 10) As TextBox

などとすると、テキストボックスの多次元配列ができます。
ただし、この変数にはインスタンスがないので、インスタンスは別に作成してやる必要があります。

以下に例を示します。

名前がTexts、Indexが0のTextBoxを配置します。
フォームモジュールに以下を貼り付けます。

Option Explicit

Private TextBoxes(3, 10) As TextBox

Private Sub Form_Load()

On Error Resume Next
Dim N As Long, M As Long, T As Long

For N = 0 To 2

For M = 0 To 9

T = N * 10 + M
Load Texts(T) 'Load Texts(0)はエラーだが無視される
Set TextBoxes(N, M) = Texts(T)
TextBoxes(N, M).Left = N * 1320
TextBoxes(N, M).Top = M * 300
TextBoxes(N, M).Visible = True

Next M

Next N

End Sub

Private Sub Texts_Click(Index As Integer)

MsgBox "これは(" & (Index \ 10) & ", " & (Index Mod 10) & ")です"

End Sub

この方法を使う場合、TextBoxes(N, M)のIndexプロパティはN * 10 + Mを示すので、注意が必要です。
    • good
    • 0
この回答へのお礼

ありがとうございます。これが知りたかったのです。
Dimで宣言すれば二次元配列にできそうだ、ということには気づいていたのですが。
インスタンスの生成が足りなかったのですね。ありがとうございました。

お礼日時:2002/02/12 10:15

Mizyuさん、こんにちは。



コントロールを二次元配列にする方法は知りません。
ただ、二次元配列を添え字につかったらにた処理が出来ると思います。

dim iArry(10,10) as integer

iArry(1,1)=1
iArry(2,1)=2
...

TEXT(iArry(1,1)).TEXT = "AAAAA"
TEXT(iArry(2,1)).TEXT = "BBBBB"
    • good
    • 0

Mizyuさん、こんにちは。


コントロール配列を二次元にする方法はありません!かな?
調べ切っていないのかも知れませんが、僕は知りません。

仮想二次元にして、その都度計算されたらいかがでしょうか。

例えば 5×8 の二次元とします。
DIM TBL(40) as string
for i=1 to 5
for j=1 to 8
TBL((i-1)*8 + j)="テスト"
next j
next i
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWord2007のコンテンツコントロールについて

Word2007で表紙「サイドライン」というものを挿入しました。

その後、コンテンツコントロールを削除できないように「開発」タブを表示させ、リボンの中からプロパティをクリックしようとしましたが、グレーアウトしていてクリックできません。

デザインモードにするとプロパティをクリックできるようになるのですが、クリックすると英語がズラズラ出てきて、コンテンツコントロールのプロパティウィンドウは出てきません。

どのようにすれば、コンテンツコントロールのプロパティ画面が出るのでしょうか。

Aベストアンサー

> デザインモードにするとプロパティをクリックできるようになるのですが、
> クリックすると英語がズラズラ出てきて
これは、コンテンツを何も選択していない場合は、ドキュメントのプロパティ一覧が表示されているのと違いますか。

デザインモードかどうかに関わらず、各コンテンツコントロールを選択すると、プロパティがアクティブになって選択できるようになりませんか。
 

Qコントロール配列のテキストボックスの大きさの自動調整

日本語に対して英訳を入力し正誤を判定するプログラムを作っています。
答えの英文(1文ずつ)を入力するテキストボックスを、単語数分だけコントロール配列で自動表示したいのですが、その際にテキストボックスを単語の文字数に適した大きさにするやり方がわかりません。
(例 I am a girl.が答えなら、テキストボックスを4つ表示し、
「I」に該当するテキストボックスは1文字分の大きさで表示)
英文から単語数、単語の文字数を計算する部分はだいたいわかりますが、親切な方がいらっしゃいましたらその部分もお願いいたします。
初心者なので簡単な質問かもしれませんが、宜しくお願いします。

Aベストアンサー

Option Explicit

Dim Rdata As String
Dim Moj_A As String
Dim Dummy As Integer
Dim Mojsuu As Integer
Dim Sw As Integer
Dim Moj As String
Dim N As Integer
Dim my_Range As Integer

'
'これを テストするには、テキストボックスを6個 配列にして

'コマンドボタンを 1個 配置する必要が、あります。
'


Private Sub Command1_Click()
Mojsuu = Len(Rdata)
N = 0
Moj = Rdata
Dummy = 1
Sw = 1

Do
If Dummy = Mojsuu Then
N = N + 1
Moj_A = Mid(Rdata, Sw, Dummy - (Sw - 1))
Call Txit_c(Moj_A, N)
Exit Do
End If

If Moj = " " Then
If Sw = 1 Then
N = N + 1
Moj_A = Left(Rdata, Dummy - 2)
Sw = Dummy
Call Txit_c(Moj_A, N)
ElseIf Sw <> Mojsuu Then
N = N + 1
Moj_A = Mid(Rdata, Sw, Dummy - (Sw + 1))
Sw = Dummy
Call Txit_c(Moj_A, N)
End If

End If

Moj = Mid(Rdata, Dummy, 1)
Dummy = Dummy + 1

Loop

End Sub

Sub Txit_c(Moj_A As String, N As Integer)
my_Range = Len(Moj_A)

Form1.ScaleMode = vbCharacters

Text1(N - 1).Text = Moj_A
Text1(N - 1).Width = my_Range + 0.5 'my_Range + 1の 1 は、Widthのoffsetで 微調整(工夫)が必要です。

Form1.ScaleMode = vbPixels

For N = 0 To N - 1
Text1(N + 1).Left = Text1(N).Left + Text1(N).Width + 10 'Text Box間の間隔を設定 現在は、Offset=10
Next

End Sub


Private Sub Form_Load()
Rdata = "Antonio Pantoja, Domingo Cura & Jorga" ' TEST用文字列です。
End Sub

Option Explicit

Dim Rdata As String
Dim Moj_A As String
Dim Dummy As Integer
Dim Mojsuu As Integer
Dim Sw As Integer
Dim Moj As String
Dim N As Integer
Dim my_Range As Integer

'
'これを テストするには、テキストボックスを6個 配列にして

'コマンドボタンを 1個 配置する必要が、あります。
'


Private Sub Command1_Click()
Mojsuu = Len(Rdata)
N = 0
Moj = Rdata
Dummy = 1
Sw = 1

Do
If Dummy = Mojsuu Then
N = N + ...続きを読む

Qワード2010「フォームコントロール」文字制限

ワード2003などの文書を保存すると、「コンテンツコントロール」が使えなく
ワード2010では「フォームコントロール」を使わないといけないということがわかり
ためしに、ワード2003のファイルをワード2010で「フォームコントロール」の設定をしましたが
以下の問題が発生しました。

テキストフィールドのフォームコントロールを挿入し、文字列、最長10文字、全角で設定を
したのですが、10文字以上の文字も数字も入力ができるのです。

また、コンボボックスのフォームコントロールを挿入し
「ビジネス英語」「簿記」「パソコン」とドロップダウンリストを作ったのですが
ドロップダウンして「英語」以外のものを選択ができません。

どうしてでしょうか?

テキストはFOM出版 MOSエキスパート2010のLesson72をやっています。
テキストにそってやっているのですが、上記が疑問です。

ぜひ、ご回答をいただきたいと思っております。
よろしくお願いします。

Aベストアンサー

>2003などで文書を保存すると、ワード2010では「フォームコントロール」を使わないといけないということがわかり・・・
というよりは、互換モードになりますので2010のコントロールコマンドは使えない状態(グレーアウトします)となり、「以前のバージョンのツール」というコマンドのみの使用となります

テキストフォームフィールドの設定は添付画像を載せますが、一応念のため設定方法を・・・。
テキストボックスフォームフィールドをダブルクリックするとプロパティが出ます
「種類」→「文字列」に設定
「最長文字数」→「10」に設定
「文字列の形式」→「全角文字」
ここまで設定で来たら「OK」を押す

「開発」タブより、「文書の制限」をクリック
1 書式の制限
  「利用可能な書式を制限する」にチェックを入れる
2 編集の制限
  「ユーザーに許可する編集の種類を指定する」の▼をクリックして「フォームの入力」を選択
「はい、保護を開始します」をクリックするとパスワードを入力する画面が出ますが、何も入力しないで「OK」をクリック

テキストボックスフォームフィールドをクリックして文字を入力
<例>あいうえおかきくけこさしすせそ(わざと15文字入力します)
文字はいくらでも入力できますが「Enter」を押したときに10字以上は消えて10字までの文字がフィールド内に入力されます

あと、ドロップダウンフォームフィールドですが・・・ (; ̄ー ̄A アセアセ・・・
これも同じく、1・2の順で文書を保護する事で、ドロップダウンのフィールドをクリックするとリストが出ますので、FOM出版のテキストをもう一度よく読んでみて下さい

>2003などで文書を保存すると、ワード2010では「フォームコントロール」を使わないといけないということがわかり・・・
というよりは、互換モードになりますので2010のコントロールコマンドは使えない状態(グレーアウトします)となり、「以前のバージョンのツール」というコマンドのみの使用となります

テキストフォームフィールドの設定は添付画像を載せますが、一応念のため設定方法を・・・。
テキストボックスフォームフィールドをダブルクリックするとプロパティが出ます
「種類」→「文字列」に設定
「最...続きを読む

QVB.NETでテキストボックスをコントロール配列のように扱いたいんですが

VB.NETではコントロール配列はサポートされていませんが、TextBox1~TextBox10を配列のように扱う方法はありますか?ちなみに、以下の方法ではエラーとなりました。

Controls("TextBox" & i).Text でTextの内容を取得しようとした

よろしくお願いします。

Aベストアンサー

こんな感じでいかがでしょうか。

Dim i As Long
Dim s As String
Dim Ctl As Control
Dim CtlName As String
For i = 1 To 2
  CtlName = "TB" & i.ToString
  For Each Ctl In Me.Controls
    If Ctl.Name = CtlName Then
      s = s & Ctl.Text
    End If
  Next Ctl
Next i
MsgBox(s)

こんな感じでいかがでしょうか。
.Netはまだ勉強途中なんで、もしかしたら他のやり方があるかも~

Q設定などの表示が英語になった

スリープ状態から起こすとき、毎回パスワードを要求されるようになりました。面倒なのでなんとかしようとしたら、設定が英語表示に変わってしまいました。日本語表示に戻るにはどうしたら良いのでしょうか?
画面には今も日本語が出るし、こうして日本語入力もできます。しかし、コントロールパネルなどの表示が英語になっています。

Aベストアンサー

「スタート」右クリック「ファイル名を指定して実行」「 netplwiz」入力「OK」
「ユーザー」「このコンピューターのユーザー」からユーザー名を選択し、「ユーザーがこのコンピュータを使うにはユーザ名とパスワードの入力が必要」のチェックを外し「OK」
パスワードを入力、確認のため再度入力、「OK」再起動→パスワード入力を省略し自動サインインになります。(アカウントとパスワードは記録しておきます)

英語表示
1)再起動してみる。
2)「スタート」ボタン右クリック「コントロールパネル(Control Panel)」「時計、言語、および地域(Clock, Language, and Region)」言語の設定。(「スタート」メニューの「設定(Settings)」→「時刻と言語(Time & language)」でも言語を設定)

QVB6で、一次元配列と二次元配列の相互コピー

VB6で、一次元配列と二次元配列の相互コピーをしたいです。

(1)元々下記のような宣言をもつ配列がありました。
Public Type TKey
no As String
id As String
code As String
atr() As String
End Type

Public Type tr
Key As TKey
atr() As String
abc As Boolean
End Type

Public gtr() As tr


(2)コピー用に、下記のような二次元配列用宣言をつくりました。
Public Type TKey2
2no As String
2id As String
2code As String
a2tr() As String
End Type

Public Type 2tr
Key22 As TKey2
atr22() As String
abc22 As Boolean
End Type

Public g2tr() As 2tr


(3)  (1)から(2)にデータを複製したり、
(4)  (2)から(1)にデータを複製したいです。

今は、下記のように面倒くさいことをしています。
dim gtr(maxcnt)
ReDim Preserve g2tr(500, maxcnt)

ループ
g2tr(cnt, i).Key22.2code = gtr(i).Key.code ・・・(3)
gtr(i).Key.code = g2tr(j, i).Key22.2code ・・・(4)
      今は上記を全ての宣言の配列に実行しています。

なにかもっと効率のよい方法はないでしょうか。
(1)の配列は、1~500くらいはあり、不定です。

VB6で、一次元配列と二次元配列の相互コピーをしたいです。

(1)元々下記のような宣言をもつ配列がありました。
Public Type TKey
no As String
id As String
code As String
atr() As String
End Type

Public Type tr
Key As TKey
atr() As String
abc As Boolean
End Type

Public gtr() As tr


(2)コピー用に、下記のような二次元配列用宣言をつくりました。
Public Type TKey2
2no As String
2id As String
2code As String
a2tr() As String
End Type

Public...続きを読む

Aベストアンサー

構造体のメンバーが同じ構成ならばランダムアクセスファイルを使ってベタに流してやればいいのでは

' ファイル番号は FreeFileで取得したほうがいいかも
Open "sample.bin" for random as #1
' 書き出す位置は適宜修正してください
for n = 0 to 20
  ' レコード番号を省略すると 1番から順に出力します
  put #1,,g2tr(n,1)
next
' 読み出す位置の修正も ・・・
for n = 0 to 20
  ' レコード番号は1番からなので n+1で指示
  Get #1, n+1, gtr(n)
next
close

Q英語版WindowsXPもしくはVistaを日本語化

現在、オーストラリアに滞在しておりまして、最近の円高を利用し
現地の英語版のPCを購入し、OSだけ日本語化しようと考えています。
そこで質問なのですが、例えばスタートメニューやコントロールパネルなどすべて英語から日本語へ変更することは可能なのでしょうか。それともやはり日本語版のOSを購入しないと、すべて日本語にすることは難しいのでしょうか。またその逆で日本語版を英語版にする方法もぜひ教えてください。ご回答宜しくお願いします。

Aベストアンサー

Vistaと、XPでは若干違います。

特にXPのプロの多言語対応版のOSを購入したのなら、かなり日本語化できます。といっても、スタートメニューが起動時は英語、切り替えると日本語になったり英語に戻ったりだったと思います。コントロールパネルは英語のままで、アイコンそのものを自分で変更すると、日本語表示にまで変えることができますが、自分が名前を日本語で入力しなおしたもの、あるいは、日本語のアイコンを移植したものだけです。

日本語版、これを英語に切り替えるのも同様です。起動時は日本語になってしまうのですが、起動するまでは英語の表示にすることは、インストールする際の指定の仕方である程度は可能です。XPなら、プロの多言語対応版ならという条件ですので、他はそこまで対応できないと思います。

VISTAになると、アルティメットの日本語版を購入すると、ある程度は英語の表示に切り替えできました。しかし、ホームプレミアムやベーシックでは英語のスタートメニューには私はできませんでした。

今書き込みしているパソコン、米国購入で、初期はVISTAのベーシック英語版で、デュアルブートで日本語版のホームプレミアムにしてあります。英語のベーシック版も、日本語のソフトもアプリもほとんど使えるのですが、文字化けが激しい、起動してから、表示がときどき日本語に戻る程度の不安定な状態ですが、十分に日本語で使えます。

逆に日本語版のホームプレミアムに英語版のアプリを入れると、文字化けが激しく、フランス語やどこの言語か不明の状態になるので、割り切って、日本語のソフトは日本語版の方にインストール、英語版は英語のほうにインストールしています。特にオフィス、これは、パーソナルだと、インストールした言語の方をメインにされてしまうみたいで、英語のベーシック版にインストールすると英語起動で初期が英語になってしましました。使いにくいので、英語版はアンインストールし、日本語版のホームプレミアムの方だけライセンス認証して使うようにしています。

アルティメットではパーソナル版を使っていないのでどうなるか試していませんが、オフィスは、日本語版には日本語、英語版には英語をインストールしないと、動作も異常が起こりそうです。

ちなみに、私は試さないのですが、アップグレード版の日本語版ビスタホームプレミアムなどを購入し、英語のベーシック版からアップグレードしても、ちゃんと日本語版としてインストールできるそうです。その場合には、英語のベーシック版は使えなくなりますので、両方使い分けたかったら、通常版を購入することになります。

Vistaと、XPでは若干違います。

特にXPのプロの多言語対応版のOSを購入したのなら、かなり日本語化できます。といっても、スタートメニューが起動時は英語、切り替えると日本語になったり英語に戻ったりだったと思います。コントロールパネルは英語のままで、アイコンそのものを自分で変更すると、日本語表示にまで変えることができますが、自分が名前を日本語で入力しなおしたもの、あるいは、日本語のアイコンを移植したものだけです。

日本語版、これを英語に切り替えるのも同様です。起動時は日本語にな...続きを読む

QVB2010でのコントロール多次元配列について

教えてください。
実行中にコントロールを生成したいのですが、

Public Class Form1
 Private myTxt(,) As System.Windows.Forms.TextBox

 Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {}
 Dim i As Integer
 Dim j As Integer
 Dim h As Integer
 Dim p As Integer

 h = 10
 p = 100
 For i = 0 To Me.myTxt.GetLength(0) - 1
  For j = 0 To Me.myTxt.GetLength(1) - 1
   Me.myTxt(i, j) = New System.Windows.Forms.TextBox
   Me.myTxt(i, j).Name = "myTxt" + i.ToString() + j.ToString()
   Me.myTxt(i, j).Size = New Size(100, 30)
   Me.myTxt(i, j).Location = New Point(p, h)
   p = p + 100
  Next j
  h = h + 30
 Next i

 Me.myPnl.Controls.AddRange(Me.myTxt)

と書くと最後の行が波線になり、
“型 'System.Windows.Forms.TextBox の 2 次元配列' の値を
'System.Windows.Forms.Control' に変換できません。”とエラーになります。

これはAddRangeは多次元配列に使用できないということなのでしょうか?
色々検索してみましたが、コントロールの生成に関する多次元配列が見つけられずに
困っていました。

最後のAddRange(Me.myTxt)をAdd(Me.myTxt(i,j))などと変えたりしても別のエラーになり、
基本的に間違っている気がしますがどこだかがわかりません。

詳しい方、宜しくお願い致します。

教えてください。
実行中にコントロールを生成したいのですが、

Public Class Form1
 Private myTxt(,) As System.Windows.Forms.TextBox

 Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {}
 Dim i As Integer
 Dim j As Integer
 Dim h As Integer
 Dim p As Integer

 h = 10
 p = 100
 For i = 0 To Me.myTxt.GetLength(0) - 1
  For j = 0 To Me.myTxt.GetLength(1) - 1
   Me.myTxt(i, j) = New System.Windows.Forms.TextBox
   Me.myTxt(i, j).Name = "myTxt" + i.ToString() + ...続きを読む

Aベストアンサー

Control.ControlCollection.AddRangeはControlの一次元配列を引数にとります。
ref) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection.addrange.aspx

このため,二次元配列を直接引数に渡すことはできません。
一次元配列にすれば良いのですが,配列はIEnumerable(Of T)を一次元配列の時のみ実装するため,
myTxt.Cast(Of Control).ToArray()
のようにIEnumerable(Of Control)を経由して一次元配列にすればよいでしょう。
# IE(Of T)を二次元配列も実装してくれればToArray()一発だったのですが……。

Q言語を英語表記にしたいのですが・・・

ビスタを購入した外国の友人より相談をうけました。

メニュー画面などを英語表記にしたいのですが、
コントロールパネルの言語のオプションで英語を
選んでも上手くいきません。

メニューなど全般を英語にすることはできないのでしょうか?

Aベストアンサー

EnterpriseとUltimateエディションのみ、MUIに対応しています。

http://trendy.nikkeibp.co.jp/article/col/20070409/121526/
http://www.atmarkit.co.jp/fwin2k/win2ktips/1090langpk/langpk.html

Qリッチテキストボックスとテキストボックスの違い

VB6のリッチテキストボックスとテキストボックス
の違いは何なんでしょうか?

Aベストアンサー

RichTextだと扱えるファイルサイズが大きくなり
プロパティの指定が可能になります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsrichtextboxclasstopic.asp


人気Q&Aランキング