VB.NET質問スレ(Part31)at TECH
VB.NET質問スレ(Part31) - 暇つぶし2ch1:デフォルトの名無しさん
09/08/22 17:44:56
前スレ

VB.NET質問スレ(Part30)
スレリンク(tech板)l50

テンプレは>>2

2:デフォルトの名無しさん
09/08/22 17:46:03
MSDN
URLリンク(msdn.microsoft.com)
どぼん!のVB道のトップページとTipsページ
URLリンク(dobon.net)
URLリンク(dobon.net)
Insider.NET
URLリンク(www.atmarkit.co.jp)
宇宙仮面の C# プログラミング
URLリンク(uchukamen.com)
.NET TIPS
URLリンク(www.atmarkit.co.jp)
緑のバイク ★ 初めてのC# プログラム全般
URLリンク(homepage3.nifty.com)
VB.NETとC#でデザインパターン
URLリンク(hccweb1.bai.ne.jp)
匣の向こう側
URLリンク(www.ne.jp)
WisdomSoft
URLリンク(wisdom.sakura.ne.jp)
じゃんぬねっと
URLリンク(jeanne.wankuma.com)
どっとねっとふぁん - C# Tips And Samples -
URLリンク(homepage3.nifty.com)
URLリンク(dotnetfan.org)
C#プログラミングTips
URLリンク(www.atmarkit.co.jp)


3:デフォルトの名無しさん
09/08/22 17:46:43
CodeProject
URLリンク(www.codeproject.com)
the GotDotNet Home Page
URLリンク(www.gotdotnet.com)
KEN's .NET
URLリンク(www5b.biglobe.ne.jp)
Cetus Links: 19,498 Links on Objects and Components / .NET
URLリンク(www.cetus-links.org)
HIRO's.NET
URLリンク(vbdotnet.fc2web.com)
@IT:特集 .NET開発者のためのオンライン・リソース・ガイド
URLリンク(www.atmarkit.co.jp)
.NETでいきまっしょい!
URLリンク(santamartadotnet.hp.infoseek.co.jp)
これがほしかった!厳選サンプルツール集
URLリンク(anetm.com)
ぬーやんのdotNET講座
URLリンク(www.geocities.jp)
PINVOKE.NET
URLリンク(www.pinvoke.net)
WinAPI Database for VB Programmer
URLリンク(www.winapi-database.com)

4:デフォルトの名無しさん
09/08/22 17:47:37
Windows Api programming in C# , VB.NET, and VB6. Examples of P/Invoke and DllImport with Source code
URLリンク(custom.programming-in.net)
CodeZine
URLリンク(codezine.jp)
ConvertCSharp2VB
URLリンク(www.kamalpatel.net)
@IT:.NET Tools
URLリンク(www.atmarkit.co.jp)
SharpLibrary Redirector
URLリンク(www.sharplibrary.com)
MSDN アカデミック アライアンス 技術資料
URLリンク(www.microsoft.com)
「300 秒でズバリ !!」&「10 行でズバリ !!」シリーズ
(VS2005) URLリンク(www.microsoft.com)
(VS.NET 2003) URLリンク(www.microsoft.com)
PAPA'n VB
URLリンク(papanvb.i-love-vb.net)
(旧コンテンツ) URLリンク(www.mitene.or.jp)
VB レスキュー花ちゃん
URLリンク(www.bcap.co.jp)
VB中学校
URLリンク(homepage1.nifty.com)
初心者から中級者のためのVB
URLリンク(www7b.biglobe.ne.jp)

テンプレここまで

5:デフォルトの名無しさん
09/08/22 19:38:31
乙と言わざるを得ない

6:デフォルトの名無しさん
09/08/22 21:02:00
乙。

7:デフォルトの名無しさん
09/08/22 22:44:39
前スレ>>997

For I = 1 To 10
PictureBox@.Image = ???
Next

というコードで@の部分にfor~nextの I を入れたいのですがどうすれば入れられるでしょうか

おねがいします

8:デフォルトの名無しさん
09/08/22 22:50:07
またこれネタか

9:デフォルトの名無しさん
09/08/22 23:26:15
BindingFlags指定とか無視しているけど、大体こんな感じ?
DirectCast(Me.GetType().GetField("PictureBox" & CStr(I)).GetValue(Me), PictureBox).Image = ???

10:デフォルトの名無しさん
09/08/22 23:33:23
アホに変なこと吹き込むなよ・・・

11:デフォルトの名無しさん
09/08/22 23:33:41
テキストボックスに表示してある下のような16進数なのですが

01-02-03-04-05-1A-1B-1C-1D-1E-1F

これをバイト配列に入れたいのですがどうしたら良いでしょうか。

Dim b() As Byte
b = Split(TextBox1.Text, "-")

これだとStringはByteから派生していない為配列に変換できないというエラーになってしまいます。
お願いいたします。

12:7
09/08/22 23:41:23
>>9 ありがとうございます。そのコードを使って作ってみます。

13:デフォルトの名無しさん
09/08/23 00:09:10
>>11
いったん String 型の配列にとって、ループで Byte に変換しながら突っ込んでいけばいいじゃん。

14:デフォルトの名無しさん
09/08/23 00:12:37
>>11
CByte(Val("&H" & str)) 'VB的な書き方
Convert.ToByte(str, 8) '.NET的な書き方
お好きな方をどうぞ。

一行に押し込めるならこんな感じか。
Dim b = TextBox1.Text.Split("-"c).Select(Function(arg) Convert.ToByte(arg, 8)).ToArray()

15:14
09/08/23 00:27:51
よく見たら、Array.ConvertAllの方が良かったかも。まあいいや。

16:デフォルトの名無しさん
09/08/23 00:41:14
>>13-15
両方の方法を試してみたいと思います。
どうもありがとうございます。

17:14
09/08/23 01:22:09
何で8進数やねん > 俺
すまないが、Convert.ToByte(str, 8)の8は16に直しておいてくれ。

18:デフォルトの名無しさん
09/08/23 09:19:49
そういうもんは BitConverter.GetBytes で一発変換できて欲しいけどね。
ToStringの逆も面倒見ろよ。
CByteのValっていらなくない。

19:デフォルトの名無しさん
09/08/23 10:23:21
試してみたら、確かにVal要らないわ。
だけどドキュメントにはその明確な記述が見つからない……
定数宣言の際に使える表記である以上、
VB関連の関数では当然扱える、と解釈すべきなんだろうか。

20:デフォルトの名無しさん
09/08/23 10:58:49
>>19
CByteの実体は、
Microsoft.VisualBasic.CompilerServicesのConversions.ToByte メソッド で
これにはObjectとStringのオーバーロードがある

IDEでは、CByte(Object As Expression) As Byte とポップアップが出るけど
Expression型って何やねんw

21:デフォルトの名無しさん
09/08/23 13:08:38
誰も言わないからあえて言うけど、
VB厨呼ばわりされたくなかったら、CByteは論外として
Converter使うより型(この話の場合はByte)のParseメソッドを
使ったほうがいいと思うよ。

>>18
BitConverterの存在理由を考えればそれはないんじゃないの。

22:デフォルトの名無しさん
09/08/23 13:29:45
>>21
本物のVBプログラマは ToString() は使わないで CStr() を使う。
何故ならばVB IDEで色が変わるからだ。
それのほうがソースが見やすい。


23:デフォルトの名無しさん
09/08/23 13:36:43
>>21
CByte("&H" & str)
Convert.ToByte(str, 16)
Byte.Parse(str)

VBのコーディングとして下になるほど str(16進文字) をバイト型に
変換しているのが直感的に分かりにくくなると思うがどうかな?

24:デフォルトの名無しさん
09/08/23 13:38:47
好きなのを使えばいい。

25:デフォルトの名無しさん
09/08/23 13:39:31
その通り。でも1つのソースの中で混ぜるなよw

26:デフォルトの名無しさん
09/08/23 13:51:14
>>14
>Dim b = TextBox1.Text.Split("-"c).Select(Function(arg) Convert.ToByte(arg, 8)).ToArray()

目からウロコ。
1バイトずつList(Of Byte)に入れてからToArray()してたよ orz

27:デフォルトの名無しさん
09/08/23 13:54:13
>>23
俺には理解できな発想だ。

普通に考えれば、Byte.Parseは直感的どころか明示的(ズバリそのまま)なわけで、
これ以上の分かりやすさはないと思うが。

28:デフォルトの名無しさん
09/08/23 13:59:09
>>26
そんなネタみたいなコードにひょっとして本気で関心してるの?
悔い改めた方がいいよそういう発想。

VBerに限らず、ダメなプログラマっていうのは行数が短いことに価値がある、
という妄信に取り付かれている。

で、数ヵ月後自分で書いたコードが自分で理解できなくて困ってやがるw

プログラムっていうのは、コンパクトさよりも可読性をより優先しなくちゃダメ。

29:デフォルトの名無しさん
09/08/23 14:04:40
>>28
こういうトリッキーなのもあるのだと関心していただけですよ~
実際のコーディングに使ったらかなり鬼畜です。

30:デフォルトの名無しさん
09/08/23 14:07:50
>>27
CByte("&H" & str) なんて.NET的にはお馬鹿なコーディングだけど
VB厨には分かり易いんじゃないですか?

31:デフォルトの名無しさん
09/08/23 14:09:44
>>30
どうもそうらしいね。
俺には理解できんけど。

32:デフォルトの名無しさん
09/08/23 14:18:11
ついつい
○ = ★ : ● = ◎ : ▼ = "あばばばば"
とか
○ = × : ● = □ : ▼ = "くぁwせdrftgyふじこlp;"
みたいにして一行に12,30文字ぐらい普通に詰めてしまう俺でごめんなさい

短めな所で改行された方が縦に長くなって見づらいんです

33:デフォルトの名無しさん
09/08/23 14:23:08
>>31
Java屋さんですか?
.NET(特にVB.Net)はJavaと違って「ぬるい」ところがあるのが好きですw

VB.Netだとフォームのコントロールの規定値がFriendだったりします。
よそから丸見え~w (C#.NetだとPrivate)

あまり堅苦しいこと言っちゃぁVBなんてつつけません。

34:デフォルトの名無しさん
09/08/23 14:31:41
>>32
If ○ = ● Then ◎ = ★ : Dim □ = ▲ : △ = "うあああ"

くらいやってください。

35:デフォルトの名無しさん
09/08/23 14:32:18
>>33
言語は関係ないよ。
何も教条主義的なことを言ってるわけじゃない。

VB6から.NETに移行した人でも「CByte("&H" & str) 」式の書き方をする人と
しない人がいる。

前者の人は、要するにあたらしい事を覚えることを拒否してるだけ。
言い換えれば、例えばちゃんと.NET Frameworkについて少しは勉強して
Byte.Paraseメソッドを知ってる人であえてCByteを使う人はまずいない。

36:デフォルトの名無しさん
09/08/23 14:41:23
>>35
>Byte.Paraseメソッドを知ってる人であえてCByteを使う人はまずいない。

知っていてあえてCByteを使う人だって居ますよ。
新しいことを覚える事を拒否すると .NET Frameworkなんてものは使えません。
そういう人たちはVB6.0に留まってますし未だVB6.0のゴミのような保守の仕事もある。

37:デフォルトの名無しさん
09/08/23 14:48:04
断言するけどいないよw

いやいるかもしれんが、そういう人は(そういうメソッドが存在することを)「知っている」
だけに過ぎず、ちゃんと理解してはいないんだろ。

38:デフォルトの名無しさん
09/08/23 14:48:19
そんなん、使い分ければいいだけだろがよ。

VB6 からの移行モノとかで、周りが Choge() ばっかり使ってるなら、
CByte() でもなんもおかしくないし。

知らないから使えない、以外にも、知ってるけどわざと使わない、って選択肢もあるんだよ。

39:デフォルトの名無しさん
09/08/23 15:01:23
>CByte("&H" & str)
VB厨てきな書き方だけど &H があるので str が16進数だと言うのはすぐにわかる。

>Convert.ToByte(str, 16)
これもToByteで16があるのでstrは16進数かなと思う

>Byte.Parse(str)

Byte.Parse メソッド (String)
数値の文字列形式を、それと等価の Byte に変換します。
パラメータ
s: 変換する数値を格納する文字列。文字列は、Integer スタイルを使用して解釈されます。
戻り値: s に指定されている数値と等価の Byte 値。

Integer スタイルって何やねん? ってことになってInteger スタイルを調べると
NumberStyles 列挙体にたどりつくと

数値基本型クラスの Parse メソッドに渡される数値文字列引数で使用できるスタイルを決定します。
この列挙体には、メンバ値のビットごとの組み合わせを可能にする FlagsAttribute 属性が含まれています。

ますます何やねん?でいまだにstrが16進数なのかどうかわからず。

こんなことになるのであえて CByte("&H" & str) を使うと。。


40:デフォルトの名無しさん
09/08/23 15:15:05
その善し悪しは別にしても、自分が知らなかったやり方に関心(感心?)するのは普通の感覚じゃない。
いけない発想だと、無理に押さえ込む必要はないと思うけど。

41:デフォルトの名無しさん
09/08/23 15:17:24
日本語でOK

42:デフォルトの名無しさん
09/08/23 15:20:04
ごめんなさい、ひらがなでかけばよかったかな?

43:デフォルトの名無しさん
09/08/23 15:23:05
>34
If ~ Then の後に代入式三つは横スクロール必要になる事が多そうだなー
i = 1 : s = "a" : c = "."c
レベルの短さでコメント不要そうな内容なら考えるかも知れん

44:デフォルトの名無しさん
09/08/23 15:25:43
IIfもあるよ

45:デフォルトの名無しさん
09/08/23 15:25:56
- 感覚じゃない。(否定)
- 感覚じゃない?(肯定しつつ同意を求める)

この使い分けができない人が増えたよね。


46:デフォルトの名無しさん
09/08/23 15:30:42
>>43
マルチステートメントはCase文でしか使わないな~

Select Case hoge
 Case 1 : a = 2
 Case 2 : a = 3
End Select

47:デフォルトの名無しさん
09/08/23 15:32:17
>>44
それはoption strict onだとcastしないといけないからキライ

48:デフォルトの名無しさん
09/08/23 15:35:14
>>40
???だらけのソースだけど他のをみてもそうなので仕方なく
それに合わせる小心者なオレがいる。

49:デフォルトの名無しさん
09/08/23 15:37:57
本物のプログラマはVBなど使わない。一般に、12歳以上になって VB を使うプログラマなどいない。

50:デフォルトの名無しさん
09/08/23 15:43:13
>>45
なるほど、関心(感心?)した。

51:デフォルトの名無しさん
09/08/23 15:45:09
腹へったじゃない。

52:デフォルトの名無しさん
09/08/23 15:48:04
↑は否定、同意? 日本語って難しいな。

53:デフォルトの名無しさん
09/08/23 15:50:36
中国語(北京語)なんか語尾の抑揚で意味が変わるらしいけどね

54:デフォルトの名無しさん
09/08/23 15:54:49
否定や同意だけじゃないよ。

ヒント:
もぉ、おかけで仕事が増えちゃったじゃない。


55:デフォルトの名無しさん
09/08/23 16:07:05
>>49
働いたことないの?言語選ぶなよ

マジレスだぞ☆

56:デフォルトの名無しさん
09/08/23 16:17:01
C#で書いたものをVBのコードに変換すればいいじゃない

57:デフォルトの名無しさん
09/08/23 16:20:40
プログラマの意図通りに100%変換できるものなの?

58:デフォルトの名無しさん
09/08/23 20:43:17
>>39
誰も突っ込みを入れないので

Byte.Parse(str) は、10進数の変換で
Byte.Parse(str, Globalization.NumberStyles.AllowHexSpecifier) としないと16進数変換になりません。

ついでに速度も測ってみた (結構いいかげんな測定なのであまり信用できないが)

(1) Dictionary(Of String, Byte)
(2) Convert.ToByte(str, 16)
(3) Byte.Parse(str, Globalization.NumberStyles.AllowHexSpecifier)
(4) CByte("&h" & str)

(1)はジェネリックなハッシュテーブルに00~FFをセットしてテーブル引きする方法でこれが最速
(1)を基準にすると速度は

(1) 1.0
(2) 1.8
(3) 2.8
(4)20.0

CByte("&h" & str) が予想外に遅い。
文字連結の "&" が遅いのかと思って連結をやめてもたいして変わらない。


59:デフォルトの名無しさん
09/08/23 23:45:46
印刷ダイアログでファイルに出力をチェックして
***.prnファイルになったファイルを
VBでプリンタ(LPT1)に出力したいのですがどのようにしたら出来るでしょうか?

60:59
09/08/24 00:24:30
すみません。出力したいのはLPT1ではなくて
USBにつないだ通常使うプリンタに設定したプリンタです。




61:デフォルトの名無しさん
09/08/24 01:02:17
VBスレらしい質問でよいな~

62:デフォルトの名無しさん
09/08/24 02:08:28
>>58
マジか。CByteとかのChangeType系は
パフォーマンスが稼げるってMSDNに載ってたが、
一体、何と比較したんだろうなMS。

ParseがConvertより遅いのも意外だな。
Parseのが厳密に文字列表現を見るから、
速いかと思い込んでた。

63:デフォルトの名無しさん
09/08/24 03:12:58
>>58
CTypeのテストをする時に、
shareのエロ動画DLが始まったんだろ。


64:デフォルトの名無しさん
09/08/24 04:39:43
>>62,63
俺も信じられなかったんで検証してみた
たしかにCByte(str)はConvert.ToByte(str, 16) より10倍程度遅かった

Val(str)はConvert.ToByte(str, 16)より早かった
Valの戻りはDoubleらしいのでバイト型に(暗黙の変換で)代入した

そしてここで驚くべき結果
CByte(Val(str))はConvert.ToByte(str, 16)より速い
Val(str))より若干遅いだけ

Cxx関数のヘルプ見ると、インラインコンパイルされるのでパフォーマンスが向上するときもあります、とw
CByte(string)は遅いがCByte(Double)はかなり早い

CByteに文字列渡したときにいったいどんなコードにコンパイルされてるんだろうねぇ


65:デフォルトの名無しさん
09/08/24 06:11:07
Utils.IsHexOrOctValue() ってのが遅そうだな。


66:デフォルトの名無しさん
09/08/24 19:49:06
>>63
そういうもんにはDL専用のPCがあるw

>>64
Valなんて前世紀の遺物くらいに思っていたがやるもんだな~

>CByte(string)は遅いがCByte(Double)はかなり早い

それは、.NETのボックス化、アンボックス化が絡んでいると思う。
参照型と値型の相互変換が遅いってやつ。

67:デフォルトの名無しさん
09/08/24 20:00:25
何を訳のわかんないことをしたり顔で言ってるんだw
どう考えてもそんなもの無関係

68:デフォルトの名無しさん
09/08/24 20:05:42
>>64
CByte(Val(str))とVal(str)は同じコードが生成されているので速さの違いは測定誤差だと思う。

>>67
では何が関係しているのでしょう?


69:デフォルトの名無しさん
09/08/24 20:14:03
クリップボードからrichtextboxに貼り付けるとき、
gettext で 例えば aa の間に bを挿入したいんですが、
これやると aab になっちゃんです。 
対処法お願いします。

70:デフォルトの名無しさん
09/08/24 20:14:05
>>64
>CByteに文字列渡したときにいったいどんなコードにコンパイルされてるんだろうねぇ

CByte(str)   ⇒ Conversions.ToByte(str)
CByte(Val(str)) ⇒ CByte(Math.Round(Conversion.Val(str)))

全然違うものになってる w

71:デフォルトの名無しさん
09/08/24 20:31:24
>>14
皮肉にもVB厨な構文の勝利に終わったわけだなwww

72:デフォルトの名無しさん
09/08/24 20:34:54
>>65
それが速さの原因

73:デフォルトの名無しさん
09/08/24 23:00:14
>>47
VB9からIf演算子が追加されたよーC系の?:演算子と同等の記述ができるよー

74:デフォルトの名無しさん
09/08/25 23:11:34
>>67
>では何が関係しているのでしょう?

いくらなんでもボックス化は関係ないわ


75:デフォルトの名無しさん
09/08/25 23:21:01
>>74
なんで?

76:デフォルトの名無しさん
09/08/25 23:26:38
ボックス化って何なのさ。
厨なオレに分かるように説明してください。

77:デフォルトの名無しさん
09/08/25 23:27:48
タカ&トシの新しいネタです

78:デフォルトの名無しさん
09/08/26 00:05:11
>>76
LabelからTextBoxに値を入れること。
Label同士、TextBox同士の値の代入は速いが相互にやると遅い。
ComboBoxとTextBoxの間では速度低下はない。

79:デフォルトの名無しさん
09/08/26 00:13:04
Sub aaa(ByVal hoge as hogeClass)
とByValで渡しているのにhogeの中身が書き換えられるのは何故なんでしょう?
Sub aaa()の中でhogeが書き換えられなくするにはどうしたらいいの?

80:デフォルトの名無しさん
09/08/26 00:19:55
> とByValで渡しているのにhogeの中身が書き換えられるのは何故なんでしょう?
hogeClassが参照型だから

> Sub aaa()の中でhogeが書き換えられなくするにはどうしたらいいの?
ディープコピー作るとか構造体にするとかあるけど
まあ普通気にしないでいいよ

81:デフォルトの名無しさん
09/08/26 00:33:14
>>79
変数hogeの中に入っている「値」とは、hogeClassのインスタンスの
メモリ上の位置を表す「値」だから、とでも考えるよろし。

書き換えられたくないのなら、インスタンスのクローンを作ってそれを渡す、とか
ReadOnlyプロパティだけを並べたインターフェイスをhogeClassに実装させて
aaaはそのインターフェイスを引数に取るようにする、などの工夫が必要。

参照型と値型の違いとそれぞれの意味は、最初にちゃんと理解しとかないとマズいね。

82:デフォルトの名無しさん
09/08/26 00:48:07
>>81
>ReadOnlyプロパティだけを並べたインターフェイスをhogeClassに実装させて

元のメンバーをPrivateにして新しくPublic ReadOnlyのを作るわけですか?

83:デフォルトの名無しさん
09/08/26 00:50:40
横レスだけど何で.NETにはC++のconstな値渡しみたいなのは無いのだろうか。

84:デフォルトの名無しさん
09/08/26 03:20:32
constな値渡しって何?

85:デフォルトの名無しさん
09/08/26 07:05:39
>>84
URLリンク(www.s-cradle.com)


86:デフォルトの名無しさん
09/08/26 07:54:52
㌧クス
半分くらいわかった。

87:デフォルトの名無しさん
09/08/26 07:59:42
DataGridViewで行を下げて行くにはどうすればいいでしょうか?
ループを使いたいと思っています

for i = 0 to 10
DataGridView1.Rows(i).Cells(1).Value = 0
next
↑ではエラーが出てお手上げ状態です
お願いします

88:デフォルトの名無しさん
09/08/26 10:51:02
行を下げるっていうのは、下の行を表示させるということ?

89:デフォルトの名無しさん
09/08/26 14:37:21
どういうエラーが出てどうお手上げなんだよ
やりたい事をもっと正確に書けよ

90:デフォルトの名無しさん
09/08/26 14:41:41
全然意味わかんねーけど、多分行が11行もないんじゃないの

91:87
09/08/26 20:23:07
すいません詳しく書くと
別のDataGridView(DataGridView2とします)の行数をRowCountでiに行数を入れており
DataGridView2と同じ行数で内容は入っていないDataGridView1が出来ています
iが3だとするとDataGridView1のRows(0)からRows(2)までに0を入れたいと考えています

そこでループで行けるかと思い>>87のコードでやってみたところRowsの()の中は変数は使えないみたいでした
再度よろしくお願いします・・・

92:デフォルトの名無しさん
09/08/26 20:28:09
どうしてエラーの内容を隠匿しようとするんだろうね?

93:デフォルトの名無しさん
09/08/26 20:29:55
使えるから。

94:デフォルトの名無しさん
09/08/26 20:34:11
詳しいエラー内容

イミディエイト ウィンドウ
'System.ArgumentOutOfRangeException' の初回例外が mscorlib.dll で発生しました。

例外ヘルパ
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名: index
ArgumentOutOfRangeException

i = DataGridView2.RowCount
が問題でしょうか?

95:デフォルトの名無しさん
09/08/26 20:42:58
そんなコード書いてないじゃん。

>>90 の言うとおりだな。

96:デフォルトの名無しさん
09/08/26 20:44:07
こいつには教えなきゃならんことが多すぎて教える気もなくなるわ

97:87
09/08/26 20:45:06
すいませんでした。失礼します

98:デフォルトの名無しさん
09/08/26 22:56:44
String型は値型なのでしょうか参照型なのでしょうか?

99:デフォルトの名無しさん
09/08/26 22:59:36
URLリンク(msdn.microsoft.com)
VB だと Class か Structure かで分かる

100:デフォルトの名無しさん
09/08/26 23:06:41
>>99
参照型ですね。
でも他の参照型と違う動きをしますよね。(謎

101:デフォルトの名無しさん
09/08/26 23:07:03
>>87
とりあえず動いた。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  '列の設定
  Me.DataGridView1.ColumnCount = 1
  Me.DataGridView2.ColumnCount = 1

  'グリッド1に3行追加
  Me.DataGridView1.Rows.Add("hoge1")
  Me.DataGridView1.Rows.Add("hoge2")
  Me.DataGridView1.Rows.Add("hoge3")

  'グリッド2にグリッド1の行数を追加
  Dim Count As Integer = Me.DataGridView1.Rows.Count
  Me.DataGridView2.Rows.Add(Count)

  'グリッド2に値を代入
  For i As Integer = 0 To Count - 1
   Me.DataGridView2.Rows(i).Cells(0).Value = "hoge" & (i + 1).ToString
  Next

End Sub

102:デフォルトの名無しさん
09/08/26 23:45:19
>>100
不変クラスとかimutable classで調べてみると分かる。

103:デフォルトの名無しさん
09/08/27 00:07:15
>>102
ぐぐったらJavaのばかり出てきました。
上のほうで出てきてるシャローコピーとかディープコピーとかもJavaですね。

104:デフォルトの名無しさん
09/08/27 00:11:22
どれも概念の話であって言語は関係ないな

105:デフォルトの名無しさん
09/08/27 00:19:38
そういう概念ってVBだけやってると永久に辿り着けそうに無いな。。

106:デフォルトの名無しさん
09/08/27 00:23:18
VB的にはStringは基本型のひとつという位置づけ。
でも不変参照型というのが分かってないと
なんでStringBuilderが必要なのか理解できない。

107:デフォルトの名無しさん
09/08/27 00:40:22
>>106
それは参照型のString型を値型と同等に扱える仕組みと言うことで理解してOK?

108:デフォルトの名無しさん
09/08/27 00:43:20
よくない

109:デフォルトの名無しさん
09/08/27 00:45:30
>>108
Orz

110:デフォルトの名無しさん
09/08/27 00:50:42
VB.Netで不変参照型なのはString型だけなの?

111:デフォルトの名無しさん
09/08/27 00:58:55
そういう風に設計すればいくらでも
標準ライブラリでぱっと思いつくのはSystem.Drawing.Font

112:デフォルトの名無しさん
09/08/27 07:37:08
>>111
有難うございます。
System.Drawing.Font 見たけど不変参照型みたいな事は書いてないですね。
不変参照型って自分でも作れるんですかね。。

教えてくんになってしまっているので自分で勉強して出直してきます orz

113:デフォルトの名無しさん
09/08/27 10:34:53
クラスと構造体を別々に作るのと、クラスの中に構造体を作るのとでは、
どういう違いがあるのでしょうか
ストラクチャ名だけでインスタンスを作るとグローバルな感じで、
入れ子にすると[クラス名].[ストラクチャ名]でインスタンスを作れるから、
どの目的のための構造体なのかがわかりやすい、というだけ?

あと、構造体のインスタンスは
  Dim Hote As [ストラクチャ名]
これで暗黙的にNewされてインスタンスが作られている、
という理解で間違いないですか?

114:113
09/08/27 10:36:49
あ、それと下の質問がその通りであれば、
  Dim Hoge As [ストラクチャ名]
  Dim Hoge As [ストラクチャ名] = New [ストラクチャ名]
この2つは同義で、どっちを使ってもおkということですか?

115:デフォルトの名無しさん
09/08/27 11:01:04
ストラクチャ名……なんだろうこの違和感

ネストされた型の大きなメリットはアクセス制御をPrivateやProtectedにできること
内部の型から外部の型のPrivateメンバにアクセスできること

> 入れ子にすると[クラス名].[ストラクチャ名]でインスタンスを作れるから、
> どの目的のための構造体なのかがわかりやすい
名前空間と型名だけで表現できてなかったらすでに命名がまずい

> この2つは同義で、どっちを使ってもおkということですか?
IL レベルで違いはあるがまあ同じと考えて良い

116:113
09/08/27 12:44:11
>>115
ありがとうございます、よくわかりました
違和感のところはすみませんでした

117:デフォルトの名無しさん
09/08/27 18:19:23
>>101までの流れを読んでて思ったけど、
真面目に回答してた奴は、
質問者が拗ねてしまって、
危険な流れとばかりにスルー。
煽った奴は、相手がスレからつまはじき者にされて
自分の煽りの影響力にご満悦。

>>101のようにスレのルールに忠実な結果報告だけが
残る。2chって無責任な場所ですよね。
10年前から知ってましたが。


118:デフォルトの名無しさん
09/08/27 18:36:43
今更痔ろう

119:デフォルトの名無しさん
09/08/27 20:11:54
10年前にこっ酷い目に会って、今漸く帰って来たのですね。わかります。
でないと、こんな青臭いレスなんてできないよな。

120:デフォルトの名無しさん
09/08/27 20:57:56
わかります(笑)
こういうのに限って「スイーツ(笑)」とかやってたりするんだよねw

121:デフォルトの名無しさん
09/08/28 02:38:25
だよねw

122:デフォルトの名無しさん
09/08/28 03:48:15
>>119
「青臭い」って・・・実際、他人に使ってみたことある?
きっと、言われた方は、喜ぶと思うよ。


123:デフォルトの名無しさん
09/08/28 07:57:52
イカ臭い

124:デフォルトの名無しさん
09/08/28 08:02:29
きっと、言われた方は、喜ぶと思うよ。

125:デフォルトの名無しさん
09/08/28 10:51:05
WindowsVista64Bit VS2008で開発してます。
ある画像を表示する為に、APIのStretchDIBitsを使用しています。
ピクチャーボックスのPaintイベントで画像を描画する為、
引数のe.GraphicsからHDCを取得して使っています。
このHDCですが、なぜかLabelなどに一度値を出力しないと、画像が描画されないんですが、
似たような経験された方はいらっしゃらないでしょうか?

126:デフォルトの名無しさん
09/08/28 19:26:52
>>125
画像のパスを設定するとか
外部の設定によって描画内容(描画ロジック)に変更ある?
変更あるなら変更のタイミングで描画命令を発行
変更ないならロジック晒すべし


127:デフォルトの名無しさん
09/08/28 19:27:02
>>125
初め表示される時には、画像が無かったってオチかなあ。
XPと違ってVista以降はあまり再描画が発生しないし。
偶々そのLabelの変更がきっかけになっている、とか。

ウィンドウ表示後に画像が用意されるのなら、
ピクチャーボックスを明示的にInvalidateなりしないと。

128:デフォルトの名無しさん
09/08/29 05:45:41
俺125じゃないけど、基本的なこと聞いていい?

Paintイベントのヘルプみると
>コントロールが再描画されると発生します。
ってあるんだが、これは

コントロールが再線画されようとしたら発生
コントロールの再線画が完了したら発生

のどっち?
日本語を素直にとらえると後者なんだが、
例とかみてると前者じゃないとおかしな動作しそうだし

129:デフォルトの名無しさん
09/08/29 11:17:18
コントロールで質問です
コマンドボタンのような見た目で、押した時に凹んだままになり、
もう一度押すと元に戻るボタンをなんというのでしょうか?

130:デフォルトの名無しさん
09/08/29 11:23:17
>>129
トグルボタンかな

131:デフォルトの名無しさん
09/08/29 11:24:01
旧VBを知らないからコマンドボタンというのがなんなのかは知らんが、
トグルできるButton風のコントロールはCheckBoxで扱う

132:129
09/08/29 11:25:31
>>130-131
もうコマンドボタンっていわないんですね、失礼しました
ありがとうございました

133:デフォルトの名無しさん
09/08/29 12:50:01
>>128
コントロールが<コントロール自身によって>再描画されると

134:デフォルトの名無しさん
09/08/29 15:17:36
>>133
コントロールの描画は、OnPaintメソッドで行われるらしいので、
このメソッドの中でPaintイベントを発生させてるってこと?

そうなると、描画が完了してからイベント起きるか、完了まえにイベント起きるかは
そのコントロールの実装次第、ってことになるのかな?

135:デフォルトの名無しさん
09/08/29 16:08:57
だから、省略してある言葉を補った文章のとおりでしょ

『コントロールが<コントロール自身によって>再描画されると』

これを描画前に呼ばれる可能性もありうると読み取るようなら、
日本語のセンスがちょっとヤバいんじゃないかと思うけど。

136:デフォルトの名無しさん
09/08/30 01:35:35
Paintイベントを発生させるControl.OnPaintをいつ呼ぶかは、実装に拠るからなあ。
Control.OnPaintのサンプルだと頭で呼び出しているけど。

137:デフォルトの名無しさん
09/08/30 02:09:36
だから、MSDNライブラリっていうのはチミやオレが実装したコードについて、
ではなく、MSの中の人が実装したコードについて「こうなってます」っていう
解説書だから、そういう物言いはナンセンス以外の何物でもない。
当たり前のことだと思うんだけどね。

138:名無しさん@そうだ選挙に行こう
09/08/30 04:00:29
Paintイベントは、
コントロールが再描画された後、追加の描画をユーザーに提供する目的で発生します。
一部のコントロールではこのイベントが発生しないこともあります。

こんな感じ?

139:名無しさん@そうだ選挙に行こう
09/08/30 04:26:41
そもそもMSDNで日本語を正確に読み取ろうとしても意味はない。
正確に読み取りたければ英語のを読め。


140:デフォルトの名無しさん
09/08/30 21:16:21
>>128
Paintイベントはコントロールが再描画されようとしたときに発生するから。
なので、コントロール自身の再描画処理は、MyBase.Paint()で行う。
このMyBase.paint()を呼ばなければ、コントロール自身の再描画は行われない。

141:デフォルトの名無しさん
09/08/30 21:31:09
全然違う
コントロールの描画処理はOnPaintというメソッドの中に書かれている。
描画が終わった後,最後に基底クラス(Controlクラス)のOnPaintを呼ぶ。(呼ばなくてもいい)
ControlクラスのOnPaintメソッドの中にはPaintイベントを発生させる処理だけが書かれており,
Paintイベントが発生する。
だから,派生クラスを作ってOnPaintをオーバーライドしてその中に描画処理を書けば
基底クラスの描画処理は行われない。

142:140
09/08/30 22:17:53
すまん、MyBase.OnPaint()の間違い。
あと、一番最後の「コントロール自身の再描画は行われない。」は「基底クラスの描画処理が行われない。」
の間違い。
いいたかったことは、>>141と同じこと。

143:デフォルトの名無しさん
09/08/31 04:22:17
>>141
>描画が終わった後,最後に基底クラス(Controlクラス)のOnPaintを呼ぶ
これなんだが、MSDNの例だと最初に呼んでる
最後に呼ぶと線画完了後にイベント起きることになる

俺がMSDNで調べた限りでは、
まず、最初にMyBase.OnPaint(e)を呼び出し、Paintイベントを発行させて、
その引数eをもとにレンダリングするのが正しい作法じゃないかな

したがって、
Paintイベントは再描画される前に発生し、そのイベントの引数により描画内容を変更することができる
が正解だと思う

実際すべてのコントロールがそのように実装されてるかどうかはしらね


144:デフォルトの名無しさん
09/08/31 09:42:22
実際にはすべてのコントロールが描画後にMyBase.OnPaintを呼んでる
通例,On○○をオーバーライドするときには基底クラスのOn○○を先に呼ぶことが多いんだけど
OnPaintの場合は後で呼ばないとPaintイベントで描画した内容が見えなくなるだろ

145:144
09/08/31 10:03:26
捕捉
コントロールがControlクラスから直接派生している場合は,OnPaintには何の描画処理も書かれておらず,
ただPaintイベントを発生させる処理だけが書かれているので,後で呼ぶことができる。
こうしておけば,コントロールのユーザがPaintイベントを使うことによって描画を上書きできる。
でも,Buttonなど既にOnPaintに描画処理が書かれているコントロールから派生する場合は話が違ってくる。
そのようなサンプルで先にOnPaintを呼んでるのは,まず基底クラスに描画させてその上に描画するため。
その場合,その自作コントロールのPaintイベントは描画が行われる前に呼び出されてしまうので使えなくなる。
(そのコントロールのユーザがPaintイベントで描画してもOnPaintでの描画に上書きされてしまうから)

146:デフォルトの名無しさん
09/08/31 19:58:56
言っちゃ悪いけど、そんなこと普通MSDNの記述を読んでちょっと考えればわかる
当たり前のことじゃないか?

少なくとも俺はそうだったが・・・

147:デフォルトの名無しさん
09/08/31 22:20:05
>>146
Paintイベントのヘルプだけ見てもここまでわからないだろ
まあ、関連しそうなところ全部読んで理解すればわかるんだろうが

MSDN全部読んで調べろっていうなら、質問スレの質問ほとんどがそれで済む
すくなくともここは初心者お断りじゃないだろう

148:デフォルトの名無しさん
09/08/31 22:44:30
まあ145まではいかなくても,落ち着いて自分の頭で考えたら少なくとも>>143みたいな早とちりには至らないわな

149:デフォルトの名無しさん
09/08/31 23:14:45
VB.netのくだすれが無い以上、ここにくだすれ向けの質問も書かざるを得ないとは思う。
くだすれ作れよってことなら立てるだけなら誰でもできるが、果たして質問に答える方の人材はどうだろうかとも。

150:デフォルトの名無しさん
09/08/31 23:29:31
多分答える人たちは両方のスレで同じ

151:デフォルトの名無しさん
09/09/01 12:04:31
まあ、あれだ。
標準のクラスがどうやってるかは Reflector で調べるのが確実。

152:デフォルトの名無しさん
09/09/01 14:31:02
くだらん質問ですみません。

VB6で書いたコードをVB2008で読み込んで自動でコードを
変換させました。

CommonDialog1.CancelError = True

VB2008のCommonDialogクラスにはCancelErrorなんてプロ
パティは無いそうで、変換できないといわれました。

VB2008のコモンダイアログでCancelボタンを押したときの
値ってどこで取得したらよろしいんでしょう?

なにとぞよろしこ

153:デフォルトの名無しさん
09/09/01 14:35:36
ShowDialogの返値

154:デフォルトの名無しさん
09/09/01 14:43:33
resultってVB6もあったよね?

155:152
09/09/01 14:45:29
DialogResult.Cancelっていう値を返していたのね。
分かりました。へっぽこですんません。ありが㌧

156:デフォルトの名無しさん
09/09/01 23:27:33
おまいらが思う、世界の歴史上最も美しいオープンソースのVB.NETを紹介しろよ。

157:デフォルトの名無しさん
09/09/01 23:32:08
美しいとかいう以前に無いから
.NETのオープンソースはほとんど全てC#

158:デフォルトの名無しさん
09/09/02 09:17:15
ほとんどなのか全てなのかはっきりしろ

159:デフォルトの名無しさん
09/09/02 09:43:43
じゃVB.NETはまれによくあるんだろうか

160:デフォルトの名無しさん
09/09/02 09:48:12
まれなのかよくあるのかはっきりしろ

161:デフォルトの名無しさん
09/09/02 10:02:09
CodePlexなんかにはVB.NETで書かれたものもほんの少しはあるけど
C#とは比べ物にならないので,そういうの漁るならC#は必須
ほとんど一緒だから慣れたら脳内翻訳できる

162:デフォルトの名無しさん
09/09/02 10:09:32
質問です。
あるクラスから Form が呼び出されている場合、その Form で自分の呼び出し元クラスを取得する方法はありますでしょうか?

呼び出し元クラスの他のメソッドを実行したいのです。

現在は下記のように書いていますが、もっとスマートな方法はありますでしょうか?
フォーム frmX でクラス HOGE を New してっていうのが違和感があります。
HOGE.A() で f.Tag = Me とすれば frmX で
Call Ctype(Me.Tag, HOGE).B()
としてもいけそうですが、これもスマートではない気がします。

それとも、呼び出し元クラスのメソッドを実行する設計自体が問題あるのでしょうか?

Public Class HOGE
  Public Sub A()
    Dim f as New frmX
    f.Show()
  End Sub

  Public Sub B()
    MessageBox.Show("Hello!")
  End Sub
End Class

Public Class frmX
  Private Sub Button1_Click(Byval sender as System.Object, Byval e as System.Eventargs) Hanles Button1.Click
    Dim H As New Hoge
    Call H.B()
  End Sub
End Class

163:デフォルトの名無しさん
09/09/02 10:12:28
frmXのコンストラクタの引数として渡す
一般に,呼び出し元に依存するような設計は良くないんだけどVBならどうでもいいよ

164:162
09/09/02 10:25:14
>>163
ありがとうございます。
なるほど!です。

frmX で

Private _Caller As HOGE
Public Sub New(Caller As HOGE)
  InitializeComponent()
  _Caller = Caller
End Sub

Private Sub Button1_Click(~
  Call _Caller.B()
End Sub
とすることでできました。

Form の既定のプロパティに呼び出し元を取得できるものでもあれば、と思っていたのですが
見つけることはできませんでした。

呼び出し元に依存するような設計の良くないと言われるのはどういった点でしょうか?
今後の参考にさせていただきたいので、お教えいただければと思います。

165:デフォルトの名無しさん
09/09/02 10:29:37
逆に言うとそのHOGEがないと呼び出せないということになる
HOGEの中身によるけど,あんまりその場に依存した具体的なクラスだとfrmXが使い回しできなくなる

166:162
09/09/02 10:44:48
開発しているシステムに「HOGE」「FOO」「BAR」みたいに3つの機能があるとします。
で、それぞれの機能をクラスに分けようと思っています。
もっと言うと別Dllにしてしまおうと考えています。

各機能で固有の機能や画面は各クラスで実装するつもりで、メインプログラムから
例えば処理HOGEを行う場合は、クラスHOGEのインスタンスを作成し、そのクラスの
メソッドを実行しようとしています。

frmX を他のクラスから使いまわすということはないです。

複数のクラスから使いまわす予定のものは呼び出し元クラスに依存しないような設計に
すれば問題ないですか?

167:デフォルトの名無しさん
09/09/02 11:41:21
他でも使う機能なら、フォームのクラスに載せないで、
共通機能として別クラスに作るだけでいいんじゃないの?

168:デフォルトの名無しさん
09/09/02 12:10:05
>>162 >>164
「呼び出し元」て…

frmX にイベントを追加するのが一般的じゃね?

Class HOGE
  Public Sub ...
    Dim f As New frmX
    AddHandler f.押された, AddressOf B    ' ←─ ここでハンドラ追加
    f.Show()
  End Sub
  :
  Public Sub B(ByVal self As Object, ByVal e As EventArgs)
    MessageBox.Show("Hello!")
  End Sub
End Class

Class frmX
  :
  Public Event 押された(ByVal self As Object, ByVal e As EventArgs)
  :
  Private Sub Button1_Click(...
    RaiseEvent 押された(Me, New EventArgs)
  End Sub
End Class

169:デフォルトの名無しさん
09/09/02 12:15:11
これ全然一般的じゃないだろw

170:デフォルトの名無しさん
09/09/02 12:17:27
使い回さないって言ってるんだから普通にHOGEのメソッド呼べばいいと思うよ
>>166を読む限り,frmXの処理は密接にHOGEに結びついてるみたいだから
無理にイベントを使っても強くHOGEを意識する形になると思われるのであまり意味がない
本当に分離するなら,frmXで触るデータを保持するクラスをHOGEとは別に作る

171:デフォルトの名無しさん
09/09/02 14:07:34
VB2008を使っています。
関数の処理時間を計ろうと以下のクラスを作成しました。

Public Class ProcTime
Private dtDiff As DateTime

Public Sub New()
dtDiff = DateTime.Now
End Sub

Protected Overrides Sub Finalize()
Debug.Print(DateTime.Now.Subtract(dtDiff).Milliseconds.ToString())
End Sub
End Class

'時間を計る関数に
Private Sub Test()
Dim pt As New ProcTime
'~処理~
End Sub

とした場合、正しく計れないのですが間違っていますか?

172:デフォルトの名無しさん
09/09/02 14:11:06
Finalizeはいつ呼ばれるかわからないから,そういう使い方はできない。
そういうパフォーマンス計測にはSystem.Diagnostics.Stopwatchという専用のクラスがあるからそれを使う。

173:171
09/09/02 14:22:34
早速の回答ありがとうございます。

時間を計測したい関数の最初と最後に Start、Stop を配置して
計測するんですね、分りました。

174:デフォルトの名無しさん
09/09/02 16:54:24
c++で作ったDLLの関数が次のような場合
>int Foo(void **param) 実際はparamが複数ある
>ダブルポインタを渡してオブジェクトのポインタ値を取得する。NULL値も許容する。
VB.net2003での宣言を以下のようにしたらNothingを渡してもNULL(0)になりませんでした。
>Declare Ansi Function Foo Lib "hoge.dll" (ByRef param As IntPtr) As Int32
VBからポインタ値の先を直接参照するわけではなく、ハンドル的な使い方をしたいのです。
NULL値も渡せるようにするにはどうしたらいいのでしょうか?

175:174
09/09/02 16:56:48
書き漏れがありました。
C++のDLLはネイティブ(アンマネージド)DLLです。

176:デフォルトの名無しさん
09/09/02 17:02:17
ByVal param As IntPtr()

177:デフォルトの名無しさん
09/09/02 17:13:36
NULLに相当するのはIntPtr.Zero

178:デフォルトの名無しさん
09/09/02 17:20:35
>>176
Declare Ansi Function Foo Lib "hoge.dll" (ByVal param As IntPtr()) As Int32
としたところ「型 'System.IntPtr' の値を 'System.IntPtr の 1 次元配列' に変換できません。」とエラーになってしまいました。
呼び出し側も何か書き方があるのでしょうか?
>Dim param As IntPtr
>Dim b = Foo(param, Nothing)  '引数が2個の場合

179:デフォルトの名無しさん
09/09/02 17:25:03
配列知らないって言われても困る

180:デフォルトの名無しさん
09/09/02 17:38:14
VB2008で「ビルド|発行」を実行したら、setup.exeを含むインストーラっ
ぽいのができてしまいました。setup.exeを実行すればなんとなくインスト
ールされて立ち上がります。しかし、インストールされた実行ファイル等は
programfilesのフォルダには影も形もありません。

そもそもVB6の時のように、インストール不要のexeファイルを作りたいの
ですが、VB.Netではできないのでしょうか?

181:デフォルトの名無しさん
09/09/02 17:43:44
基本的に/bin/Release以下のファイルをコピーするだけでいい

182:180
09/09/02 17:48:36
>>181
ありがと~

183:デフォルトの名無しさん
09/09/02 18:19:14
ゴミを入れんなよゴミを

184:デフォルトの名無しさん
09/09/05 04:06:17
今後vb.netで開発を行っていくのにはどのバージョンが適切なのでしょうか?
vb2005、vb2008はどちらかというと個人向けとwikiに書かれていました。
vb.net 2003が良いのでしょうか?
ご教授願います。

185:デフォルトの名無しさん
09/09/05 04:50:09
>>184
特に事情がなければ新しいのを使えよ

186:デフォルトの名無しさん
09/09/05 04:53:04
どのwikiに書かれてたのか知らんけど、多分誤読してる

187:デフォルトの名無しさん
09/09/05 09:35:14
>>185
>>186

ありがとうございます。
>>186さんの言うとおり誤読でした。
vb2008を検討してみます。

188:デフォルトの名無しさん
09/09/05 09:36:56
>>184
いまどき2003は無いよ。IDEボロだし。
WPFとか最新機能を使わないのなら2005でOK
2008でも良いけどIDEが劇重い

189:デフォルトの名無しさん
09/09/05 09:40:19
そうか?
まともなPCなら2008の方が体感速度は速い気がする

190:デフォルトの名無しさん
09/09/05 09:44:53
たいして変わらん

191:デフォルトの名無しさん
09/09/05 09:48:36
Core2 T550 1.67GHz は今時のまともなPCではありませんか Orz

192:デフォルトの名無しさん
09/09/05 09:49:16
T5500だった

193:デフォルトの名無しさん
09/09/05 09:53:08
2008は型推論とかXMLリテラルとか便利だよ

194:デフォルトの名無しさん
09/09/05 10:09:39
Eclipseの方がいいよ。VBは使えないけど

195:デフォルトの名無しさん
09/09/05 10:19:14
Excel VBA のエディタよりは使いやすいな。>Eclipse

196:デフォルトの名無しさん
09/09/05 10:24:35
VB2008は使いやすいよ
インテリセンス超速いし,徹底的に洗練されてる感じ
ゴテゴテのEclipseとは対照的

197:デフォルトの名無しさん
09/09/05 10:56:54
ゲイツ乙

198:デフォルトの名無しさん
09/09/05 11:49:02
俺が、VB2008がEclipseよりも劣っていると思うこと。

・スコープを考慮した変数名の一括置換が出来ないなど各種リファクタリング機能が無い叉は貧弱。
・編集ウィンドウのタブに閉じる「×」が無いため閉じるのが面倒。また全てを一度に閉じる機能も無い。
・プライベート変数からプロパティを自動生成する機能が無い。
・プラグインが作り難い。
・Javaで書かれたEclipseよりもなぜか重く感じる。


199:デフォルトの名無しさん
09/09/05 11:52:07
あ、もうひとつあった。最大の欠点は、Windows専用であることだな。

200:デフォルトの名無しさん
09/09/05 11:53:45
>>198
初心者が誤解するので、Express しか使ったことがないなら
そう書いて欲しいもんだ。

201:デフォルトの名無しさん
09/09/05 11:54:43
じゃ、使わなきゃいいじゃん。

202:デフォルトの名無しさん
09/09/05 12:01:26
あと、タブクリックで最大化する機能も欲しいな。

203:デフォルトの名無しさん
09/09/05 19:40:47
スコープを考慮した変数名の一括置換はできる。
全てのドキュメントを閉じる、は付いてる。
プロパティはコードスニペットを使う。

いつからEclipseがVBに対応したのか知らないけど。

204:デフォルトの名無しさん
09/09/05 20:08:08
このウインドウ以外全て閉じるはあったけど、全てを閉じるってあったっけ?
あんま使わないから覚えてないけど。

既にあるプライベート変数から、プロパティ作るのと
prop->のコードスニペットは別の動作だと思う。

205:デフォルトの名無しさん
09/09/05 20:51:58
×ボタンとか

206:デフォルトの名無しさん
09/09/05 20:54:57
EclipseよりVS2008が使い易いとか言ってる奴は素人だろ

207:デフォルトの名無しさん
09/09/05 21:19:24
IDE付属のテキストエディタ如きで満足している奴は皆素人ってことだろ。
まあ、俺はテキストエディタ素人だから、JavaはNetBeans、.NET系はVisualStudio使うけど。

208:デフォルトの名無しさん
09/09/05 21:55:18
釣りとは思うが時代錯誤な見解だね。

でも今時になってもリアルで「エディタにこだわる俺はお前らとは違うんだ」っていう
痛い奴がいたりするからあまり笑えないかも。

209:デフォルトの名無しさん
09/09/06 02:09:57
Eclipseがいいと思うなら思えばいい
だがここはVB.NETスレだからEclipseとかいらん

210:デフォルトの名無しさん
09/09/06 03:14:44
だがC#と同じぐらいのリファクタリング機能はVBにもつけてほしいのう

211:デフォルトの名無しさん
09/09/06 03:25:34
VBプログラマはリファクタリングの意味すら分ってないから不要だろ

212:デフォルトの名無しさん
09/09/06 03:35:27
ここで~してほしいって愚痴るぐらいなら
VS2010ベータ試してフィードバックに投げた方がよほど建設的なの

213:デフォルトの名無しさん
09/09/06 03:54:20
>>210
ツールがあったはず。
C#と同等のリファクタリング機能とか謳ってた記憶があるが名前忘れた。
少なくともメソッドの抽出は出来たはず。
'どうせウチの環境じゃ入れてもらえないけど…

214:デフォルトの名無しさん
09/09/06 08:04:21
Refactor!ってやつがなかなかいいよ

215:デフォルトの名無しさん
09/09/06 16:12:39
Function GetItems(type As Type) As Object()
  Dim items As Object()
  ~
  If type Is GetType(String) then items = new String() {}
  ~
  return items
End Function

Dim names() As String = GetItems(GetType(String))

とすると「InvalidCastException」になりました。
CTypeやDirectCastも試してみましたが同じ結果でした。
要素を1つずつコピーすれば出来ると思うのですが、もっと単純な方法はありませんか?

216:デフォルトの名無しさん
09/09/06 16:17:17
普通に Generics 使えよ。

217:デフォルトの名無しさん
09/09/06 16:19:54
そんなメソッドの使いどころが全く分からない

218:デフォルトの名無しさん
09/09/06 16:29:30
戻り値やitemsの型をArrayにしたらいいんじゃね
普通はジェネリック使うべきだけど

219:デフォルトの名無しさん
09/09/06 16:32:56
>>215
何がしたいのか意味が全然わからないが、
呼び出し側でString()を常に期待する(>>215のコードを見る限り、そう取れる)
のなら、GetItems()の返り値の型をString()にすれがいいんじゃないの?

Typeオブジェクトで指定した型の配列を返すようにしたいってこと?
それはできないから、どうしてもというならObject(Object()ではない)を
返すようにして、呼び出し側でキャストするしかない。

220:デフォルトの名無しさん
09/09/06 16:41:48
  If type Is GetType(String) then items = new String() {}
  If type Is GetType(Integer) then items = new Integer() {}
  If type Is GetType(Double) then items = new Double() {}

みたいなことをやりたいんじゃないの?

221:デフォルトの名無しさん
09/09/06 17:04:54
それだったら
Function CreateArray(Of T)(ByVal size As Integer) As T()
Return New T(size){}
End Function

222:デフォルトの名無しさん
09/09/06 17:15:10
単純にArray.CreateInstance()使えば?

223:デフォルトの名無しさん
09/09/06 17:31:59
要素コピーとかいってんだから配列作るだけじゃないんだろ

224:デフォルトの名無しさん
09/09/06 17:37:53
>>215です。
やりたいこととしては>>220に近い感じです。
~Collectionとかの要素をオブジェクトの配列として参照したり文字列の配列として参照したりしたかったのです。
ジェネリックは2005から使えるみたいなので私の使っている2003では使えませんね。
Object()ではなくObjectにすればキャスト出来るみたいなので試してみます。

225:デフォルトの名無しさん
09/09/06 18:38:15
ああ、2003のことを忘れてた

226:デフォルトの名無しさん
09/09/06 18:40:53
先に言えよハゲ

227:デフォルトの名無しさん
09/09/06 21:26:59
はじめから配列も~CollectionもIListとして扱えばいい
すべて共通のコードで扱える

228:デフォルトの名無しさん
09/09/06 21:36:45
2003なんですが質問です。

DataGridで特定の行に色設定し、さらに行選択もできるようにしたいんです。
DataGridで特定の行に色設定することは、
DataGridTextBoxColumnを継承してクラスを作成し、
Paintメソッドをオーバーライドすることで出来ました。

行選択もHandles DataGrid1.Paintしたメソッドに
DataGrid1.Select(DataGrid1.CurrentRowIndex)
を書けばできました。

でも両方をいっぺんにやる方法が分かりません。><
たぶん、オーバーライドしたPaintクラスから
DataGrid1.Selectが出来れば良いんだと思いますが、
やり方が分かりません。
どなたか教えてくださいませんか?

229:デフォルトの名無しさん
09/09/07 08:06:28
SELECT * FROM npcname_jp jp INNER JOIN npc eg ON jp.id=eg.id

上記SQLでセレクトしたテーブルをリストボックスに入れて
DisplayMemberpを jp.id などにすると、なぜかそのような列が見つからないようで、表示に反映されません。

なぜだか分かる方いませんか(;´Д`)

230:デフォルトの名無しさん
09/09/07 08:20:00
SELECT jp.id as hoge, * FROM npcname_jp jp INNER JOIN npc eg ON jp.id=eg.id

としてhogeにしてみたら?


231:デフォルトの名無しさん
09/09/07 08:54:12
超ありがとう
積年の恨みが一瞬で解決した
痔は治らないが

232:デフォルトの名無しさん
09/09/07 11:30:19
「なぜそうなるのか」がわかってないと解決とは言えないと思うんだぜ?

233:デフォルトの名無しさん
09/09/07 19:10:56
と思うんだが?
と思うぜ?

234:デフォルトの名無しさん
09/09/08 14:00:12
>>233

まあ最近見ない表現だから解らんのも無理はない。<「~だぜ?」

235:デフォルトの名無しさん
09/09/08 15:55:32
表現だぜ?
無理だぜ?
と言っても
見ないんだぜ?
解らんだぜ?
とは言わなんだぜ?

236:デフォルトの名無しさん
09/09/08 23:24:19
vb2008express editionを使っています
ウインドウ左上のアイコンを変更するにはどうすればいいでしょうか?
ちなみにアイコンそのものは変更してみましたが変わりませんでした

237:デフォルトの名無しさん
09/09/08 23:45:02
URLリンク(www.google.co.jp)アイコン+変更

238:デフォルトの名無しさん
09/09/09 00:13:38
>>237
アイコンの変更は試しましたがウインドウの左上の絵がかわりませんでした

239:デフォルトの名無しさん
09/09/09 00:27:29
>>238
どっちの?

240:デフォルトの名無しさん
09/09/09 00:46:36
>>239
どっち?

241:デフォルトの名無しさん
09/09/09 03:08:40
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
このキーに新しいキーを追加してメニューから自作アプリを起動たいのですが
レジストリキーの既定のところに
c:\test.exe
と書いても起動しないのですが他にどんな設定をしたら良いでしょうか?

242:デフォルトの名無しさん
09/09/09 08:10:19
スクリプトしか実行できないんじゃなかったっけ?

243:デフォルトの名無しさん
09/09/09 15:15:40
他にどんな設定をしてもだめ

244:デフォルトの名無しさん
09/09/09 17:30:28
すみません初歩的な質問です。
今まで独学でvb.net+mdbのデータベースを勉強しているのですが、サンプルに使っているSQL文がそのままだとJETに使えないため、いっそMySqlに乗り換えようと試みています。

いろんなサイトでMySqlのデータベースを作成することはできたのですが、なぜかそのファイルが生成されていないみたいです。
「ファイル+vb.netで作ったアプリケーション」を人に渡して使ってもらうようにしたいので、どうしてもファイルが必要です。
また、渡した相手のローカルコンピュータにはMySqlは基本的にありません。

もしくはvb.netのソースコード側でMySqlのデータベースファイルを生成する方法でもあるのでしょうか?
よろしければ教えてください。

245:デフォルトの名無しさん
09/09/09 18:51:00
sqliteを使えばいいかと

246:デフォルトの名無しさん
09/09/09 19:01:26
URLリンク(www.dbonline.jp)

これですね、ちょっとやってみます。
中の文面を流し読みした感じ、SQLiteの特徴として「単一のファイルでデータベース管理できるので簡単」とありましたが
つまり普通のデータベースではそういう管理をしないということなのですね

247:デフォルトの名無しさん
09/09/09 19:21:02
データベースって何?って事を理解したらいいかと思う

248:デフォルトの名無しさん
09/09/09 20:31:03
データベースといっても色々あるがな

249:デフォルトの名無しさん
09/09/09 21:08:08
SQLiteかわいいよSQLite

250:デフォルトの名無しさん
09/09/09 23:59:08
>>242-243
ありがとう。他のアプリの設定を見たら全部スクリプトになってました。

251:デフォルトの名無しさん
09/09/10 14:15:24
あの 昨日の244ですけど
結局何がしたかったかっていうと、勉強がてら、某ゲームのデータベースを作ってたんです。
が、そのSQL文がSQLiteには通りませんでした(;´Д`)

やむを得ずMySqlに変えてSQL発行してみると普通に通ってしまいました。
URLリンク(www.l2jdp.com)
↑SQLのソースはこれです。

あ、今回は特に質問ではないですが事後報告ということで。
お答えくださった方、ありがとうございました。

252:デフォルトの名無しさん
09/09/10 16:51:08
あー、そりゃ通らねぇだろうなあ。
MySQL と PostgreSQL 以外にこの構文受け付けるやつってあったっけ?

253:デフォルトの名無しさん
09/09/11 03:55:27
2009/09/10
【国際】 中国 「IT製品、ソースコード開示せよ。情報漏洩はないから」…日本側が撤回求めるも、予定通り実施へ
★5URLリンク(s01.megalodon.jp)
★4URLリンク(s04.megalodon.jp)
★3URLリンク(s04.megalodon.jp)
★2URLリンク(s03.megalodon.jp)
★1URLリンク(s02.megalodon.jp)

254:デフォルトの名無しさん
09/09/11 08:38:04
2005から2008ってどう変わったの?
乗り換えるメリットある?

255:デフォルトの名無しさん
09/09/11 09:54:21
・VB9(LINQ, ラムダ式, 型推論, XMLリテラル)
・.NET3.0&.NET3.5(WPF,WCF等)
・.NET2.0の部分は変更なし
WPFとか使わないならそんなに変わらない
どうせWinFormsはVS2010以降も放置だろうけどな

256:デフォルトの名無しさん
09/09/12 23:24:55
VBでTCP、UDP通信ができるプログラムを作りたいのですが、
VB6でwinsock使ってやってたのですが、
VB2008やらVB.netでも同様にできるのでしょうか?

257:デフォルトの名無しさん
09/09/12 23:40:13
ググってみつからないようなことならまだしも、
ググればその手の情報はいっぱい出てくるじゃん。

258:デフォルトの名無しさん
09/09/13 00:36:19
でてこねーからいってんだろ

259:デフォルトの名無しさん
09/09/13 00:39:10
>>258
そりゃぁ、回線を首に巻いて首吊って回線切れてんだから
ぐぐっても出ねぇよw


260:デフォルトの名無しさん
09/09/13 00:49:11
こういうことを実現したくて、調べたところこういうことがわかりましたが、
このソースのこの部分がよく分りません。そこでこういうふうにしてみましたが、
こういうエラーが出てうまく行きません。このエラーはこういう意味みたいなので、
ここをこうしてみましたが同じエラーがでます。他にエラーの原因として考えられる
ことはあるでしょうか?

...みたいな努力のあとは欲しいわな。いくらゆとりとはいえ。

261:デフォルトの名無しさん
09/09/13 00:55:58
「VB.NETでTCP/UDPを扱う」じゃなくて
「VB.NETでWinsockを使う」って考えで調べるからダメなんじゃないだろうか、この手の人

262:デフォルトの名無しさん
09/09/13 00:57:47
>>256
winsockってwinsock.ocxの事かな?
であればvb.netでもocxは使えるので同じように作れるけど。

263:デフォルトの名無しさん
09/09/13 02:54:39
VB6って言ってるから「dll」の方だと思われ

264:デフォルトの名無しさん
09/09/13 03:50:19
わしが男塾塾長 江田島平八である!!

265:デフォルトの名無しさん
09/09/13 07:57:05
GroupBoxとPanelの違いは?

266:デフォルトの名無しさん
09/09/13 08:12:30
お前のレスそのままグーグルで検索かけろ

267:デフォルトの名無しさん
09/09/13 09:53:34
>>263
ocxじゃ無くなったんですか。
vb.netでもCOMなdll呼べるし、Dllimportでwinsock APIも呼べるし
ソケットプログラムには不自由しませんね。

268:デフォルトの名無しさん
09/09/13 10:01:47
いや、普通にSystem.Net.Sockets.TcpClientとか使えばいいから。

269:デフォルトの名無しさん
09/09/13 10:22:24
空気嫁

270:デフォルトの名無しさん
09/09/13 14:20:51
>>268
それじゃ全然オプションないだろ
使い物にならなくね?
UNIXみたいに自由にできん

271:デフォルトの名無しさん
09/09/13 14:37:14
>>270
System.Net.Sockets.Socket クラス使えばOK

272:デフォルトの名無しさん
09/09/15 00:45:00
Winsockより自由に扱えるんだっけ?
UNIX波に

273:デフォルトの名無しさん
09/09/15 04:10:50
開発環境の違いにより同じアプリを作るにもコードの書き方が変わったりしますか?

数年前発売されたVisualStudio6.0を持っているのですが
マイクロソフトから提供されているフリーの.NETをインストールするか悩んでいます。

.NET開発環境ではマウス操作だけで出来ることをVC6.0ではシコシココードを書かなければいけないというふうな
違いがあるのであればVC6.0で勉強するだけ無駄になりますし。




274:デフォルトの名無しさん
09/09/15 05:50:39
ここVB.NETのスレなんだが?
とりあえず.NET以前のVBとVB.NETは別物と思った方がいいぐらい違う


275:デフォルトの名無しさん
09/09/15 05:54:08
VB6からVB 2005に移行しました。

今まで
pos = Arrary( x, y)
のような表記だったのをそのままビルドしようとすると
>エラー 1 'Array' は型です。有効な式ではありません。
と前回ビルドに成功したものが実行されます。
左辺値は別アプリ(Photoshop)のオブジェクトライブラリのメンバで、As Variant, unit value(?)以外の詳細が分かりません。。

これを、
dim ops as Object
ops = New Object(){x, y}
pos = ops
とやると、実行時に最後の行でCOMエラーが起きます。どのように修正すべきなのでしょうか・・・。

まだ切り替えたばかりで調べつつなので、書くべき情報が少なかったらすいません。必要あれば追記します。

276:デフォルトの名無しさん
09/09/15 10:02:47
>>272
MSDNくらい参照したら?

277:デフォルトの名無しさん
09/09/15 12:46:49
>>275
> 左辺値は別アプリ(Photoshop)のオブジェクトライブラリのメンバで、As Variant, unit value(?)以外の詳細が分かりません。。
じゃあ誰も分からん
.NETでのCOMとの相互運用はVB6みたいな「よくわからないけどなんとなく使える」じゃ通じない

278:275
09/09/15 22:41:14
レス遅れました。
277さんありがとうございます。
COM自体あまり良く理解してないと思うので、大人しくこのツールはVB6現行のまま作ろうと思います。
Photoshopのスクリプティングガイド等にもそこまで詳しい情報は載ってませんでした。orz

279:デフォルトの名無しさん
09/09/15 22:52:52
COM参照できそうなもんだが
つーか詳細が分かりませんって、スクリプティングガイドあるんだからちょっとは調べろー

280:275
09/09/15 23:20:15
すいません、もう一度じっくり読んだら型がDoubleと書いてあるのにLongで宣言してたのが原因でした・・・。
型宣言を書き換えたらエラー無し。 .NET以前の問題で申し訳ありません。。orz...

281:デフォルトの名無しさん
09/09/16 23:47:28
すみません、VB.netは超初心者なんですが。
将来的にMS ACCESSの制御をやることになりそうなので、練習ということで、
ソリューション エクスプローラの参照設定を右クリックして、
"Microsoft Access 10.0 Object Library"を登録して、そこまではうまく行ったんです。
そのあと、しばらく色々と遊んで、
そのあと、参照設定の参照ツリーから何かの拍子にAccessを削除して、もういちど登録したら、
黄色い三角に「!」の警告マークがでて、参照ができなくなってしまったんです。

過去にClick Onceのテスト用にビルド&発行してあった場所に、interop.access.dllというのが
あったので、それをインポートしたら復旧したのですが、このDLLが自PCのどこを探しても
ないのです。

いろいろググって、PIA
URLリンク(support.microsoft.com)
がタイプライブラリ(的なもの)の詰め合わせ、と思ってダウンロードしてインストールしたら、
名前が、
×Access.Application
○Microsoft.Interop,Access.Application
でないと呼び出せなくなってしまってたんですね。どうも不可解で、
「ああ、それはこの辺がクサいよ」というエスパーの方、おられませんでしょうか?
結局、修復インストールまでしたのですが、だめ。(上に書いたinterop.access.dllが必須)
念のため書いておくと、Accessの参照を登録してから、他にやった(かもしれない)こととして、
・dotNetFx35setup.exe という最新版を落として入れた。
・MicrosoftR WindowsR Software Development Kit for Windows ServerR 2008 and .NET Framework 3.5
 というのを入れた
というのがあります。
なにとぞご協力を。多少熟練した暁には、私も回答お手伝いしますので。

282:デフォルトの名無しさん
09/09/16 23:49:28
OS から再インストールしろよ

283:デフォルトの名無しさん
09/09/17 07:37:29
>>281
単に、以前は参照設定でMicrosoft.Interopが入っていただけじゃないのか?

284:デフォルトの名無しさん
09/09/17 11:29:31
System.IO の Directory.Exists() や File.Exists() を実行すると、そのたびに
メモリーを消費しているような感じなのですが問題はないのでしょうか?

メモリー消費のチェックには、
URLリンク(www.forest.impress.co.jp)
を使いました。これを起動して、該当するアプリケーションのプロセスを
右クリックして[Properties]→[Performance]タブで[I/O]欄内のOtherを
モニターしてみると、上記メソッドを実行するたびに数バイトずつ増加していきます。
そのとき同時に同タブ内の[VirtualMemory][PhysicalMemory]の値も増加していました。

Directory.Exists() や File.Exists() の後ですぐに GC.Collect() を行なうと、
原則として[VirtualMemory][PhysicalMemory]の値は増加しないようでした。
しかし[I/O]欄内のOtherは増加していました。GCを使ったのはこれが初めてです。

これはいわゆる言うところのメモリーリークなのでしょうか、すみませんがご指導を
お願いします。

285:デフォルトの名無しさん
09/09/17 11:33:31
馬鹿?

286:デフォルトの名無しさん
09/09/17 11:35:54
web browserを作ったのですがweb browser.applicationから.exeにするにはどうしたらいいのでしょうか?

287:284
09/09/17 11:36:19
関連するように思われたこの質問でも
URLリンク(social.msdn.microsoft.com)
やはり Directory.Exists() が使われていました。もしかするとこれも関係して
いるような気もしました。

何卒、よろしくお願いします。

288:284
09/09/17 11:42:35
>>284
>Directory.Exists() や File.Exists() の後ですぐに GC.Collect() を行なうと、
原則として[VirtualMemory][PhysicalMemory]の値は増加しないようでした。
しかし[I/O]欄内のOtherは増加していました

この GC.Collect() を使った場合でも、それまでに GC.Collect() を使わないで
累積してしまった[VirtualMemory][PhysicalMemory]は減らないようでした。



289:デフォルトの名無しさん
09/09/17 11:46:04
「気にしない」が正解

290:284
09/09/17 11:51:46
>>289
どうもです。一応、このメソッドを使ったときには、上記のように直後に
GC.Collect()を実行しておくべきでしょうか?それとも不要でしょうか?

一応、先ほどの
URLリンク(www.forest.impress.co.jp)
を使って加速テストをやってみます。仮にそれで実質的なメモリー消費が
起きている場合には何か対策が必要になるでしょうか?

291:デフォルトの名無しさん
09/09/17 12:12:23
Fileのメソッドに限らず,メモリを割り当てないメソッドなんかほとんどないぞ?
何のためにGCがあると思ってるんだ

292:デフォルトの名無しさん
09/09/17 12:32:09
一時的にせよ、意図しないメモリが増えるのが気に入らない人の選択肢:
  C++ (unsafe)

293:デフォルトの名無しさん
09/09/17 12:35:09
一時的なオブジェクトはたいがいGen0の高速なGCで消えるから放置して問題ない
FullGCしたら無駄に遅くなるだけ

294:デフォルトの名無しさん
09/09/17 13:01:38
284「私は必ずメモリ消費は抑えるぞ。他の何を犠牲にしてもだ。
  そのためなら処理速度だってくれてやる。OSが壊れたって構わない。
  データの不整合? 頻発する強制終了? BIOSから進めない? 知ったことか。
  私はメモリという1つの美しい空間が1の状態に励起されることが、
  そのような乱暴な行いが、それらのすべてが許せないのだ!!!!」

295:デフォルトの名無しさん
09/09/18 02:02:51
数バイト増えたからGC.Collect()
基地外かよ



296:デフォルトの名無しさん
09/09/18 02:13:32
2ちゃんに書き込むパケットはどうすればいいの?
POSTを使うのはわかるが、リファラとか構成がわかわん

297:デフォルトの名無しさん
09/09/18 04:37:15
VB.NETじゃないけどjaneのソース見れば分かるしググればいろいろ出てくるぞ

298:デフォルトの名無しさん
09/09/18 05:06:27
2000*3000程度のjpgをPictureboxに入れてスクロールバーでスクロールさせてみるとものすごく処理が遅いのですが
何か高速化の方法があれば教えてください。
今のところ自分の試した方法は無駄な描画を減らすことですが、大した変化はありませんでした。
コードは以下のような具合です。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ClientSize = PictureBox1.BackgroundImage.Size
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.Opaque, True)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.DrawImage(PictureBox1.BackgroundImage, Me.ClientRectangle)
End Sub

また、下記のサイトでVB.NETのとっている画像処理方式が最悪であり、遅いといわれていることが分かりました。
URLリンク(www.nextftp.com)
これってつまり、これ以上はどうしようもないということでしょうか。
このサイトにはなにやら方法が書いてあるようですが、書いてあるコードは宣言もしていない変数を当たり前のように使っているし理解不能でした。

299:デフォルトの名無しさん
09/09/18 08:03:08
そのページには、SetPixelが遅いと書かれているようにしか見えないのだが。

まあそれはともかく、クリッピング任せで毎回全部描画するのを止めれば良いんじゃないかな。
表示領域の範囲だけ転送するようにするだけでも大分マシになると思う。

300:デフォルトの名無しさん
09/09/18 08:59:12
>>296
…パケット?

301:デフォルトの名無しさん
09/09/18 11:05:33
rep2のソースを見ればいいと思う

302:デフォルトの名無しさん
09/09/18 13:56:04
VB.NET 2008 で、MouseMove に Beep() だけを書き込んだ次のプログラムで

Public Class Form1

Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
Beep()
End Sub

End Class

マウスカーソルをフォームの上に置いて、移動しなくても 約1秒ごとにBeep() が実行されます。
つまり、移動しなくても MouseMove は定期的に呼ばれています。これは、仕様ですか?
それとも環境が悪いのでしょうか。 Windows 7 Ult のほぼ素の状態で実行してます。

303:デフォルトの名無しさん
09/09/18 19:50:13
家の環境は x64 Windows7 Pro だが、全く再現しないな。

304:302
09/09/18 20:09:13
>>303 ありがとう。

あのぉ すまん。
再起動したらならなくなった。

原因は不明だが、そんな仕様なわけないわな。
すれ汚しすまん。

305:デフォルトの名無しさん
09/09/19 01:23:49
VBというわけでもないのですが、数値データを使って
地図上に線を引きたいのですが、そういうことが出来る地図ソフトはあるでしょうか?
有料でも良いので知っていたら教えて

306:デフォルトの名無しさん
09/09/19 01:48:12
GoogleMap

307:デフォルトの名無しさん
09/09/19 09:46:15
>>305
vb全く関係ないな

308:デフォルトの名無しさん
09/09/19 10:34:55
VBで使えるコントロールってことじゃね?

309:デフォルトの名無しさん
09/09/19 13:03:55
ソフトって言ってるからただのスレチ

310:デフォルトの名無しさん
09/09/21 07:21:45
出来合いのアプリケーションが欲しいって話なら寧ろイタチ

311:デフォルトの名無しさん
09/09/22 15:36:35
VS2005のデザイナー上で、ボタンとかのコントロールを
あるコンテナ上から別のコンテナ上にカット&ペーストで移動すると
Handles句で書かれたハンドラーからHandles句が削除されたままになります。
これを回避するためには、ハンドラをAddhandlerで関連付けする以外にない
でしょうか?

312:デフォルトの名無しさん
09/09/22 17:15:23
削除されたHandles部分を書き直せばいいだけじゃないのか。

VSが自動で書いたコードと人が書いたコード、全く同じ文字列だった場合でも動作に違い生じるとでも?

313:デフォルトの名無しさん
09/09/22 17:27:49
まあ、アホみたいにイベント紐付けしてるとそれが面倒、ということでしょ。

>>311
そもそもカット&ペーストする必要があるの?
VS2003まではコンテナの外に出すにはカット&ペーストしか方法がなかったような気がしたけど
2005以降はマウス操作でそれも可能になってるのに。

普通にマウスかキー操作で移動すればいいじゃん。

314:デフォルトの名無しさん
09/09/22 17:30:21
あとはあれかね、小手先のテクニックだけど
カット&ペーストする前にイベントハンドラをコメントアウトしておく、とかかね。

普通同じコントロールのイベントハンドラはまとめてあるだろうから、
それならたいして手間はかからないんじゃないかな。

315:デフォルトの名無しさん
09/09/22 18:36:54
つか、どーなって欲しいのかが判らん。
まさかハンドラを別フォームに置きたいとか、そういうトンデモなことをしたいのか?

316:デフォルトの名無しさん
09/09/22 20:50:46
>>315
それはさすがにお前さんの側の問題だと思うよ。
別に>>311はそう変なことは言ってない。

317:デフォルトの名無しさん
09/09/22 22:27:25
デザイナでコントロール選択してイベントのドロップダウンボックスで選び直したら

318:デフォルトの名無しさん
09/09/23 17:38:56
質問です。
フォームを開いてるときにフォームの外(スタートとか)の操作をさせない方法ありますか?
タスクに表示させないのは出来るんですけど、スタートボタンの禁止ができません。
今作ってるのは、ユーザーを選択して起動したあと、パスワードを入れて正確じゃないと他の操作に進めないっていう奴です。
私はアドミニストレータじゃないので、ユーザーのパスワードだけだとアドミニストレータにばれてしまうんです。

319:デフォルトの名無しさん
09/09/23 17:54:59
>>318
日本語でおk

320:デフォルトの名無しさん
09/09/23 17:56:21
ありません。

そういうのは、普通 GINA で作ります(XP までは)。

321:デフォルトの名無しさん
09/09/23 17:56:58
>>319 同意

322:デフォルトの名無しさん
09/09/23 18:03:26
>>319
すいません。
プログラムを操作中に、プログラムの操作(ボタンをクリックするとか)以外をしないように出来ますか?という事です。
やっぱりできないですかね?

323:デフォルトの名無しさん
09/09/23 18:16:47
>>322
一番簡単なのは、昔のインストーラーでよく使われてた、
タイトルバーがないウィンドウを最大化してしまう方法かね。

もちろんこれではウィンドウズキーまでは抑止できないけど。

システムモーダルなんて方法もあった気もするけど、ドトネトのWinフォームは
システムモーダルに対応してなかったはず。

というか、そもそも普通はそんなアホな仕様のプログラムはありえないと思う。
本当にそんなアホな仕様が必要なのかね。
9割り方君がそう思い込んでるだけだと思うよ。

324:デフォルトの名無しさん
09/09/23 18:21:38
>>323
どうしてもアドミニストレータが入ってくるのを抑えたくて、その方法がこれしか思いつかなかったんです。
やっぱ最大化しかないですかね。ウィンドウズキーがありますからね…
ありがとうございます。

325:デフォルトの名無しさん
09/09/23 18:24:12
Administrator うんぬんはまた別の話だろ。
何をやりたいのか、まったく理解できないけど。

326:デフォルトの名無しさん
09/09/23 18:31:11
>>325
アドミニストレータは制限付ユーザーのパスワードが分かってしまうので、ばれないようにしたかったんです。
でも無理みたいですよね。ありがとうございました。

327:デフォルトの名無しさん
09/09/23 18:34:47
そりゃ、クラックすればわかるし、パスワード変更はできるけど、
VB とはまったく関係ない話。

328:デフォルトの名無しさん
09/09/23 18:45:17
プログラム実行中はできなくしたとしても、プログラム終了させたらできちゃうから意味なくね?

329:デフォルトの名無しさん
09/09/23 18:55:04
>>327
ごめん、なんでそんな仕様にするの?って聞かれたから理由を言ったんだ

>>328
パスワード入力して正しくない場合は、×押したときに強制的にキャンセル

330:デフォルトの名無しさん
09/09/23 18:56:59
だから GINA で作れって言ってんだろハゲ

331:デフォルトの名無しさん
09/09/23 19:02:15
なんでそんな仕様にするの?って聞かれたから理由を言ったんだ。キリッ

じゃねーよw

332:デフォルトの名無しさん
09/09/23 19:15:52
システム部を持たない会社が「おい、おまえパソコン詳しいよな」みたいなノリで
社員に社内向けツールを作らせようとするとそんな要求仕様になりやすいな(経験者談)

333:デフォルトの名無しさん
09/09/23 19:20:12
まあ、率直にいってそういうことがしたいなら、
今はUSBドングル使ってシステムをロックする製品なんてのもあるみたいだから
そういうのを使った方が確実だろうね。

それ以前に、まあ普通は隠蔽したいものは何らかのデータなんだろうから、
そういうことなら暗号化すりゃいいだけだね。

しかし、そんな信頼できない奴がシステム管理者ってのがそもそも間違ってる気もしますが。

334:デフォルトの名無しさん
09/09/23 20:39:25
>>330
ごめんそっち勉強するよ。
>>331
いやそんなつもりはw
とりあえずできないのはわかったんでやめます。
ありがとうございました。

335:デフォルトの名無しさん
09/09/24 21:34:44
すいません 教えてください
マウスの移動で線を描画したいのですが pictureboxでdrawlineで書いていますが 太さを1以上にすると
汚い描画になります、VB6のときはこんなことはなかったのですが、どなたか教えてください

336:デフォルトの名無しさん
09/09/24 21:36:30
Graphics のプロパティをいろいろ調べてみれ。

337:デフォルトの名無しさん
09/09/24 22:57:22
>>336
SmoothingMode はいくつか試しましたが、だめでした。
太さを大きめにすると目立ちます

なぜだろう? もっと違うところ?

338:デフォルトの名無しさん
09/09/24 23:59:51
これ見てダメならあきらめろ。

URLリンク(dobon.net)

339:デフォルトの名無しさん
09/09/25 00:07:04
>>338
いっちゃ悪いけどそういうトンマな回答もどうかね。
「VB6のときはこんなことではなかった」と言っているから、
そういう問題ではないはずだ。

>>335
「汚い描画」なんていう抽象的な表現では誰にも問題が正確に伝わらない。

こういう場合は(というよりほとんどの場合そうあるべきだが)くどいぐらいに
具体的に君の問題を表現しなきゃダメだよ。

340:デフォルトの名無しさん
09/09/25 00:13:13
>>339
わからないならレスしないでください。

341:デフォルトの名無しさん
09/09/25 00:34:38
御託はいいからコードを出せ、ってことだな。

342:デフォルトの名無しさん
09/09/25 00:36:18
まず問題あるっていうコードを出すのがスジだな。

343:デフォルトの名無しさん
09/09/25 03:04:53
汚い描画してるからじゃね?

344:デフォルトの名無しさん
09/09/25 07:08:26
>341
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
'position
Dim POS_X As Integer
Dim POS_Y As Integer

Dim g As Graphics
g = PictureBox1.CreateGraphics()

' Create a new Pen object.
Dim Pen As New Pen(Color.Green)

' Set the width to 10.
greenPen.Width = 10

If e.Button = Windows.Forms.MouseButtons.Left Then
g.DrawLine(Pen, POS_X, POS_Y, e.X, e.Y)
End If

POS_X = e.X
POS_Y = e.Y

' Dispose of the custom pen.
Pen.Dispose()
End Sub

345:デフォルトの名無しさん
09/09/25 07:10:04
>344 一部ミス

Public Class Form1

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
'position
Dim POS_X As Integer
Dim POS_Y As Integer

Dim g As Graphics
g = PictureBox1.CreateGraphics()

' Create a new Pen object.
Dim Pen As New Pen(Color.Green)

' Set the width to 10.
Pen.Width = 10

If e.Button = Windows.Forms.MouseButtons.Left Then
g.DrawLine(Pen, POS_X, POS_Y, e.X, e.Y)
End If

POS_X = e.X
POS_Y = e.Y

' Dispose of the custom pen.
Pen.Dispose()
End Sub
End Class

346:デフォルトの名無しさん
09/09/25 09:50:06
ボリューム・シャドウ・コピーをVB.NETで行うには
どうやったらいいでしょうか?

347:デフォルトの名無しさん
09/09/25 17:58:49
Dim threads(n) As Threading.Thread
threads(0) = New Threading.Thread(AddressOf Foo)
threads(1) = New Threading.Thread(AddressOf Hoge)
・・・
For Each thread As Threading.Thread In threads
  thread.IsBackground = True
  thread.Start()
Next

でスレッドを作っています。
この後どれかのスレッドが終了するまで待って、その後全てのスレッドを終了させるにはどうしたらいいでしょうか?
(WIN32APIでいうところのWaitForMultipleObjectです)

348:デフォルトの名無しさん
09/09/26 01:22:31
TrackBarコントロールでマウスをクリックしたときに、
その座標が目盛りのいくつなのかを取得したいのですが、
方法を御存知の方、いらっしゃいましたら教えてください。

349:デフォルトの名無しさん
09/09/26 03:07:38
スレッド自体からはWaitHandle取れないみたいだから、
ManualResetEvent1個用意しといて
各スレッドは終了時にSet
かつ随時タイムアウトなしでWaitしてSetされてたら終了
呼び出し側は単にWait
でいいんじゃね?
まあ効率を気にするなら各スレッドでのチェックのために
終了フラグ一個追加した方がいいかも知れんが。


350:デフォルトの名無しさん
09/09/26 03:08:28
>かつ随時タイムアウトなしでWaitしてSetされてたら終了
タイムアウトなしじゃなくて0指定の間違い。


351:デフォルトの名無しさん
09/09/26 11:03:31
オレはそんなに沢山のスレッドを作って何がしたいのかが知りたい

352:デフォルトの名無しさん
09/09/26 12:33:25
そんな面倒なことしなくてもベタにやるだけだと思うけど・・・

全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で
それを呼び出すようにするだけじゃん。
悩むような問題かね。

353:デフォルトの名無しさん
09/09/26 15:31:50
MSChartでY軸を右側にしたいのでYAxisTypeをSecondaryに設定すると
AxisY2.MinimumとMaximumは自動でセットされないんだね。
Primaryなら自動でセットされるのに。
これって仕様?
なんか理由があるんだろうか?

354:デフォルトの名無しさん
09/09/26 16:02:16
>全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で
>それを呼び出すようにするだけじゃん。

そのコード書いてみな。
絶対問題ありのコードになるから。


355:デフォルトの名無しさん
09/09/26 16:26:19
>>354
そりゃトンマなお前さんが書けばそうなるんじゃないの。

俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、
超初歩的な内容だと思うけど。

356:デフォルトの名無しさん
09/09/26 16:28:52
>>353
事故レスだけど
IsStartedFromZeroの設定でした^^;

357:デフォルトの名無しさん
09/09/26 16:30:29
>>355
だから書いてみてよ。
全部のスレッドを終了するメソッドを問題ないように書いてみなよ。


358:デフォルトの名無しさん
09/09/26 16:39:46
>>357
逆にチミが「問題」が発生するコードを書いてみれば?w

俺は馬鹿に説明するためにそれなりに長くならざるをえないサンプルコードを
書くなんてまっぴら御免だけど、ダメなコードのどこがダメでどう直せばいいかを
解説するぐらいの手間は払うよ。

359:デフォルトの名無しさん
09/09/26 16:44:20
あーつまり書けないのか?かけるんなら書けよ。
超初心者でも間違う方がおかしいコードなんだろ。
すぐ書けるだろ。
俺は>>349辺りでどうかなって書いたんだからさ。

まあ絶対書かないよな、お前そういう奴だよ。
>俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、
>超初歩的な内容だと思うけど。
いきなりこういう反応をするやつで、自分からまともに何かを示すやつを見たことがない。

何を言ってもはぐらかすだけで、自分からは絶対に書かないんだよ、


360:デフォルトの名無しさん
09/09/26 16:46:53
単純に字義通りに取った場合、最初のスレッドの処理が終わったら
他のスレッドの処理が途中であっても終了するということになる。
それを指摘してるんだろ。

361:デフォルトの名無しさん
09/09/26 16:49:00
>>359
俺は「かけるんなら書くべき」なんていう妙な価値観を持ってない。

もちろん君がそういう価値観を持つのは勝手ではあるが、
その価値観を他人に振りかざして無理強いする前に、君自身が自分の価値観を
実践したらどうなのか。

362:デフォルトの名無しさん
09/09/26 16:50:28
>>360
誰に向かって何が言いたいの?

363:デフォルトの名無しさん
09/09/26 16:55:40
>>358
クソワロタ
どんなコードをイメージして簡単だと言ったのかなんて>>358以外分からん


364:デフォルトの名無しさん
09/09/26 16:56:30
>>362
>352に対して、言葉は正しく正確にと。

365:デフォルトの名無しさん
09/09/26 17:00:25
>>364
>>360がそんな偉そうなことが言えるような文章なのか。

366:デフォルトの名無しさん
09/09/26 17:06:15
まあ、汎用的な用途を考えるんじゃなくてスレッドの処理内容を全部自分で書くなら
全部のスレッドを強制終了させるようなコードでもまずまず問題はおこらならいだろうと期待はできるけど、
普通にスレッドを扱うようなプログラムを書くやつは、そもそもスレッドを強制終了させようなんて発想しないよね。

>>349みたいなやり方を発想するのがごく普通というか常識な感覚であって、
>>352みたいな発想は出てこない。
>>352みたいな発想はまともにマルチスレッドのプログラムを書いたことがないようなやつの
典型的な発想パターンだよね。


367:デフォルトの名無しさん
09/09/26 17:10:18
>>366
俺はスレッドをアボートする、なんて一言も書いてないが。

先に「問題」があるコードをまず提示しろ、って言ってるのはそのあたりの
微妙な問題もあるからなんだけどね。

368:デフォルトの名無しさん
09/09/26 17:12:21
アボートする以外にどうやって全部のスレッドを終了するメソッドを書くのか教えてくれ。


369:デフォルトの名無しさん
09/09/26 17:13:46
>>368
だから、そんなものはスレッド内の処理に依存する問題であって、
一意にこうだ、なんて言えない。

だから先に「問題」があるコードを提示しろと言ってる。

370:デフォルトの名無しさん
09/09/26 17:14:17
>>367
基地外だなこいつ。

>先に「問題」があるコードをまず提示しろ、って言ってるのはそのあたりの
>微妙な問題もあるからなんだけどね。

>俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、
>超初歩的な内容だと思うけど。

おいw


371:デフォルトの名無しさん
09/09/26 17:16:16
>>370
意味がわからん。

372:デフォルトの名無しさん
09/09/26 17:19:06
>>369
だんだんこいつが何を言ってるのか分からなくなってきた

>そんな面倒なことしなくてもベタにやるだけだと思うけど・・・

>全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で
>それを呼び出すようにするだけじゃん。
>悩むような問題かね。

そのやり方を教えろってんだよ。
>>349に対して
>そんな面倒なことしなくてもベタにやるだけだと思うけど・・・
なんだったらもっとシンプルなべたな方法があるんだろ?

スレッドをアボートしない方法でそんな方法は思いつかないが。


373:デフォルトの名無しさん
09/09/26 17:22:34
>>372
スレッドをアボートするのとスレッドを終了させることはイコールじゃないよ。
こんなことから説明しなきゃならんのかよ。

例えばスレッドの中身が単純なwhileループなら、外からループ条件をfalseに
設定してやればスレッドは終了する。

っていうか、>>347の問題とスレッドの終了方法は直接関係がない。

374:デフォルトの名無しさん
09/09/26 17:26:42
だからそれってほとんど>>349だろ?

それよりもベタな簡単な方法が、
「全スレッドを終了させるメソッドを最後に呼ぶ」
なんだろ?

かつその方法はアボートしないんだろ?

じゃあどうすんの?


375:デフォルトの名無しさん
09/09/26 17:28:25
>>373
>>349見たら明らかだがどうみてもそんなこと分かってるっていうか最初からそう書いてる。


376:デフォルトの名無しさん
09/09/26 17:28:27
単純化して言えば、>>347の問題は>>352に書いたとおり、
各スレッドを終了させる方法(メソッド)が用意されていれば、
全てのスレッドに対応するそのメソッドを呼び出すメソッドを作って、
それを各スレッドの一番最後の処理から呼び出すようにするだけ。

もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して
デッドロックしないよう注意は必要だよ。

377:デフォルトの名無しさん
09/09/26 17:36:45
>単純化して言えば、>>347の問題は>>352に書いたとおり、
>各スレッドを終了させる方法(メソッド)が用意されていれば、
>>354

>各スレッドを終了させる方法(メソッド)が用意されていれば、
www

そのメソッドを示さないと悩むだろw
>悩むような問題かね?
ってんだからさ、悩まないようにしてやれよ。

>各スレッドを終了させる方法(メソッド)が用意されていれば、
>全てのスレッドに対応するそのメソッドを呼び出すメソッドを作って、
>それを各スレッドの一番最後の処理から呼び出すようにするだけ。

>もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して
>デッドロックしないよう注意は必要だよ。

これが、>>349に対して、
>そんな面倒なことしなくてもベタにやるだけだと思うけど・・・
の面倒なことしないベタなやり方なんだな。


378:デフォルトの名無しさん
09/09/26 17:38:19
一番笑えるのは全部後だしでヒントが出た瞬間に反応してくることだな。



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch