痔になりやすい生活習慣とは?

基礎的な質問かもしれませんが、ネットで調べたのですが、うまく回答が見つからなかったので、教えて下さい。

VB.netで二次元配列を扱っているのですが、この要素はどこにあるのかを知りたいのです。

一次元配列でしたら、Indexof を使えば、どこのインデックスに配置されているかが分かると思うのですが、
二次元配列の場合は、どうすればインデックス数が分かるのでしょうか。

例えば、列は0で固定だけど、どこの行にこの要素が格納されているか分からないから、行番号を知りたいと言うときです。

よろしくお願いいたします。

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

A 回答 (1件)

直接はないので,LINQ等で代用することになります。



e.g.)
Dim arr As Integer(,) = New Integer(,) {
{0, 1, 2},
{10, 11, 12}
}

Dim i1 As Integer = arr.Cast(Of Integer).Select(Function(v, i) New With {v, i}).First(Function(o) o.v = 12).i
Debug.WriteLine("{0} / {1}", i1 \ arr.GetLength(1), i1 Mod arr.GetLength(1))
    • good
    • 0
この回答へのお礼

Yune-Kichiさん

早速のご回答ありがとうございます!
お返事が遅くなって申し訳ございません。

初心者なものでLINQ自体よく分からなかったので、ネットで調べてみたのですが、私の力量では理解が難しく。。(泣

Yune-Kichiさんが教えて下さったコードも初心者の私には難しくて、こちらはどのようなことをされているのでしょうか。

御手数をおかけしまして大変申し訳ございませんが、もう少し詳しく教えて頂けましたら嬉しいです。

よろしくお願いいたします。

お礼日時:2012/07/09 08:33

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QVB.NET 2次元配列

二次元配列に関して質問があります。

二次元配列を定義します。
Dim a(,) As Integer = _
{{0, 0, 0, 0, 0, 0, 1, 1, 1}, _
{0, 0, 0, 0, 0, 1, 0, 0, 1}, _
{0, 0, 0, 0, 0, 0, 1, 1, 1}}

一次元配列を定義します。
Dim b() As Integer

一次元配列のb()に二次元配列a(,)の
{0, 0, 0, 0, 0, 0, 1, 1, 1}の部分を
入れようとした場合、
どのように記載すればよろしいでしょうか?
イメージ的には
b = a(0)
で出きると思ったのですが、
構文エラーとなってしまいます。

よろしくお願いします。

Aベストアンサー

  求めているものとは違く、また既にご存知のものかもしれませんが・・・。

  2次元配列の定義を以下のようにすれば、ご希望の操作が出来ます。

  ※配列の定義が(,)ではなく()()になるため、2次元配列の参照が変わります。

  '----------------------------------------------------------------------------
  Dim array_a()() As Integer = _
                {New Integer() {0, 0, 0, 0, 0, 0, 1, 1, 1}, _
                New Integer() {0, 0, 0, 0, 0, 1, 0, 0, 1}, _
                New Integer() {0, 0, 0, 0, 0, 0, 1, 1, 1}}

  Dim b() As Integer
  Dim c As Integer

  b = array_a(0)   ' {0, 0, 0, 0, 0, 0, 1, 1, 1}の部分を代入
  b = array_a(1)   ' {0, 0, 0, 0, 0, 1, 0, 0, 1}の部分を代入

  c = array_a(2)(7)  ' {0, 0, 0, 0, 0, 0, 1, 1, 1}の7番目 '1'を代入

  '----------------------------------------------------------------------------

  求めているものとは違く、また既にご存知のものかもしれませんが・・・。

  2次元配列の定義を以下のようにすれば、ご希望の操作が出来ます。

  ※配列の定義が(,)ではなく()()になるため、2次元配列の参照が変わります。

  '----------------------------------------------------------------------------
  Dim array_a()() As Integer = _
                {New Integer() {0, 0, 0, 0, 0, 0, 1, 1, 1}, _
                New Integer() {0, 0, 0, 0,...続きを読む

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QArrayListの初期値に二次元配列を設定したい(VB2005)

下記は、aryhogeにTextBoxオブジェクトを格納する処理です。

----------------------------------------
'a)
Dim hoge()() As TextBox = _
      {New TextBox() {txta01, txtb01, txtc01}, _
      New TextBox() {txta02, txtb02, txtc02}, _
      New TextBox() {txta03, txtb03, txtc03}}

Dim aryhoge As New ArrayList    'b)

aryhoge.Add(hoge(0))
aryhoge.Add(hoge(1))
aryhoge.Add(hoge(2))
----------------------------------------

(a)を(b)の初期値として設定するにはどのようにすればよいか、ということが質問内容です。

試しに(b)の部分を以下のようにしてみましたが、「1次元配列の値を変換できない」とのエラーが出ました。
Dim aryhoge As New ArrayList(New TextBox() {hoge(0), hoge(1), hoge(2)})

どうぞよろしくお願い致します。

下記は、aryhogeにTextBoxオブジェクトを格納する処理です。

----------------------------------------
'a)
Dim hoge()() As TextBox = _
      {New TextBox() {txta01, txtb01, txtc01}, _
      New TextBox() {txta02, txtb02, txtc02}, _
      New TextBox() {txta03, txtb03, txtc03}}

Dim aryhoge As New ArrayList    'b)

aryhoge.Add(hoge(0))
aryhoge.Add(hoge(1))
aryhoge.Add(hoge(2))
----------------------------------------

(a)を(b)の初期値として...続きを読む

Aベストアンサー

Dim aryhoge As New ArrayList(hoge)

QVB.NETの配列とArrayListについて教えてください。

VB.NETで配列にPoint型のデータを入れたいのですが、
ArrayListのAddメソッドのように総数をあらかじめ指定せずに
順次追加するように登録していきたいのですが、
そのようなことは可能でしょうか?

最終的には
Dim points As Point()
g.DrawLines(Pens.Black, points)

の方法で線分を描きたいのですが、
ArrayListですとデータ型が指定できないので
Point型のデータを格納できないです。

良い方法がありましたら、ご教示頂けると助かります。

Aベストアンサー

Class Q4240323A

Shared Sub Main()

'ケース1
Dim Points1 As System.Drawing.Point()

'何故かBC42030の警告が出るorz
System.Array.Resize(Points1,2)
Points1(0).X = 100
Points1(0).Y = 100

System.Console.WriteLine(Points1.Length.ToString())

Points1(1).X = 200
Points1(1).Y = 200

System.Console.WriteLine(Points1.Length.ToString())

'http://msdn.microsoft.com/en-us/library/bb348051.aspx
'VB6をご存知ならRedim Preserveと言った方が解りやすいだろう
'VB.NETでもRedimやRedim Preserveは有効だけど,
'僕はVB6時代の構文を嫌っているから.NETらしくArray.Resizeを使っているよ。
'でも一次元配列はともかく多次元配列の配列添字については良く知らないんだ。
System.Array.Resize(Points1,1)

System.Console.WriteLine(Points1(0).X.ToString())

System.Console.WriteLine("======================================")

'.NET 2.0やJava 1.5から取り入れられた機能としてGenericsってのがある。
'System.Collections.ArrayListがSystem.Objectを基本としていたのに対し,
'.NETのSystem.Collections.Generic.List<T>は宣言時に型を記述することで
'型のキャストをいちいち行わなくていいようになっている。
'例を示そう。

Dim Points2 As System.Collections.Generic.List(Of System.Drawing.Point)
Points2 = New System.Collections.Generic.List(Of System.Drawing.Point)()

Dim Point21 As System.Drawing.Point
Dim Point22 As System.Drawing.Point

Point21.X = 100
Point21.Y = 100

Point22.X = 200
Point22.Y = 200

Points2.Add(Point21)
Points2.Add(Point22)

'ちなみに
'System.Collections.Generic.List<T>.ToArray()
'でArray<T>つまりTの配列を返すことが出来るようになっている。

Dim Bitmap1 As System.Drawing.Bitmap
Bitmap1 = New System.Drawing.Bitmap(500,500)
System.Drawing.Graphics.FromImage(Bitmap1).DrawLines(System.Drawing.Pens.Black,Points2.ToArray())

'VistaだとProgram Filesとかに書けなくてエラー出るかも。
Bitmap1.Save("Q4240323-1.bmp")

'こんな感じ。

'何故質問文でArrayListの話が出てきているのに最初に配列の話持ってきたかっつーと。
'多分Boxing関係だと思っているが,よくは理解できていないことがあって(Q3320160)
'Points2.Item(0).X = 100
'とかは出来ず,
'Dim Point23 As Point
'Points23.X = 100
'Points23.Y = 100
'Points2.Item(0) = Point23
'とかしないといけなかったので
'勧めづらかったんですよ。面白いんですけどね。・・・・A

'最後に脱線してこんなのを紹介しておきましょう。
'オブジェクト初期化子(多分.NET 3.0から)

Dim Points3 As System.Drawing.Point
Points3 = New System.Drawing.Point() With {.X = 100,.Y = 100}

System.Console.WriteLine(Points3.X.ToString())

'Aと組み合わせると色々面白いかもしれません





System.Console.ReadKey(true)

End Sub

End Class

Class Q4240323A

Shared Sub Main()

'ケース1
Dim Points1 As System.Drawing.Point()

'何故かBC42030の警告が出るorz
System.Array.Resize(Points1,2)
Points1(0).X = 100
Points1(0).Y = 100

System.Console.WriteLine(Points1.Length.ToString())

Points1(1).X = 200
Points1(1).Y = 200

System.Console.WriteLine(Points1.Length.ToString())

'http://msdn.microsoft.com/en-us/library/bb348051.aspx
'VB6をご存知ならRedim Preserveと言った方が解りやすいだろう
'VB.NETでもRe...続きを読む

QVB.NET DataGridView 縦スクロールバーを常に表示

VB.netについてなのですが、
DataGridViewの縦スクロールバーを常に表示したいです。
データ数によってスクロールバーが表示されたり非表示になったりしていますが、常に表示することは可能でしょうか。教えてください。

環境:
Visualstudio2005
windows XP
よろしくお願いします。

Aベストアンサー

Private vsBar As VScrollBar
Private Sub DataGridViewScrollBar_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.tESTTableAdapter.Fill(Me.testdbDataSet.TEST)

For Each c As Control In dataGridView1.Controls
If TypeOf c Is VScrollBar Then
vsBar = DirectCast(c, VScrollBar)

AddHandler vsBar.VisibleChanged, AddressOf vsBar_VisibleChanged
End If
Next
End Sub
Private Sub vsBar_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
If Not vsBar.Visible Then
'縦クロースバーを常に表示する。
Dim borderWidth As Integer = 2

vsBar.Location = New Point(Me.dataGridView1.ClientRectangle.Width - vsBar.Width, 0)
vsBar.Size = New Size(vsBar.Width, Me.dataGridView1.ClientRectangle.Height - borderWidth)
vsBar.Show()
End If
End Sub

ミスしてたらごめんなさい・・・orz

Private vsBar As VScrollBar
Private Sub DataGridViewScrollBar_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.tESTTableAdapter.Fill(Me.testdbDataSet.TEST)

For Each c As Control In dataGridView1.Controls
If TypeOf c Is VScrollBar Then
vsBar = DirectCast(c, VScrollBar)

AddHandler vsBar.VisibleChanged, AddressOf vsBar_VisibleChanged
End If
Next
End Sub
Private Sub vsBar_VisibleChanged(ByVal ...続きを読む

QVB.NETで他のプロジェクトで作成したフォームを使う方法

こんにちは。
VB.NETのプロジェクトがぐちゃぐちゃで参照設定とかいろんなの呼んでしまっているので、新しく作成しなおしたいのですが、
新しいプロジェクトでプロジェクトを作成し、前のプロジェクトで必要なファイル(.vb、RESX)を新しいプロジェクトのフォルダにコピーしたのですが、
普通のモジュールは追加>新しい項目の追加でなんとか追加できたのですが、フォームの追加の仕方がわかりません><教えてくださいー

P.S. RESXファイルってフォームのデータが入ってるのでしょうか?そんな気がしてコピーしたのですが。

※VB6.0からVB.NETに以降した際にアップデート情報みたいなのがプログラム上にくっついてしまって.vbファイルも参照項目も増えまくってしまった

Aベストアンサー

ドラッグ&ドロップが使いやすい。
Windowsのエクスプローラでvbファイルをドラッグして、VS.NETのソリューションエクスプローラへドロップする。

QArrayListに格納したクラス内のメンバの呼び出し方法(VB)

お世話になります。VB2003でご質問があります。

通常Arryalistでは下記例1のように使用するのが一般的だと思うのですが、例2のようにArryaListにクラスを追加し、その中のメンバを呼び出すにはどのようにコーディングすればよいのでしょうか?
コメントのコンパイルエラー箇所の部分です。
お手数ですが、ご教授よろしくお願いいたします。

*******************************************
(例1)
Dim Test as new ArrayList
Test.ADD("テスト")
console.writeline(test(0))
*******************************************

*******************************************
(例2)
Public Class A
public strA as string

public sub subTest()
strA = "おはよう"
end sub

End Class

Public Class B
Dim a as new ArrayList

a.Add(new A)
a(0).subTest '--コンパイルエラー箇所
console.writeline(a(0).strA) '--コンパイルエラー箇所

End Class
*******************************************

お世話になります。VB2003でご質問があります。

通常Arryalistでは下記例1のように使用するのが一般的だと思うのですが、例2のようにArryaListにクラスを追加し、その中のメンバを呼び出すにはどのようにコーディングすればよいのでしょうか?
コメントのコンパイルエラー箇所の部分です。
お手数ですが、ご教授よろしくお願いいたします。

*******************************************
(例1)
Dim Test as new ArrayList
Test.ADD("テスト")
console.writeline(test(0))
**************************...続きを読む

Aベストアンサー

ArrayListから取り出したものはすべてオブジェクト型です
適切な型にキャストしてから使用してください

Dim a as new ArrayList
a.Add(new A)
CType(a(0), A).subTest
console.writeline(CType(a(0), A).strA)

Q2次元動的配列の第一引数のみを可変にする

ReDim Preserve aStrSKU(x, 2)
aStrSKU(x, 0) = strPre
aStrSKU(x, 1) = サブ2
aStrSKU(x, 2) = サブ3

x = x + 1

上記のソースをDo Untilでまわしているのですが、
2週目以降にxに1を足して行数だけ増やしたいのですが、
2週目でエラーが発生します。
行数だけ要素数を増やす方法はありますか?

Aベストアンサー

こんな感じで

Structure column
Dim col1 As String
Dim col2 As String
Dim col3 As String
End Structure

Private Sub test()

Dim aStrSKU() As column
Dim x As Integer

Do Until x = 3
ReDim Preserve aStrSKU(x)
aStrSKU(x).col1 = "strPre"
aStrSKU(x).col2 = "サブ2"
aStrSKU(x).col3 = "サブ3"

x = x + 1
Loop

End Sub

Qフォームの再読み込み

1. Form1に配置したボタンのクリックイベントでForm2を起動
2. Form2に配置したボタンのクリックイベントでForm2を再起動

これを実現したいのですが、どうやったらいいのかわかりません。
「1. 」はできたのですが、「2. 」の再起動がわかりません。。。

再起動して、初めてロードされるのと同様にロードしたいです。
値の保持などは一切必要ありません。

どなたかわかる方、ご返答お願いします。

環境は windows7 32bit  VisualBasic2010Professional です。よろしくお願いします。

Aベストアンサー

Form2の再起動ボタンのClickイベントを

   private void button1_Click(object sender, EventArgs e)
  {
    // 再起動後のForm2を生成
    Form2 frm2 = new Form2();
    // 自身を閉じる
    this.Close();
    // 再起動のForm2を起動する
    frm2.Show();
  }
といった具合にして見ましょう


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング