トップページ⇒tech
1001コメント349KB

VB.NET質問スレ (Part19)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/01/12(金) 15:57:21
前スレVB.NET質問スレ (Part18)
http://pc10.2ch.net/test/read.cgi/tech/1161250878/
0153デフォルトの名無しさん2007/01/26(金) 19:29:28
ここVB.NETスレだよな?
01541472007/01/26(金) 20:12:18
>>152
その前にプログラムの経験ある?
んで >>147 はどうだったのよ。

なんか釣られてるような気がしてきた…
01551462007/01/26(金) 20:26:05
>>154
c++をちょっとかじった程度で.NETは入門書見ながらやってますがさっぱりです。
147はコンパイルできません。
MessageBox::ShowがMessageBox.Showとされてるのを見ると何か根本的に間違っている気がしてきました・・・
0156デフォルトの名無しさん2007/01/26(金) 20:35:47
>>155
おまいはいったい何の言語を使ってるんだ
C++/CLIだったらスレ違い
01571462007/01/26(金) 20:39:19
>>156
Visual c++ .NET です
0158デフォルトの名無しさん2007/01/26(金) 20:40:17
スレタイを100回読み直せ
01591472007/01/26(金) 20:40:59
>>157
まずはインターネットの使い方を…
0160デフォルトの名無しさん2007/01/26(金) 22:09:20
この一連の流れワロタw
0161デフォルトの名無しさん2007/01/27(土) 18:16:43
プロセスIDから親プロセスIDを得るにはどうすればよいのでしょう?
PerformanceCounter("Process","Creating Process ID","プロセス名")
だと、プロセス名が重複すると駄目だし。
0162デフォルトの名無しさん2007/01/27(土) 18:58:51
Win32API の CreateToolhelp32Snapshot かな
NT4 じゃ使えないようだがまあいいよな今更
0163デフォルトの名無しさん2007/01/28(日) 12:57:45
Formのクライアント領域にDrawLinesで連続した線分を描いてるんだけど、
Paintイベントがウィンドウのサイズを変更したことによって起こった場合と、
Invalidateメソッドによって起こした場合とで極端に違うみたいだ。

どうしてだろうか?
またこれを回避する方法はあるのかな。
01641632007/01/28(日) 13:00:20
【訂正】
× Invalidateメソッドによって起こした場合とで極端に違うみたいだ。
○ Invalidateメソッドによって起こした場合とでパフォーマンスが極端に違うみたいだ。
問題を再現できると思われるコードです。
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    MyBase.SetStyle(ControlStyles.ResizeRedraw, True)
  End Sub
  Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    Dim pt As PointF() = New PointF(1000 - 1) {}
    Dim rnd As New Random
    Dim width As Integer = Me.ClientSize.Width
    Dim height As Integer = Me.ClientSize.Height

    Dim sw As New Stopwatch
    sw.Start()

    For i As Integer = 0 To 999
      With pt(i)
        .X = CSng(width * i / 1000)
        .Y = rnd.Next(height)
      End With
    Next

    Dim g As Graphics = e.Graphics
    g.DrawLines(Pens.Black, pt)

    sw.Stop()
    Console.WriteLine("Elapsed = {0}", sw.Elapsed)
  End Sub
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.Invalidate()
  End Sub
0165デフォルトの名無しさん2007/01/28(日) 13:41:24
Invalidate は全体を再描画するわけだが
0166デフォルトの名無しさん2007/01/28(日) 13:44:50
>>163
リサイズの方が遅いでいいのかな?
フレームの書き直しやマウスでのドラッグの処理でパワーをくってるのでは。
Invalidateとリサイズは別のフォームから操作するようにすれば条件は近くなると思う。
0167デフォルトの名無しさん2007/01/28(日) 14:05:59
どんくらいちがうのん?
01681612007/01/28(日) 14:50:11
>>162
だんけです。

ネイティブのPerformanceCounterにはインスタンスインデックスとかがあって
区別できるようですが、.NETからはどうも指定できないみたい。
0169デフォルトの名無しさん2007/01/28(日) 18:01:07
Me.WindowState = FormWindowState.Minimized
をした時、メモリの消費量(正確にはスワップされてるだけっぽいですが)が減りますが、これは内部でどのようなメソッドを呼び出しているのでしょうか。
最小化せず、メモリ消費量が減ったように見せたいのですが、、、
0170デフォルトの名無しさん2007/01/28(日) 18:06:27
また意味わかんないことを言う奴が来たなあ。。
0171デフォルトの名無しさん2007/01/28(日) 18:12:24
>>169
SetProcessWorkingSetSize(hProcess, 0xffffffff, 0xffffffff)  : kernel32.dll
0172デフォルトの名無しさん2007/01/28(日) 18:22:10
>>171
分かりました。ありがとうございまくす。
0173デフォルトの名無しさん2007/01/28(日) 21:26:09
教えてもらってくすくす笑うなぁぁぁぁ!
0174デフォルトの名無しさん2007/01/28(日) 22:33:14
>>173
>>170
0175デフォルトの名無しさん2007/01/29(月) 02:33:34
>>163
165が言うようにInvalidateはウィンドウ全書き換え。
で、ウィンドウのリサイズや別ウィンドウが重なった後の書き換えは
単純に矩形にならず、複雑な形でクリッピングする処理が入る。

リサイズでも全書き換えしたいなら SetStyle とか見てみ
0176デフォルトの名無しさん2007/01/29(月) 03:26:07
二次元配列 Array1(3,3)とArray2(3,3)の中身を比べるプログラムを作りたいんですけど
どなたか助言をお願いします。

Array1とArray2の中身すべてに
Integer型の0、もしくは9が格納されています。
Array1とArray2の中身を見比べて全く一緒ならtextbox1に「○」と表示させたいと思っています。

(例)
Array1 Array2
001  001
101  101     ←中身が全く同じなので「○」
000  000

Array1 Array2
001  001
101  111     ←中身が違うので「×」
000  001

自分で調べてみてループや判定文を使うのだろうと思って頑張ったのですが
動作してくれません。初心者ですみませんがよろしくお願いします。
0177デフォルトの名無しさん2007/01/29(月) 03:27:28
>>176
×Integer型の0、もしくは9が格納されています。
○Integer型の0、もしくは1が格納されています。

