VB.NET質問スレ(Part43) [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2016/06/15(水) 11:41:09.50ID:bPj3FmGk
前スレ

VB.NET質問スレ(Part40)
http://toro.2ch.net/test/read.cgi/tech/1365857015/
VB.NET質問スレ(Part41)
http://peace.2ch.net/test/read.cgi/tech/1391334405/
VB.NET質問スレ(Part42)
http://echo.2ch.net/test/read.cgi/tech/1419148239/
2016/10/26(水) 00:46:20.68ID:+x2Xcmzl
そんなにキャストって使う?
tryparseすら使わんのだが
使うとしたらDirectCast(sender, コントロールの型)
くらいだわ
354デフォルトの名無しさん
垢版 |
2016/10/26(水) 01:38:21.10ID:LebVIXiL
キャストの話題でなぜ突然tryparseすらという言葉が出てくるのか謎なのだが
vbだと文字列を数値として評価するような事もキャストって言うの?
2016/10/26(水) 01:56:35.02ID:KQmoHA4r
テキストボックスやSPREADに表示用の値をよく代入するから
キャストは頻繁に行う
また、カンマ区切りの数字を取得するのはキャストとはまた微妙に違うがけっこう面倒臭い
2016/10/26(水) 02:02:30.25ID:McM6fVIv
toStringじゃなくて?
2016/10/26(水) 02:17:47.08ID:Hu8g6Oi9
>>354
C系言語もその辺はいい加減だと思うよ。
例えば
int x = (int)3.14;
は普通に考えれば変換だけど構文はキャストそのものだし普通にキャストと呼ぶでしょ?
358デフォルトの名無しさん
垢版 |
2016/10/26(水) 06:48:15.05ID:LebVIXiL
>>357
キャストって型変換の事だが
むしろそれがキャスト
2016/10/26(水) 08:26:59.08ID:KQmoHA4r
>>356
toStringが定義されてたらいいけど
どういう振る舞いをするのか確認するのも面倒なので
CTYPEやCINTあたりを使ってるよ
DirectCastのほうがミスを減らすためにもいいんだろうなぁ・・・
2016/10/26(水) 08:35:34.34ID:KQmoHA4r
ちょっと真面目な質問したいんだけど
DirectXのDLLってどこいったの?
参照の追加をしようと思ったら見当たらない
2016/10/26(水) 09:17:41.37ID:Zw4eFAd1
もうなくなったよ
SlimDXとかSharpDXとか使おう
ゲーム制作ならもうUnityで
2016/10/26(水) 09:42:18.55ID:EekeRq3r
>>358
本来のキャストはCで言えばポインタ変換だけ
363デフォルトの名無しさん
垢版 |
2016/10/26(水) 12:33:23.43ID:wESs4v7p
>>362
それも誤解
directcast見てそう思ったのだろうけど
型変換は全てキャストだし逆に型変換でないものはキャストではない
本来とかそういう問題でもない
2016/10/26(水) 12:56:23.78ID:EekeRq3r
>>363
言っちゃ悪いけど、それお宅がキャストと変換の区別がついてないだけね。

計算機にとっては文字列の"123"をintの123にするのも、doubleの3.14をintの3にするのも
同じ「変換」だが、Cでは後者だけがキャストの扱いになっていて混乱している。
2016/10/26(水) 13:35:43.91ID:G6/jtze7
Cの議論は他でお願いします
366デフォルトの名無しさん
垢版 |
2016/10/26(水) 19:32:18.87ID:LebVIXiL
>>364
vbしか知らないのに無理してcで例えなくてもいいよw
ちなみに
キャストは型変換であり、変換ではない
文字列→数値の場合文字列の表わす値を数値として評価しているのであり、変換ですらない
二重に間違ってるよお前
2016/10/26(水) 19:56:05.00ID:Kd62j3g9
>>366
お前さんのやってることは変換を評価と言い換えただけ。
そういうのを言葉遊びという。馬鹿じゃないの。

(1) ポインタ変換
(2) double→intの変換
(3) 文字列→intの変換

(1)と(2)の間の差異は(2)と(3)の間の差異より大きい。

(1)は呼び名こそ「変換」となっているが、実際は単にコンパイル時にどの型として扱うかを変更しているだけで
実行時のメモリー上のデータは何も変わってないからだ。

本来のキャストとはこの(1)だけを指す。
368デフォルトの名無しさん
垢版 |
2016/10/26(水) 20:07:53.96ID:LebVIXiL
>>367
いやだから型変換だってばw
せっかく教えて貰ってんだから素直に聞けばいいだろw
そのオレオレ理論を意固地に貫いてもお前に何のメリットもないよ
2016/10/26(水) 21:02:06.42ID:X0t3H/iP
おまいら根拠にしてるソースURLなり書籍名なりplz

出せずに慣例だの常識だので曖昧に誤魔化して逃げる俺様定義絶対合ってる匿名マンなんてただの荒らしでしかない。
スルーして過疎スレに戻ろうず
2016/10/26(水) 21:59:35.35ID:QysY5RXf
>>367
クソワロタwww
2016/10/26(水) 23:28:49.10ID:KQmoHA4r
ポインタ変換って何なんだ?
ググっても全くヒットしないんだがコンパイラ業界では隠れた隠語なのか?
2016/10/27(木) 00:26:42.82ID:i508Z9Hm
しつこいな
373デフォルトの名無しさん
垢版 |
2016/10/28(金) 00:19:57.23ID:8f+wXH5p
マジレスすると
キャスト(cast)は変換や型変換のことじゃないよ
英単語としてのcastの意味のそのまんまの「配役、役の割り当て」って意味だよ
2016/10/28(金) 00:30:05.75ID:5ko2vSX6
>>373
真面目に言ってそうで怖いなw
さすがVBer
2016/10/28(金) 12:39:29.03ID:4C9WQUMb
なんでVBの拡張メソッドはModuleなんだ
グローバルメソッドとしても使えちゃって気持ち悪いんだが
2016/10/28(金) 12:51:16.32ID:GTOY14JQ
VBはそういうの気にしない人向けの言語なので
377デフォルトの名無しさん
垢版 |
2016/10/28(金) 20:11:10.63ID:wjrX//6G
たかだか記法の問題をいちいち気にする方がどうかしてる
2016/10/28(金) 20:42:45.43ID:ch5b/kiY
>>377
たかが記法の問題?本当にそう思う?
名前空間汚染の問題と単なる記法の問題の区別がつかないのがVBerらしいね
379デフォルトの名無しさん
垢版 |
2016/10/28(金) 21:17:37.68ID:wjrX//6G
>>378
グローバルな識別子=汚染
ではないのだよ
「汚染」てのはライブラリが定義する意図しないグローバルな識別子が問題になるから
悪意を込めて使う言葉で自分で定義したりそれを望む場合には汚染て言葉は使わんよw
字面だけでなくちゃんと言葉の意味を覚えてから使おうね
2016/10/28(金) 21:24:21.37ID:1gzGBtQ8
>>379
プログラム作ってるのがお前だけならな…
2016/10/28(金) 21:34:22.91ID:8wjGwqyI
>>379
同意ですね
2016/10/28(金) 22:00:09.91ID:684gpVHK
VBerって言いたいだけやろ
2016/10/28(金) 22:55:03.12ID:ch5b/kiY
>>379
VBerは揚げ足取りしかできないのか
仮に汚染という言葉が不適切だったとしても単なる記法だけの違いではないのは確かだろ?
別に俺はモジュールは名前空間を汚染するから如何なる場合でも使うなと言っているわけじゃなく、
それが問題になるケースはあるから単なる記法の問題ではないと言っているだけだ
実際>>375は気持ち悪いと言っているのだから少なくとも>>375にとっては「汚染」だろう
2016/10/29(土) 00:37:53.79ID:vKDUHJSk
汚染の定義と使用法はどうでもいいんだが
グローバルメソッドの定義を教えてくれ

拡張メソッドが通常のメソッドとして呼び出せることが問題だっていうならわかるが
C#の拡張メソッドだって、利用可能な名前空間内に存在する必要があるわけで
モジュールうんぬんは意味がわからん
2016/10/29(土) 00:57:42.29ID:9Fs7N4rN
VBのモジュル内のメソッドはグローバル
クラス内の静的メソッドみたいにクラス内の名前空間内に存在しているわけではない。

まあ、ラムダ式といい、もう2008以降はVB使わない方がいいよっていうメッセージでしょ。
少なくとも俺はそう受け取って2005まででVBは見限った
2016/10/29(土) 01:22:39.12ID:vKDUHJSk
>VBのモジュル内のメソッドはグローバル
そのグローバルの意味が分からんのだが?
VBだとデフォルトでプロジェクト名の名前空間内に属してるはずだが
その名前空間を超えると?
2016/10/29(土) 02:08:01.24ID:9Fs7N4rN
正直長年VB使ってた中で一度もモジュールなんて使ったことなかったけど、
一応モジュールも名前空間の中(ルート名前空間に限らず)に定義できるんだな。

それはいいけど、モジュール自身が名前空間を構成しないから、
そのメンバーはモジュールが存在する名前空間を参照しただけで丸見えになっちゃうわけで
普通に考えれば拡張メソッドはC#と同様に静的クラス(VBにはないけど)に定義する方がよかったね
2016/10/29(土) 07:10:41.84ID:ddj4bzvw
>>384
モジュールはそれを含む名前空間をImportしただけ(or 同じ名前空間にあるだけ)で
モジュールのメンバが全てトップレベルのスコープにインポートされるだろ
拡張メソッドは オブジェクト.メソッド名 の形式でしか呼び出せないから、
トップレベルで参照可能な名前が増えるわけではなく影響は小さい
C#は最近のバージョンで using static が入ってクラスのstaticメンバをトップレベルにインポートできるようになったが
名前空間単位ではなく対象のクラス名を直接指定しなきゃいけないからやはりモジュールに比べれば影響は小さい
2016/10/29(土) 08:03:59.22ID:UEy06zu0
先頭にusingが列挙してあるC#のソースの見づらさと言ったら
しかも書いた人によってか、usingの羅列が違うという
2016/10/29(土) 08:14:31.49ID:ddj4bzvw
VC#には 未使用のusingの削除・整理 という機能があってだな
それでも見づらいようなロクに責務分割できてない長大なコードなら
usingが無かろうが見づらいから安心しろ
2016/10/29(土) 09:08:07.61ID:ov/h/7tc
そういや参照の自動削除機能がなくなったな
あれ便利だったのに
2016/10/29(土) 10:30:39.20ID:dpmyBZLi
Moduleがないとリプレースしたときにお客様がModuleがClassに変わってるんですけど使いにくいんですけどってご立腹なさるのでModuleは必要
2016/10/29(土) 11:44:59.26ID:cpi9mNqo
>>389
そこは(普通のプログラマが普通にプログラミングしてれば)VB使っても同じになるはずなんだけどw
むしろあんたはどういうコード書いてるのかとw
2016/10/29(土) 19:48:16.97ID:wsj9Hrl0
>>389
羅列が違うって何?
2016/10/29(土) 20:01:25.49ID:3eGSrWP/
>>394
using の順番
2016/10/29(土) 20:16:52.74ID:ddj4bzvw
>>393
ところがVBには、プロジェクトの設定で指定した名前空間を全てのソースで暗黙的にImportするというゴミのような機能がある
2016/10/29(土) 21:11:12.71ID:wsj9Hrl0
>>395
そんなもん自動で揃えられるだろ
2016/10/29(土) 22:52:27.70ID:UEy06zu0
>>396
そのほうが自然じゃないのか
プロジェクト内のソースごとにまちまちなほうが違和感を感じるが
2016/10/29(土) 22:59:38.63ID:wsj9Hrl0
>>398
ゴミキタ━━━━(゚∀゚)━━━━!!
2016/10/29(土) 23:03:06.39ID:i+DlxK4w
コードをプロジェクトの外に持ち出したら何が書いてあったかわからなくなるというほかは
デメリットが思いつかない
2016/10/30(日) 00:15:39.58ID:oo8ByUW6
>>399
おれ、いつも System.Linq だけ有効にして、残りは切って使ってるので
一括して名前空間の設定が出来て便利

usingのほうが不便
2016/10/30(日) 00:21:18.07ID:payAbzEM
>>401
他は全部明示的にImportしてるってこと?
お前完全にusing派だろw
2016/10/30(日) 00:27:55.69ID:ALtsNIP3
>>396
ああ、そういやそんな機能あったね

BCLのほとんど必須の名前空間だけならありかなとも思うけど、
コード上に明示されないのはやっぱり気持ち悪いな

VBはあの有難迷惑のルート名前空間も鬱陶しいね
2016/10/31(月) 16:51:00.87ID:jCI7ny/t
ディクショナリーのキー取得時に dicHoge.Keys(intIndex) の様に書くと
VisualStudioでは問題無いのに、ideone上でエラーになってしまいます。
何か他に書き方があるのでしょうか?
2016/10/31(月) 17:17:30.13ID:OqD2s4Cc
うわ何これキモい
暗黙にElementAtOrDefaultに変換するのか

教科書的には
Dictionaryは順番を持たないコレクションだからインデックスでアクセスするのは変
2016/10/31(月) 17:35:37.71ID:SAEZOlIl
別にキーで要素を検索できることと要素が順序を持つことは何も矛盾しないと思うけどねw
2016/10/31(月) 17:40:32.47ID:OqD2s4Cc
うん、確かにそれはなにも矛盾してないね
2016/11/02(水) 06:49:35.74ID:/u8gEGW5
DelegateなメソッドをInvokeで呼ぶときに引数って渡せないのでしょうか?
2016/11/02(水) 06:57:27.71ID:2fBE4wO9
渡せる
2016/11/02(水) 06:58:55.82ID:/u8gEGW5
>>409
助かりました。
2016/11/02(水) 08:50:07.47ID:t5KdzDu6
VB久しぶりに触る機会があったけどc#よりちょびっとインテリセンスが馬鹿じゃないか?って感じた
412デフォルトの名無しさん
垢版 |
2016/11/03(木) 14:55:47.96ID:8QV9xAcD
>>411
気のせいだよ。
それより末尾に";"つける癖から早く卒業しましょう。
2016/11/03(木) 15:08:37.98ID:I4v6hDq5
すぐ上の話題で答え出てるじゃん
ソースのトップレベルに出現する可能性のある識別子の数がC#に比べて遥かに多いからだよ
モジュールと既定のインポートのせい
2016/11/07(月) 19:08:16.41ID:CxfskhGH
誰かいる? 質問良いですか?
今RichTextBox派生のカスタムコントロール作ってて、
ちょっと詰まってる所があるから詳しい人教えてほしい
2016/11/08(火) 00:51:44.51ID:ysYQgtdr
質問いいですか?と聞いておきながら質問しないアホ発見
2016/11/08(火) 01:46:02.67ID:/yxQhcwh
すごいこと質問していい?
2016/11/08(火) 02:11:19.46ID:crOcTVn5
誰も居ないのかと思った。質問して良いなら質問させてもらいます

当方、数か月前からVB.NETを始めた初心者なので、
コードが意味不明とか手法が悪いとかあれば、それも含めて指摘頂けるとありがたいです

RichTextBoxにOnPaintで文字を描写しようとして試行錯誤してるんですが、
WndProcでIMEを監視して、変換が確定するまでの間OnPaintが動作しないようにする事で、
都度TextChangedで日本語の文字入力の確定はされないようにできたんだけど、
今度はIMEに入力中の文字が真っ白で表示されない

なので、入力中の文字を表示するのに、
ImmGetCompositionStringで取得した文字をDrawStringで書いてみようかなと思っているのですが
取得が上手くできません
2016/11/08(火) 02:13:54.72ID:crOcTVn5
WndProc内で、

Select Case m.Msg
Case WM_IME_STARTCOMPOSITION
ForIME = True

Case WM_IME_ENDCOMPOSITION
ForIME = False

Case WM_IME_COMPOSITION
If (CUInt(m.LParam) And CUInt(GCS_COMPSTR)) > 0 Then
Dim intLength As Integer
Dim Imc As IntPtr = ImmGetContext(Handle)

intLength = ImmGetCompositionString(Imc, GCS_COMPSTR, Nothing, 0)
Dim IMEstr As StringBuilder = New StringBuilder(intLength)

ImmGetCompositionString(Imc, GCS_COMPSTR, IMEstr, IMEstr.Capacity)

ImmReleaseContext(Handle, Imc)
End If
End Select

こんなかんじで書いてみているのですが、
intLength = ImmGetCompositionString(Imc, GCS_COMPSTR, Nothing, 0)
↑この部分でDLL 'imm32.dll' の 'ImmGetCompositionString' というエントリ ポイントが見つかりません。というエラーが出てしまいます。
2016/11/08(火) 02:15:58.84ID:crOcTVn5
ImmGetCompositionStringは、
Private Declare Function ImmGetCompositionString Lib "imm32.dll" (ByVal hIMC As Integer, ByVal dwIndex As Integer, ByVal lpBuf As StringBuilder, ByVal dwBufLen As Integer) As Integer
と宣言しています。
2016/11/08(火) 02:21:59.90ID:KFsAZFmi
>>419
テキトーに答えるけどとりあえずハンドルはIntPtrでないとダメでしょう
2016/11/08(火) 02:35:47.42ID:crOcTVn5
他の、ImmGetContext等のhWndが入る部分はIntPtrにしているのですが……(+_+)

Private Declare Function ImmGetCompositionString Lib "imm32.dll" (ByVal hIMC As IntPtr, ByVal dwIndex As Integer, ByVal lpBuf As StringBuilder, ByVal dwBufLen As Integer) As Integer
これでもエラーが出るみたいです
2016/11/08(火) 03:01:24.83ID:crOcTVn5
やばい寝落ちそう……

質問板は出した質問は絶対閉めろというルールがある場所多いですがここはどうなんですかね?

1時間くらいは粘りたかったけど、眠いのでいったん引き上げます
もう一回試行錯誤して、どうしても駄目ならまた改めて来ます
>>420さん答えてくれてありがとう
2016/11/08(火) 07:24:04.77ID:Tr1jXB8d
Windows NT/2000 は Unicode 版と ANSI 版を実装
2016/11/08(火) 07:25:30.64ID:Tr1jXB8d
そもそも「エントリ ポイントが見つかりません」の意味分かってる?
2016/11/08(火) 07:35:37.22ID:ic1oOtKi
そもそもRichTextBoxにOnPaintで文字を描写って意味がわからん
それRichTextBox使う意味あるのか?
2016/11/08(火) 07:49:06.42ID:Iqb/ffmt
近年、若者のエラーメッセージ離れが深刻な問題になっています
2016/11/08(火) 09:05:00.96ID:crOcTVn5
おはよう

うーん、わかるかどうかと言われれば微妙なので調べながらやってんですが、
スペルミスかなと思ったけど違うみたいで
関数の大文字小文字の違いって可能性もあるんですね。
後で時間できたら見てみよう……

>>425
ルーラや行番号や空白や改行等の特殊文字が表示されて、
かつ文字色も変えられるようなテキストエディタが作りたくて

普通は違うのでやるんですかね? 例えばPictureBoxに描くとかですか?
もっと効率良い方法とかってあります?
2016/11/08(火) 09:38:24.41ID:+DS6ozoh
オープンソースのエディタのソース読んだ?
話はそれからだ
2016/11/08(火) 10:18:57.02ID:Tr1jXB8d
>>427
imm32.dllの中にImmGetCompositionStringが無いよって言ってるんだから
ImmGetCompositionStringAかImmGetCompositionStringW探せって言ってるんだけど…
2016/11/08(火) 11:11:17.92ID:crOcTVn5
Declare Function ImmGetCompositionString Lib "IMM32" Alias "ImmGetCompositionStringA" (ByVal hIMC As Integer, ByVal dwIndex As Integer, ByVal lpBuf As StringBuilder, ByVal dwBufLen As Integer) As Integer
に変えたら解決しました。ありがとうございます(*^-^*)

>>428
なるほど、確かにそうやって勉強できますね!
探してみます。ありがとう
2016/11/08(火) 11:49:04.58ID:h2p8PH96
ん?
いちいちAとかWとかつけなくても自動的にUnicodeバージョンが選択されるように
なってるはずだと思ったけど、VBは違うのか?
2016/11/08(火) 12:11:48.40ID:h2p8PH96
DllImport使わずにDeclareなんてVBのレガシー機能使ってるからかな。
ちなみに、デフォではANSIバージョンが選択されるんだな記憶違いだった
2016/11/08(火) 13:57:55.49ID:VtVauF4w
わざわざAliasなんて付けるから自動選択が働かない
なんでか知らんけどDeclareのサンプルはほとんどAlias付けてるんだよな
VB6だと必須だったのかね?
2016/11/08(火) 15:14:26.16ID:Tr1jXB8d
>>433
付けないとエラーになるっつってんだろ
2016/11/08(火) 15:23:43.48ID:VtVauF4w
あ、ごめん
Declare Autoにした場合のみだったのね
2016/11/08(火) 20:21:53.56ID:t3tssHtU
デフォはどっちかすぐ忘れるから明示する
437デフォルトの名無しさん
垢版 |
2016/11/09(水) 00:41:48.78ID:NSJDTbF5
>>416
駄目です。
2016/12/06(火) 23:28:37.80ID:qDbNXMxz
テキストボックスとかコントロールをコピーしたいんだけど、簡単にできませんかね?
2016/12/07(水) 00:48:28.39ID:wAmrJ/1m
ctrl-c、ctrl-v じゃあかんの?
2016/12/07(水) 00:59:33.95ID:SEeb/ONi
すいません、インスタンスをコピーです
2016/12/07(水) 02:09:55.02ID:fOypxOSG
>>438
簡単にできる
http://ideone.com/ZFaUb7
2016/12/20(火) 21:56:31.88ID:f9HTxJj+
データベースから大量のデータを取得するときってDataTableとDataReaderどっちがいいの?
2016/12/20(火) 22:13:21.49ID:wmh5vlKz
DataTableはオンメモリだから処理できるデータ量には限界があるし、
DataTable.Loadだと全部のロードが終わるまで処理を始められないので
ロード中のIO待ちの時間が無駄になる。
もし大量データ処理時のメモリ使用量やスループットが問題になっているなら
DataReaderでストリーミング処理することで性能を大幅に改善できるはず。
444デフォルトの名無しさん
垢版 |
2016/12/20(火) 22:40:05.78ID:gUOuUtAj
youtubeを開くと
一番上の検索ボックスがさ
入力無しだとグレイ文字で検索って表示されてて
(この検索文字にカーソルは移動しない)
何かを入力するとグレイ文字が消える
これってどうやって実装するんすかね?
パッと思いつかんのだが。。。
445デフォルトの名無しさん
垢版 |
2016/12/20(火) 22:43:07.08ID:TSG9jdVQ
パッと思いつかん時はジックリ考えろ
それでも思いつかんかったらソープ行け
2016/12/20(火) 23:12:04.98ID:wmh5vlKz
>>444
HTMLのplaceholderだよ
2016/12/20(火) 23:16:47.98ID:gUOuUtAj
>>446
ありがとう
知らんかったわ
勉強になった

vbでも実装できないかな?
2016/12/23(金) 17:17:30.06ID:89cvwMZr
時々テキストボックスを監視して、空の時だけ重ねた別のテキストプレーンにSearchとか表示させるとか…
他にも色々方法はあるやろ
2016/12/23(金) 17:58:29.05ID:89cvwMZr
言った手前
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
If textBox1.Text = "" Then
textBlock1.Text = "Search"
Else
textBlock1.Text = ""
End If
End Sub
2016/12/23(金) 18:19:03.14ID:jhZLEzKr
カレットが入るまでは淡色の文字表示しとってカレットが入ったら背景画像に差し替える
文字が入ったら白背景とかw
2016/12/29(木) 07:29:02.60ID:qvNXwZDz
データベースをアクセスするプログラムってACCESS以外は、埋め込みSQLとC言語を使ってUNIX上でしかやったこと無いロートルですが、
VB.NETでDBアクセスって今は何が主流なん?
ADO.NET関係の書籍って、アマゾンでも結構古いのが多いんだけど、ADO.NETって過去の遺物なん?
2016/12/29(木) 07:50:42.07ID:HW4fqFSE
SQLServerならばADO.NET
OracleならODP.NETだな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況