間違えました。ごめんなさい。
0178デフォルトの名無しさん2007/01/29(月) 04:00:05
>>176
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer, j As Integer
Do
For i = 1 To 3
For j = 1 To 3
If Array1(i, j) <> Array2(i, j) Then
TextBox1.Text = "×"
Exit Do
End If
Next
Next
TextBox1.Text = "○"
Exit Do
Loop
End Sub
0179デフォルトの名無しさん2007/01/29(月) 05:12:45
名前空間のステートメントが無効です。
全く何をすればいいのか解らない・・・です・・・
0180デフォルトの名無しさん2007/01/29(月) 11:51:09
自作クラスのオブジェクトをCStr(MyObj)のように使いたいのですが、出来ますか?
出来るとしたらどんなメソッド(プロパティ?)を実装すればいいですか?
0181デフォルトの名無しさん2007/01/29(月) 11:58:50
ToString()をオーバーライドしたらよかっぺ
0182デフォルトの名無しさん2007/01/29(月) 12:37:44
>>175
回答する能力ないくせに無理して答えなくていいんだよ。
人の張ったサンプルを良く見たか?w
0183デフォルトの名無しさん2007/01/29(月) 13:41:26
すんません。
Dim s() As String
と宣言して、どこかでインスタンスを作るとして、
インスタンスが既に出来ているのか居ないのか
判断する方法を教え下さい。
0184デフォルトの名無しさん2007/01/29(月) 13:45:04
IsNothingとか Is Nothing とか。
01851832007/01/29(月) 15:28:32
>>184 様
もう少し具体的にお願いします。
Dim s() As String
'If s(0) Is Nothing Then  <- ここんとこ
ReDim s(0)
End If
0186デフォルトの名無しさん2007/01/29(月) 17:33:22
>>185
184じゃない↓がでええやろ?
If s Is Nothing Then
01871832007/01/29(月) 17:46:27
>>186
ダメみたいです。(^^;
「変数's'は値が割り当てられる前に使用されいます。・・・・」
と出ます。
0188デフォルトの名無しさん2007/01/29(月) 17:55:02
>>187
それは警告だから動くだろ?
警告が気に入らないなら↓のようにしとけ
Dim s() As String = Nothing
0189デフォルトの名無しさん2007/01/29(月) 17:56:10
Dim s() As String

'変数初期化します。
ReDim s(0)

で駄目なの???

0190デフォルトの名無しさん2007/01/29(月) 18:21:13
>それは警告だから動くだろ?

にVB厨の神髄をみた
0191デフォルトの名無しさん2007/01/29(月) 18:23:49
ReDimなんか使うんじゃねぇ
0192デフォルトの名無しさん2007/01/29(月) 18:27:37
>>183
だから大人しく入門書をまず読めって。
人様に質問なんざそれからにしろよ。

お前さんのやってることは、九九も知らないのに連立方程式の解き方を教えろと言ってるのと同じだ。
九九のレベルからいちいち掲示板で質問するつもりか?
そんなんじゃどんなに幸運でも100年かかるわw
0193デフォルトの名無しさん2007/01/29(月) 18:39:22
ていうか、VBって無くなるみたいだからやらない方がいいんじゃないの?
0194デフォルトの名無しさん2007/01/29(月) 18:43:20
>>193
ソースは?
0195デフォルトの名無しさん2007/01/29(月) 18:52:28
Dim x(0)
ReDim x(100)
はVB6だとエラーになるが、VB.NETでは大丈夫というかIs Nothingを省きたいときの推奨の方法みたいだ。
ただ可変配列を使いたいときはコレクションの使用も考慮したほうがいい。
0196デフォルトの名無しさん2007/01/29(月) 18:58:56
>>194
公式情報ではなくて、以前C#のスレに書いてあった。
VBは無くなるからC#にしておけとの事だとか。
0197デフォルトの名無しさん2007/01/29(月) 18:59:45
kuma-
0198デフォルトの名無しさん2007/01/29(月) 19:58:35
>>196
ゲイツ様はC#をあきらめてVBはこれまで通りプッシュされると聞き及んでいますが、
あなたはこれを信用しますか?
0199デフォルトの名無しさん2007/01/29(月) 20:00:00
下らんそんなに馴れ合いたいのなら他所行きな
0200デフォルトの名無しさん2007/01/29(月) 20:14:27
誘導、ここで好きなだけやってくれ

【VB.NET】VS2005 選ぶならどっち?【C♯】
http://pc10.2ch.net/test/read.cgi/tech/1106538237/l50
02011832007/01/29(月) 21:10:59
>>188
>>Dim s() As String = Nothing
サンクス、うまくいきました。

>>189
配列のサイズでデーターの大きさを所得したいので。
If s IsNot Nothing Then
  ReDim Preserve s(s.Length)
Else
  ReDim s(0)
End If
こんなことを考えてました。

>>195
実際はジェネリックでやってます、それと疑問は別物で。

>>193
客の要望でどっちでも書いてます。
C丼でも大してかわりが有りません。
0202デフォルトの名無しさん2007/01/29(月) 21:23:04
201みたいなプログラマの書いたコードは怖くて使えんな。
なんだよその「動けばいいじゃん」っていう発想w

本当にそれでいいのか?
どんなショボい入門書にも書いてあることが理解できてないのに
0203デフォルトの名無しさん2007/01/29(月) 22:21:51
>>183
初期化はちゃんとした方がいい。
>>188 はちょっと乱暴だが…w
0204デフォルトの名無しさん2007/01/29(月) 22:23:49
それ以前に参照型って概念が理解できてないんでしょ
0205デフォルトの名無しさん2007/01/29(月) 22:24:45
>>190
C#だったらどーするの?
0206デフォルトの名無しさん2007/01/29(月) 22:32:09
だから「初期化しろ」って警告なんだろーが
0207デフォルトの名無しさん2007/01/29(月) 22:34:07
初期化するだろ普通は
0208デフォルトの名無しさん2007/01/29(月) 22:35:03
190も馬鹿だが>>205-206もな
初期化しろ?w
ちょっとニュアンス違うよ
0209デフォルトの名無しさん2007/01/29(月) 22:41:13
>>208
だからVB厨じゃなかったらあの警告にどう対処するのか教えてよ。
0210デフォルトの名無しさん2007/01/29(月) 22:43:56
>>208
日本語に不自由なのも大概にしとけよw

対処すべきだ、というニュアンスを匂わしてる奴を馬鹿だといってるんだけど
02112102007/01/29(月) 22:44:41
>>209の間違い
0212デフォルトの名無しさん2007/01/29(月) 22:47:18
ああなんだ190ってあいつか。
おめーがアンカーつけねえからわかんなかったじゃねえか。
0213デフォルトの名無しさん2007/01/29(月) 22:47:27
なにこの肥溜めスレ
0214デフォルトの名無しさん2007/01/29(月) 22:57:13
初期化しないでも警告だけでコンパイル通るの?
VB.netって。
そうなら>>190はそういうこと言ってるんじゃないのかな

0215デフォルトの名無しさん2007/01/29(月) 22:58:15
なんか祭ってるな。

>>212
お前の知り合いか?
0216デフォルトの名無しさん2007/01/29(月) 22:59:31
むしろいちいち初期化しないとコンパイル通らない言語って具体的になんだよw
0217デフォルトの名無しさん2007/01/29(月) 23:01:01
>>216
C#
0218デフォルトの名無しさん2007/01/29(月) 23:02:52
おいおいw
0219デフォルトの名無しさん2007/01/30(火) 00:17:17
>If s IsNot Nothing Then
>  ReDim Preserve s(s.Length)
>Else
>  ReDim s(0)
>End If
>こんなことを考えてました。

こりゃいったいどういうプログラムだ。
0220デフォルトの名無しさん2007/01/30(火) 00:19:56
C#は初期化しないと通らんぞ。
正確にはどこでも初期化せずに、いきなり参照すれば、だが。
0221デフォルトの名無しさん2007/01/30(火) 00:28:11
>>220
もういい馬鹿は糞して寝てろw
0222デフォルトの名無しさん2007/01/30(火) 00:34:33
フィールドなら通るから勘違いしてんのか?
0223デフォルトの名無しさん2007/01/30(火) 01:23:07
ローカル変数は初期化しないで参照することはできんな。
02241832007/01/30(火) 08:11:30
>>219
あるデーターを採取して配列に入れる、入れる前に
配列の個数を1つ増やす、値の代入は本質問と
無関係なため省略してある。
蛇足だが、その後は、プログラム終了時は、
配列はシリアル化してXMLファイルに
書き込み、次の起動時に配列に読み込む。
データーの数又データーの有無は、配列の要素数で
判断する。

>>202
何が書いてあるのだ。
あなたのコードを見せていただけますか。

>>203
>>201が初期化のコードだと言うことがわからんかな。
0225デフォルトの名無しさん2007/01/30(火) 08:15:38
可変長なコレクションに配列は無いわ
02262002007/01/30(火) 08:26:08
>>224
馬鹿にして悪いけどしょうがないよ、あんた本当に基本がわかってないし、
自分が基本がわかってないっていう自覚すらないから。

例えば値型と参照型の区別、なんていう基礎の基礎からしてわかってないでしょ。
.NETにおける配列の意味もわかってない。

それだけでなくセンスもない。
理解できないだろうけど>>201みたいなコードってありえんから。
0227デフォルトの名無しさん2007/01/30(火) 10:21:11
配列の個数を1増やす
や め て く れ
何故かVB6時代によくみたコードだな。
だがVB6でもこれはやめてほしい。
0228デフォルトの名無しさん2007/01/30(火) 10:25:39
で、要素数-1がデータ数かよ。
要素0もしくは最後か?ともかく余った要素には何が入ってんだ?
0229デフォルトの名無しさん2007/01/30(火) 10:29:30
初歩的な質問で申し訳ないのですが、画面のリストボックスに
スクロールが必要でない時も最初から縦スクロールバーを表示させるにはどうしたら良いでしょうか?
スクロールが必要な際は表示されるのですが、そうでない時はスクロールバー自体が消えてしまいます。
0230デフォルトの名無しさん2007/01/30(火) 10:32:37
間違えました。
ListBoxではなく、ListViewでした。
0231デフォルトの名無しさん2007/01/30(火) 12:27:13
だから一晩かかってるのに何故 List(of xxx)とか ArrayListにしないの?
シリアル化だって勝手にやってくれるし。
02321832007/01/30(火) 12:53:29
>>231
201をよく嫁
実際はListジェネリッククラスを使って、
インデクサで処理してる。

>>226
おまえが1番馬鹿なようだな。

いやもっと馬鹿が居た。
>>228
02331882007/01/30(火) 13:05:42
おいらのレスでずいぶん盛り上がりましたねw
0234デフォルトの名無しさん2007/01/30(火) 13:42:48
>>232
VBの配列の指定数は要素数じゃないだろってだけの話だろう?
馬鹿馬鹿ばっかり言ってないでなぜ馬鹿なのか分かるように言ってくれよ
0235デフォルトの名無しさん2007/01/30(火) 15:35:32
どなたか>>229-230に回答を…。
ググってみたら同じような質問があったのですが、それにも回答がついてませんでした。
0236デフォルトの名無しさん2007/01/30(火) 15:46:37
ArrayListって要素を追加した順番に保存されますか?
またfor eachで取り出す場合はその順番は保証されていますか?
0237デフォルトの名無しさん2007/01/30(火) 15:50:36
>>235
適当に空行足しておけばいいだろ。
0238デフォルトの名無しさん2007/01/30(火) 16:08:05
>>236
そらそうだ
0239デフォルトの名無しさん2007/01/30(火) 16:11:25
>>236
順番に保存する他にどんな保存方法があるんだ?
For Eachは要素を列挙する関数なんで、順番は保証されない。
とは言ったものの実際は順番に出てくるが。
正式にはインデクサを使え。
0240デフォルトの名無しさん2007/01/30(火) 16:24:18
やっぱりfor eachは多用しないように気をつけようっと。
0241デフォルトの名無しさん2007/01/30(火) 17:00:59
>>239
嘘つけw
0242デフォルトの名無しさん2007/01/30(火) 17:33:39
>>237
通常IE等でスクロールがない画面で表示されるようなグレイアウトの状態でスクロールバーを表示したいので
改行を足すのはちょっと目的と変わってしまいます。
でもお答え頂きありがとうございます。

引き続きどなたかわかる方、回答お待ちしています。
0243デフォルトの名無しさん2007/01/30(火) 17:34:05
反復処理の順序 For Each...Next ループを実行すると、コレクションの反復処理の順序は
GetEnumerator メソッドが返す列挙子オブジェクトの制御下に置かれます。反復処理の順
序は、Visual Basic ではなく、列挙子オブジェクトの MoveNext メソッドによって決まります。
したがって、コレクションのどの要素が最初に element に返されるかや、特定の要素の後
にどの要素が返されるかを予測することはできません。

特定の順序でコレクションを反復処理する必要がある場合は、そのコレクションによって公
開される列挙子オブジェクトの特性を把握していない限り、For Each...Next ループが適切な
選択肢とは言えません。For...Next ループや Do...Loop ループなど、別のループ構造を使
用した方が、信頼できる結果が得られます。

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_vbalr/html/ebce3120-95c3-42b1-b70b-fa7da40c75e2.htm
0244デフォルトの名無しさん2007/01/30(火) 17:37:55
Array"List"のListってのは何を意味してるか考えろよ。
列挙子オブジェクトの特性が把握できてるんだよ。w この場合。
0245デフォルトの名無しさん2007/01/30(火) 17:41:43
おぉ!ということはfor eachでも問題ないんですね。
かっこいーからfor eachのほうを使うことにします。
0246デフォルトの名無しさん2007/01/30(火) 18:13:46
>>242
なんの為か知らんがどうして表示したかったら、
ハンドルにAPIのShowScrollBarを投げろ。
0247デフォルトの名無しさん2007/01/30(火) 18:42:22
>>244
それって確証ある?
つまり明文化された仕様として保障されてるか?
俺は怪しいと思うけどどうなんだろう。

>>239の言うように、Enumeratorは(クライアントのデータ構造が仮にリストでも)
リストを手繰っていくような動作を実装することは義務付けられてないでしょ。

自分でEnumeratorみたいの実装すること考えたって、パフォーマンス優先するなら
リストを手繰るような実装は俺ならしないけど。
0248デフォルトの名無しさん2007/01/30(火) 18:57:18
どんな実装するってのか聞いてみたい。
0249デフォルトの名無しさん2007/01/30(火) 19:03:40
例えばリストが、常に上の方に詰められる自己参照構造体配列(の配列)で実装されてたら、
Enumeratorは構造体配列を上からシーケンシャルに吐き出せば済むでしょ。
0250デフォルトの名無しさん2007/01/30(火) 19:28:50
んーなんだそういう話か…
んー
なんていうかさ、自然に考えられる実装ってあるじゃん。
ある意味特殊な構造の実装になってる場合なんかは、
何を重視するかで実装は変わってくるが、
そういう場合は明確にドキュメントするよね?

で内部がただの配列であり、配列と同様に扱えると明記されてる
ArrayListで、予想外の順序で列挙される実装なんて有り得るか?
逆にそういう実装なら絶対に明記されてるだろ。

で保証はないって話は理解出来なくもないんだが、
現実はもっと怪しい仕様??なんてものがいっぱいあって、
そういうことと比べれば実質十分信用していいレベル。
まあ、絶対に明記されてる仕様にしか、一ヶ所たりとも依存しないってんなら
好きにすればいいけど
0251デフォルトの名無しさん2007/01/30(火) 19:30:44
>>247
仕様はないでしょうな

現在存在するすべてのArrayListの実装がリスト順に返しているという事実と、
今後現れる実装が互換性を維持してくれるだろうという希望に頼るしかなかろう
0252デフォルトの名無しさん2007/01/30(火) 20:30:49
>>250
わかんないお人だなあ。
だからさあ、リスト構造をしているのは、
換言すればリストの「ふり」をするのはListなりArrayListなのであって
Enumeratorじゃないんだよ。
■ このスレッドは過去ログ倉庫に格納されています