VB.NET質問スレ (Part7) ..
[2ch|▼Menu]
175:デフォルトの名無しさん
04/10/18 21:15:52
>>170
そもそもLoadイベントでなにか処理をするなんて根本から間違い。
別のタイミング(たとえばActivatedイベントなどで)行うべき。

さらに、そんな重い処理なら別スレッドで実行するようにするべき。
>>172には悪いが、DoEventsなんて下策中の下策。
というか、>>170の問題はDoEventsでは恐らく解決しないだろう。

176:デフォルトの名無しさん
04/10/18 21:57:26
質問です。
Dim Class1 As ClassName
...
Class1 = New ClassName(0)
...しばらくClass1を使う
Class1 = New ClassName(1)

こんなことしてもVBさんは勝手にお掃除してくれるのでしょうか?


177:デフォルトの名無しさん
04/10/18 22:06:37
しばらくしたら掃除してくれる

178:176
04/10/18 23:54:05
>>177
ありがとうございました。

179:デフォルトの名無しさん
04/10/19 01:46:45
その、GCの仕組みってどうなってるのかなぁ

180:デフォルトの名無しさん
04/10/19 01:50:42
ガベージをコレクトするのだよ。

181:デフォルトの名無しさん
04/10/19 01:58:07
できる!VisualStudio.NETには
参照が解除された後に適当な時期に破棄される
とある



182:170
04/10/19 10:29:39
>>175
ありがとうございました。
別スレッドで実行できる事を知りませんでした。
(Activated はFocusが移る度に実行されてしまうので向いていませんでした)


183:デフォルトの名無しさん
04/10/19 15:00:46
スクロールバー付きのテキストボックスで
キーボードからの入力は不可、表示はプログラムからのみ。

この時、テキストボックスの大きさより表示行が増えた時に、
一番下の行を常に表示したいのですが、
どういう設定をしたらいいのか教えてください。

現状は、行数が増えても同じ場所を表示してしまいます。
お願いします。

184:デフォルトの名無しさん
04/10/19 16:01:33
>>183
テキストの入力位置をSelectメソッドで一番最後に指定して、
ScrollToCaretメソッドでその位置を表示させる

具体的にソースを書けば、以下のような感じ
MyTextBox.Select(MyTextBox.Text.Length, 0)
MyTextBox.ScrollToCaret()


185:デフォルトの名無しさん
04/10/19 16:54:03
久々に回答らしい回答を見た希ガス

186:183
04/10/19 17:07:42
>>184
ありがとうございます。
早速試してみます。

187:デフォルトの名無しさん
04/10/19 18:11:22
っていうか久しぶりにVB.NETの問題を見たから答えただけだけどね

188:デフォルトの名無しさん
04/10/19 20:13:04
引数の数を可変にする方法があったら教えてください。

Function x(a As String,b As String,c As String,d As String)
という感じのファンクションを呼び出す時に、
ある部分からは、aのみ設定して
ある部分からは、a,b,c,を設定する
という様な処理をしたいのですが。

よろしくお願いします。

189:デフォルトの名無しさん
04/10/19 20:17:31
>>188
Overloads

Optionalってキーワードもあるが、これは旧VBの負の遺産だから
使わないほうがいいと思う。

190:デフォルトの名無しさん
04/10/19 23:56:34
すいません、ASP.NETを使えるレンタルサーバーを借りたのですが、使用時の心得に、
「共有サーバーとしてのデバッグ知識のない方はASPは絶対に利用しないでください!
ローカルテストと共有サーバーは環境が全く違います」
という内容がありました。
これは、VisualSTudio.netのデバッガと、@pageやTrace.write()の相違のことを言っているのでしょうか?

191:デフォルトの名無しさん
04/10/20 00:24:13
せめてそのレンタルサーバのアドレスぐらい書いてくれれば・・・

192:デフォルトの名無しさん
04/10/20 00:31:05
>191
190の2行目そのまま、ぐぐるとヒットするようね。


193:デフォルトの名無しさん
04/10/20 00:42:48
190です。
すいません,上記内容はメールで送られてきたものです。
ASPの使用心得は、以上のみでした。
常識的には、VisualSTudio.netのデバッガと、@pageやTrace.write()の相違ということでいいのでしょうか?


194:デフォルトの名無しさん
04/10/20 07:09:10
要するに>190はASP使うなってことでしょ。
わかってないんだから。

195:188
04/10/20 08:32:22
>>189
ありがとうございます

196:デフォルトの名無しさん
04/10/21 00:27:49
VB.netって、コントロール配列のやり方が、VB6.0と違いますよね。
VB6.0では、コピーアンドペーストでできたけど・・・
みなさんは、どうやってコントロール配列を作っていますか?
俺が見つけた方法は、どれもコードが汚くなる。
コードがきれいになる方法をご存知ないでしょうか

197:デフォルトの名無しさん
04/10/21 00:55:08
>>196
質問は明確に。

どうやってもこうやっても、ないものは作りようがない。
つまりまったく同じ機能を享受したい、というわけにはいかない。
それはわかってるんでしょ?

だったらなぜ、コントロール配列のこの機能と同じことができないか?
という風に質問しないの?

198:デフォルトの名無しさん
04/10/21 08:49:37
>>196
コントロール配列を使うことがあまり無いかな

たまに使うときはコンストラクタで
MyButton(1) = MyButton1
MyButton(2) = MyButton2
MyButton(3) = MyButton3
ってしておく

あとは実行時に複数登録する場合もあり

Dim i As Integer

For i = 1 To 10

   Dim item As MenuItem = New MenuItem("MenuText")
   AddHandler item.Click, AddressOf MyMenuItem_Click
   MyMenu.MenuItems.Add(item)
Next


199:K
04/10/21 16:24:03
メールソフトを作ろうと思っているのですが、
POPサーバーにログインするにはどうしたらいいかわかりません。

どなたか、教えてくれませんか〜?

200:デフォルトの名無しさん
04/10/21 16:47:10
>>199
C#でちょこっと作ってみた。
URLリンク(www.asahi-net.or.jp)

もし読んでなければ、RFCを読むのがおすすめ。
URLリンク(www.goto.info.kanagawa-u.ac.jp)

201:デフォルトの名無しさん
04/10/21 16:48:18
URLリンク(www.goto.info.kanagawa-u.ac.jp)
単純なプロトコルだけあって短いな

202:ぬるぽ大明神
04/10/21 16:52:37
ここは初心者にやたらと優しいスレですね。

203:K
04/10/21 16:57:32
>>200,201
POPサーバーにログインだけするにはどうすればいいですか?

204:デフォルトの名無しさん
04/10/21 17:11:43
>>203
USERとPASSを送って待機(かQUITで終了)。
なんの意味があるかわからんが(POP before SMTPのためか?)。

205:K
04/10/21 17:18:18
>>204
>なんの意味があるかわからんが(POP before SMTPのためか?)。
その通りです。
ソース作ってもらえませんか?

206:デフォルトの名無しさん
04/10/21 17:21:26
URLリンク(dobon.net)
( ゚Д゚)ウボォアー

207:K
04/10/21 17:27:09
>>206
ソースがほしかったんですけど、なかなか聞き出せなくて…
ごめんなさい。

208:デフォルトの名無しさん
04/10/21 17:34:02
死刑確定ですか?

209:K
04/10/21 17:46:47
で、POPサーバーにログインするにはどうしたらいいのですか?

210:デフォルトの名無しさん
04/10/21 18:09:17
ググりゃ出てくるがな

211:デフォルトの名無しさん
04/10/21 18:28:49
VB.NETで縁取りした文字列の形にコントロールを切り抜きたいと思ってます。
GraphicPathに文字列を追加して、DrawPathで太めの縁を描画すると、
元のパスから外側に少しはみ出しますよね?
このはみ出た分も収まるようにコントロールのRegionを設定したいのですが、
何か方法ありますでしょうか?

212:デフォルトの名無しさん
04/10/21 23:47:49
>>211
やったことないんで間違ってたらゴメン。
これ使ってパスを「膨張」させといて、そのパスからリージョンを
作ればいいんじゃないかな。
URLリンク(www.microsoft.com)

213:K(偽者)
04/10/22 05:17:14
で、ログインのソースはまだですか?

214:デフォルトの名無しさん
04/10/22 10:05:14
>>213
今作っています。2年程待って下さい。

215:デフォルトの名無しさん
04/10/22 10:26:29
>213
2年もまてませんよね?
ソースあります。1行100円でどうですか?
全体で30万行ほどあります。

216:211
04/10/22 10:37:29
>>212
ほぼ思った通りのことができました。
ありがとうでした。

217:デフォルトの名無しさん
04/10/22 10:52:44
チェックボックス状態の配列参照の仕方について教えてください。

チェックボックスが複数あり、そのcheckd状態を
check(1),check(2)・・・といった感じの配列として参照したいのですが、
方法が分かりません。
お金は払えませんが、よろしくお願いします。

218:デフォルトの名無しさん
04/10/22 12:29:28
>217
ちょっとは過去ログ嫁

219:デフォルトの名無しさん
04/10/22 12:42:48
>>196=217?


220:K(偽者2)
04/10/22 12:52:07
>>215
分かりました、3000万円ですね。
バイトで貯めますので、3年待ってください。

221:217
04/10/22 18:00:14
>>218
検索のヒントとなるキーワードだけでもお願いします。
ちなみに、フォームのデザイン上CheckListBoxでは無く、
CheckBoxでの配列参照を考えています。
お願いします。

222:デフォルトの名無しさん
04/10/22 18:27:01
現在ログオンしているユーザーを取得するのはどうすんの?
GetUserNameだとユーザー切り替えに対応してないから無理なんだけど....
教えてエロイ人

223:デフォルトの名無しさん
04/10/22 18:30:07
デジャヴを感じる・・・

224:デフォルトの名無しさん
04/10/22 23:16:56
VB.NET のプロジェクトに、VB(というかWindowsプログラミング)経験無しで
いきなりつっこまれました(いままで Unix で C か Java)

VB.net で業務画面アプリを作っていて、サーバにXMLで電文を
送っているんだけど、xsd というファイルは XML スキーマですよね。
xsx と resx っていうのがセットであるんだけど、この二つはなに?
たとえばソースコードを VSS なり CVS で管理するとき、
xsd は必要だけど、xsx や resx もあった方がいいの?

225:デフォルトの名無しさん
04/10/23 01:25:34
通信処理で、非同期スレッド内で受信データを読込み、読込みが完了したら、イベントを発生させ
フォームでそのイベントを受け取ろうとしています。
で、フォームでイベントを受けた時に、TextBoxのプロパティをウォッチウィンドウで参照しようと
するとプロパティの欄が全て"Error:Cannot obtain value"となります。
いろいろ試したのですが、なぜこのようなエラーが発生するか見当もつきません。
どんな些細なことでもかまいませんので、皆様の意見をお聞かせください。
簡単なソースを付けておきます。(フォーム上にテキストボックスとボタンを貼り付けてください。)

226:225
04/10/23 01:26:00
Public Class Form1
Inherits System.Windows.Forms.Form
WithEvents test_cls As New test
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
test_cls.Start()'受信スレッド実行
End Sub
Private Sub test_cls_test_Event(ByVal count As Integer) Handles test_cls.test_Event'受信完了したイベント
TextBox1.Text = count'ここで、TextBox1をウォッチウィンドウでデバックしようとすると、"Error:Cannot obtain value"となる
End Sub
End Class

Class test'簡単な通信クラスのつもり
Public Event test_Event(ByVal count As Integer)
Private m_Thread As Threading.Thread
Public Sub Start()'スレッド開始ポイント
m_Thread = New Threading.Thread(AddressOf test_Thread)
m_Thread.Start()
End Sub
Sub test_Thread()'受信データチェックスレッド
Dim Count As Integer
While (1)
RaiseEvent test_Event(Count)'受信データが有りとみなして、イベントを発生させる
Count += 1
System.Threading.Thread.Sleep(10000)
End While
End Sub
End Class

227:デフォルトの名無しさん
04/10/23 01:35:36
>>225
たぶんDOBON.NETさんのメルマガの25号に書いてあるようにすればいいんじゃないかな。

228:225
04/10/23 01:58:55
>>227
ありがとうございます。まさに、行いたい事がそのまま書いてありました。
以前BeginInvokeも試したのですが、
その時は、サンプルもほとんどなかったのでどうやら使い方が間違っていたみたいです。
サンプルも豊富に載っているみたいなので、ちょっと勉強してきます。

229:デフォルトの名無しさん
04/10/23 12:06:14
>>222
ここにその方法がある
URLリンク(forums.belution.com)

でもVC用なので俺はわからん
誰かVB用に書き直してくれ

230:デフォルトの名無しさん
04/10/23 17:01:05
仮に王とジンの強さが同じくらいとする。
でも、ネテロや他のハンターが王を倒したら、ジンの強さって何?ってことになる。
しかも、その後の展開で、旅団との強さのバランスが取りにくい。

よって、
ジン>>>王=クロロ>ネテロ>>>ネフェルピトー、シャウアプフ、モントゥトゥユピー>カイト>>>ゴン、キルアほか討伐メンバー

これくらいが妥当。

231:デフォルトの名無しさん
04/10/23 23:22:16
VB.NETでADO.NETを扱う質問です。
ACCESSデータベースに接続して編集をする場合
OleDbParameterを
CurrentパラメーターとOriginalパラメーターと2つ用意することは
わかったのですが、
パラメータ自動生成を使った場合
OleDbUpdateCommandのパラメーターに
NAMEカラムなら
NAMEというCurrentパラメーターと
Original_NAMEというOriginalパラメーターと
Original_NAME1というOriginalパラメーターができています。
3つ目のOriginal_NAME1は何の目的で生成されているのですか?


232:デフォルトの名無しさん
04/10/23 23:26:07
>>230
すざましい誤爆だな。

233:デフォルトの名無しさん
04/10/24 15:27:55
すいません、初心者の質問をさせてください(初心者質問スレはないようなので)。

3個の数字をタイムラグをつけて次々と表示させたいのですが、
      number1.Text = number1
      (空ループorTimer プロパティ)
number2.Text = number2
      (空ループorTimer プロパティ)
number3.Text = number3
としても、3つの数字・ラグ・数字・ラグ・数字のようにはならず、ラグのあとに
3つの数字がまとめて出てきてしまいます。
当方通常のBASICは使ったことがあるので同じノリでこのようにやってみた
のですが、なぜそうなってしまうのか全く分かりません。

どうすればいいのか、何故そうなるのかを教えていただければ幸いです。




234:デフォルトの名無しさん
04/10/24 17:47:19
number1.Text = number1
(空ループorTimer プロパティ)
number2.Text = number2
(空ループorTimer プロパティ)
number3.Text = number3
(画面の描画)

となってるから。

235:224
04/10/24 21:19:59
>>224
すみません、レスをいただければうれしいです。

236:デフォルトの名無しさん
04/10/25 19:12:56
Dim ApplicationFolder As String = "\\192.168.100.1\ftp\"
Dim fileName As String = nekomimi
Dim codeNo As String = 67890
Dim WriteFileStream As FileStream = New FileStream(ApplicationFolder & a & ".mit", FileMode.Create, FileAccess.Write)
Dim TextStreamWriter As StreamWriter = New StreamWriter(WriteFileStream, Encoding.GetEncoding("Shift_JIS"))
TextStreamWriter.WriteLine(b)
TextStreamWriter.Close()



237:デフォルトの名無しさん
04/10/25 19:13:21
上記のようなプログラムで、ファイル名”nekomimi.mit”を作成してから、ネットワークで共有されたディスク内に格納
しておき、メールで【\\192.168.100.1\ftp\nekomimi.mitをクリックしてください。】というリンクつきのアナウンスを
流し、アドレスクリック一発で.mitに関連付けておいた.exeを起動、codeNoを読み取ってから変数aに代入したいのですが
初心者用の書籍には、こういう使い方が出ていません。

どなたか、こういう使い方をされた事のある方、ヒントをいただけないでしょうか?

238:233
04/10/25 19:50:03
>>234
それは何故なんでしょう?
何かいい手はありますでしょうか?



239:デフォルトの名無しさん
04/10/25 22:20:18
>>238
明らかに
> (空ループorTimer プロパティ)
のところが悪さしてるのだから、その部分のソースをupするべし。

240:デフォルトの名無しさん
04/10/25 22:22:50
>>238
間に application.doeventsだったかな?
それいれたらいけるんじゃないかな


241:デフォルトの名無しさん
04/10/26 01:08:39
DataGridのHeaderのHeightはどうやったら調整できますか?

242:233
04/10/26 01:33:11
>>240
それを入れたらうまく行きました。ありがとうございます。
ただ、それってラグの間に操作を受け付けるようにする処理ですよね?
全然関係ないように思えるんですが、なぜそれでうまく行くんでしょう…?

243:デフォルトの名無しさん
04/10/26 02:59:53
WebClient.DownloadFileを使用して
1本のファイルをダウンロードするプログラムを作っています。
ダウンロード中にプログレスバーで進捗を表示したいのですが、
ファイルの何%をダウンロードしたかを取得してリアルタイムに表示する方法ってあるのでしょうか?


244:デフォルトの名無しさん
04/10/26 03:28:00
>>243
WebClient.DownloadFileじゃ無理。
WebRequest, WebResponseを使ったストリーム受信を行う必要がある。

245:243
04/10/26 03:43:46
>>244
ありがとうございます。さっそく調べてみます。

246:でき
04/10/26 08:54:03
すいませんが、どなたか、VB.netにてwin2000、winXPの端末がコンピュータロック中か取得する方法をご存知でしょうか?


247:デフォルトの名無しさん
04/10/27 21:24:01
NULL文字で終わるANSI文字列を受け取る関数を、CのDLLで実装しました。

void __stdcall Func(const char *s);

VB.NETから利用するために、以下のように定義したところ、

Declare Sub Func Lib "testdll" (ByVal s As String) ' (1)

文字列変数に"あいうえ"という文字列を格納し、この変数をFunc()に渡すと、
関数呼出し後、文字列変数の中身が"あい"に変わってしまいました。

MSDNを読んだところ、そもそも(1)の宣言だと文字列がBSTRに解釈されてしまうため、

Declare Sub Func Lib "testdll" ( _
 <MarshalAs(UnmanagedType.LPStr)> ByVal s As String) ' (2)

と宣言すべきである、という事がわかり、試しに(2)のとおり宣言してみたところ、
関数呼出し後も文字列変数の中身は変わりませんでした。

ただ、(1)の形式で変数の中身が変わってしまう理由が分かりません。
なぜ(1)の形式だと、このような現象が発生するのでしょうか?

248:デフォルトの名無しさん
04/10/27 22:18:29
>>247
症状は全然ちがうけど、同じように.NET側で確保した領域をポインタ渡しする処理で
原因不明のトラブルで悩んだことがあったけど、(.NET FrameworkはVer1.1)
このあいだでたSP1のFrameworkをインストールしたら解消した。

もしまだSP1にしてなければ試してみては?

249:デフォルトの名無しさん
04/10/27 22:59:05
>>248
ソレダッ!と思い、早速SP1を当ててみました。
しかし、現象変わらずでした。

250:240じゃないけど
04/10/28 01:22:38
>>242
>ただ、それってラグの間に操作を受け付けるようにする処理ですよね?

いやいや、メッセージ・ループからメッセージを取ってくるんでしょ?キューに
たまったメッセージが処理できないで待ってるんだから。

この説明でわかりますか? Windowを扱うシステムってメッセージ駆動に
なっているのだという基礎が出来てないと理解できないと思うが。


251:デフォルトの名無しさん
04/10/29 01:47:20
VB.netでMIDI音源に、音を出させるにはどうすればいいですか?
MIDIファイルの再生でなく、指定した音、又は音列を再生させたいんですけれど。

252:デフォルトの名無しさん
04/10/30 01:01:45
>>251
URLリンク(wisdom.sakura.ne.jp)
ここ見ればわかるはず。現に俺はここ見ただけでその手のコードが書けた。
見てもわからなかったら諦めるよろし。

ま、普通このぐらいのことGoogleで検索して調べるわけで、
そんな手間すら惜しむお方には無理に5万両。

253:251
04/10/30 01:23:22
すまん。
"VB.net" MIDI
でしか検索してなかったんで、Cのコードを参考にするって考えが浮かばなかった。
が、今一よくわからん……。

とりあえず、DirectX SDK落としてきたよ。

254:251
04/10/31 01:25:31
ダメだorz。やっぱりわからん。
環境は
言語:VB.net
IDE:SharpDevelop
SDK:DirectX 9.0 SDK Update (October 2004)
で、>>251に書いた様なコトをしたいんですけど……。

255:251
04/10/31 01:51:11
URLリンク(gpwiki.org)
まずは↑ここを参照しつつ、WAVを再生させる事には成功したんで、
なんとか頑張ってみます。

256:デフォルトの名無しさん
04/10/31 01:59:14
Managed DirectXがDirectMusicをサポートしない以上WinAPIの方が手っ取り早そうだけどなぁ……。

257:フナ太郎
04/10/31 03:07:02
マネージド、マネージド うっせーんだよ

258:252
04/10/31 11:26:26
>>251
貶すだけじゃ後味悪いんで一言。

どうしてもDirectX使わなきゃダメなの?
>>256も書いてるけどWinAPI使えばびっくりするぐらい簡単だよ。
いろいろ調べながらでも1,2時間もあればとりあえず音を出すことは出来ると思う。

とりあえず使う関数はmidiOutOpen,midiOutShortMsg,midiOutReset,midiOutClose
これだけだったはず。(実際に音を出したり止めたりするときに使うのはmidiOutShortMsgだけ)

APIの宣言の仕方がわからないなら、APIの関数名にVBってキーワード付けて
検索すればVB6での宣言が出てくるはずだから、それを少し改変するだけでいい。
定数の値も同じ要領で調べられるはず。

気をつける点は、

(1)VB6の LongはVB.NETではIntegerになっている。(2)引数の渡し方のデフォルト、
つまり明示的に書かなかった場合VB6ではByRefなのに対しVB.NETではByVal
(3)引数のうちデバイスハンドルは、VB6ではLongになっているがVB.NETでは
IntegerではなくIntPtrにしたほうがいいかも。

こんなところかな。

259:デフォルトの名無しさん
04/11/01 00:32:06
.NETでWinAPIを使うのは良くない、みたいに聞いていたので、DirectXを使おうとしてたのですが。

で、色々と弄ってみましたが、エラーは起きないものの、
再生されない……。参考にしたVBのサンプル(URLリンク(tokyo.cool.ne.jp))付属のexeでは出てるのにOrz。

こんな感じなんですが↓

260:デフォルトの名無しさん
04/11/01 00:38:12
Private hMid As IntPtr
Private Note As Integer
〜〜
Public Declare Function midiOutOpen Lib "winmm.dll" _

    Alias "midiOutOpen" _

    (lphMidiOut As IntPtr, _

    ByVal uDeviceID As Int32, _

    ByVal dwCallback As Int32, _

    ByVal dwInstance As Int32, _

    ByVal dwFlags As Int32) As Int32



261:デフォルトの名無しさん
04/11/01 00:38:49
Public Declare Function midiOutClose Lib "winmm.dll" _

    Alias "midiOutClose" _

    (ByVal hMidiOut As IntPtr)As Int32

    

Public Declare Function midiOutShortMsg Lib "winmm.dll" _

    Alias "midiOutShortMsg" _

    (ByVal hMidiOut As IntPtr, _

    ByVal dwMsg As Int32) As Int32
〜〜

262:デフォルトの名無しさん
04/11/01 00:39:17
Private Sub schmerzFormLoad(sender As System.Object, e As System.EventArgs)

    Dim Ret As Int32
    Ret = midiOutOpen(hMid,-1,0,0,0)

End Sub



Private Sub schmerzFormClosed(sender As System.Object, e As System.EventArgs)

    Dim Ret As Int32

    Ret = midiOutClose(hMid)

End Sub

263:デフォルトの名無しさん
04/11/01 00:39:43
Private Sub Button1MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)

    Dim Note, Inst, Vol As Long
    Note = 70       '音階(&H00から&H7F(127))
    Inst = 30       '楽器No(GM音色番号に準拠?)
    Vol = &H7F      '音量(&H00から&H7F(127))
    
    '楽器の変更(1バイト目:データの種類&チャンネル番号
    '            2バイト目:音色番号)
    midiOutShortMsg(hMid, &HC0 + Inst * 256)
    
    '音を鳴らす(1バイト目:データの種類&チャンネル番号
    '            2バイト目:音階
    '            3バイト目:ボリューム)
    midiOutShortMsg(hMid, &H90 + Note * 256 + Vol * 256 * 256)

End Sub


264:デフォルトの名無しさん
04/11/01 00:40:29
Private Sub Button1MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)

    '消音
    midiOutShortMsg(hMid, &H80 + Note * 256)

End Sub

265:デフォルトの名無しさん
04/11/01 00:43:04
ぐわ、改行が倍増してるOrz。なんだこれ……。
荒らしみたいになってまってすまない。

266:252
04/11/01 08:28:03
動かない理由はまず第一にmidiOutOpen で取得したデバイスハンドルを
捨ててしまっているから。
デバイスハンドルで、メッセージを送信するデバイスをOSに指示するんでしょ。

267:デフォルトの名無しさん
04/11/01 11:43:59
すいません、少しお聞きしたいのですが
ファイル(画像データ、テキストファイル)を16進数に変換したいのですが
なんか、いい方法はありませんでしょうか?
目的は友人と暗号化の勉強をしようと思いまして
ファイル→16進数化→暗号化→復号化→16進数化→ファイル
という流れなのですが・・・
自分が使用できる言語はC,Java,VB.netです

268:デフォルトの名無しさん
04/11/01 11:48:04
>>267
釣りはよせ

269:デフォルトの名無しさん
04/11/01 11:50:23
>>268
たぶんマジなんじゃない?

270:デフォルトの名無しさん
04/11/01 12:06:27
stringSize = e.Graphics.MeasureString("”  名医  ”", f)
MeasureString でお尻にスペースがあると正常にサイズを返さない。
なんとかする方法はないんでしょうか?


271:デフォルトの名無しさん
04/11/01 12:23:09
お尻に.を付けて求めたサイズから少し減らす

272:252
04/11/01 12:40:51
>>259

>>258に書いたとおり、VB.NETではデフォが値渡しに変更されているから

midiOutOpen の
>lphMidiOut As IntPtr
ここはByRefを指定してやる必要がある。

それでも音がでなければ、メッセージのフォーマットが間違ってるか
OSの規定のMIDI音源が設定されてないんじゃないかな。

273:デフォルトの名無しさん
04/11/01 13:00:47
>>270
StringFormatオブジェクトのFormatFlagsにStringFormatFlags.MeasureTrailingSpacesを設定し、
MeasureStringのStringFormatをパラメータに使うオーバーロードを使って測定する。

274:270
04/11/01 17:06:04
>273
ありがとう。やってみますしかしなんか難しそうですね。

275:270
04/11/01 17:08:15
>お尻に.を付けて求めたサイズから少し減らす
 点をつけて求めて、1文字分は引くわけですね。なるほど。


276:デフォルトの名無しさん
04/11/01 17:09:13
PrintPreViewDialogとPrintDocumentコントラールを使ってプリントをおこないます。
この場合
PrintDocument1_PrintPage でプリント処理をおこないますが、1ページ以上の
データがある場合は、1ページ出力完了で再度このプログラムに飛んでくる
ようにする必要がありますが、どうやって実現するのでしょうか


277:デフォルトの名無しさん
04/11/01 17:15:27
引数PrintPageEventArgsのHasMorePageをtrueにしてやれば自動的にもう一度PrintPageイベントが発生する。

278:デフォルトの名無しさん
04/11/01 17:17:10
HasMorePagesだった。
最後のページになったら一応明示的にHasMorePagesをfalseにしておく。

279:デフォルトの名無しさん
04/11/01 17:31:04
>278
ありがとう。やってみます。


280:デフォルトの名無しさん
04/11/01 17:45:52
 VB.netではFilestreamというのが新しく出てきましたが、
 Fileアクセスでランダムアクセスはどのようにやるのでしょう。
20Kの固定長レコードが10000件ありますが、適当なIOコントロール
関数といえば、どれになるのでしょうか?


281:デフォルトの名無しさん
04/11/01 17:48:49
FileStream.Position

282:259
04/11/01 22:31:17
>>252
つきあっていただいてありがとうございました!

>動かない理由はまず第一にmidiOutOpen で取得したデバイスハンドルを 
>捨ててしまっているから。 
というのが、今一よくわからないのですが。
Ret = midiOutOpen(hMid,-1,0,0,0)

Private hMid As IntPtr 
に入ったんじゃないんですか?

……ってか、それは関係なかったみたいで、
>midiOutOpen の 
>>lphMidiOut As IntPtr 
>ここはByRefを指定してやる必要がある。 
を勘違いして、3つの宣言全部By Ref lphMidiOut As IntPtrにしてまったが、
直したら音出ました!
停止がされなかったが、Noteが中と外で重複してたのが原因でした。

283:デフォルトの名無しさん
04/11/02 21:52:05
>281
ありがとう。 
 ストリングをFilestreamで保存して、指定のPositionに
seekしたいのですが、このようとではバイト配列に変換する必要が
あるようです。
 Stringをバイト配列に変換する方法はどうやるのでしょう?


284:デフォルトの名無しさん
04/11/02 22:14:48
StreamWriter で FileStream をラップしてやるか、System.Text.Encoding クラスを使う。
前者の方が簡単。

285:デフォルトの名無しさん
04/11/03 03:49:22
>284
ありがとう。 なんとかできそうです。

286:デフォルトの名無しさん
04/11/03 10:54:06
見つけられなかったので、教えて下さい。
VB.NETに正規表現を判定する関数ってないでしょうか?
英大3文字なら[A-Z]{3}ってヤツです。

287:デフォルトの名無しさん
04/11/03 11:06:17
Regexp()

288:286
04/11/03 13:37:28
>>287
即レスどもです。
これってVBScriptのObjectだけど、
VBから使えるのですか?

289:デフォルトの名無しさん
04/11/03 13:51:33
>>288
君頭おかしいの?
MSDNすら検索しない奴に今日を生きる資格なし。

290:デフォルトの名無しさん
04/11/03 14:00:57
ああうん、正しくはRegexクラスだな。

291:286
04/11/03 15:45:42
>>289-290
ありがと。
MSDNにそのまんま有りますね。
検索済みと勘違いしてた、スマン。

292:デフォルトの名無しさん
04/11/04 20:50:24
ストアドの戻り値を数値で受け取る方法をご存知の方いらっしゃったら教えて下さい。
Count(*)を打ってその結果件数を受け取りたいのですが(´・ω・`)
SQLServer2000でやっております。

パラメータを渡した後にExecuteReaderを実行してストアドを呼び出し
Console.ReadLineで結果を読み取ろうと思ってたのですが、
根本的に間違えてたらすいません。

宜しくお願いします。

293:デフォルトの名無しさん
04/11/04 20:57:15
ええと何でConsoleが出てくるのかな……?

294:デフォルトの名無しさん
04/11/04 21:08:54
>>293
いきなり違うんですか Σ(´Д`:)
初めてなんで色々ネットで調べてみたんですが orz

MSサイトで

While AAA.Read()
Console.ReadLine(以下略

という記述を見つけたのでこれを使おうと思ってた次第です。









295:デフォルトの名無しさん
04/11/04 21:15:10
そこと思われる部分のMSDNの記述

> Console.WriteLine((myReader.GetInt32(0) & ", " & myReader.GetString(1)))

……なぜConsole.ReadLine?
SQL文によってmyReader.Get...を適当に書き換えれば良いわけだが。

296:デフォルトの名無しさん
04/11/05 01:31:32
>>295
その記述は初めて見ました orz

調べ方がマズかったのかSQLCommandってのを調べて掘ってたら
Console.ReadLineの記述があったので、ストアドの実行結果を読み取るのかと思い
Console.ReadLineが使えるのかなと思った次第です。

人手不足で開発に回されたばかりなんですが無知で申し訳ないです(;´д⊂)
もっと勉強してから出直します。すいませんでした。


297:デフォルトの名無しさん
04/11/05 02:09:09
>>296
イ`。焦るとどんどん正解から遠ざかるものだ。そういうときは一服しる。

298:デフォルトの名無しさん
04/11/05 11:27:47
取りあえずアレだ。

・該当部分のコードを書く
・どこかのページを参考にしたなら参照したページのアドレスを書く
・例外が投げられているなら例外メッセージを書く

をしてくれないとアドバイスもしようがないぞ。

299:デフォルトの名無しさん
04/11/05 11:35:51
>>297
タバコの数だけ増えていきます orz

>>295
ExcuteReaderメソッドの説明を読んだのですが
実行結果をConsoleに「書き込む」という意味合いでしょうか?(つД⊂)

やりたいのはそのConsoleに書き込んだ値を見て処理を分岐させたいのです。
count(*)してその件数で処理変更という具合なのですが。

無知なのは重々承知しておりますが、よろしければ教えて頂けないでしょうか?


300:デフォルトの名無しさん
04/11/05 11:55:30
>>298
確かにそうですね(´・ω・`)
申し訳ないのが作業をするPCが手元に届いておらず、全て机上でのコードなのです。
来週ぐらいにPCが来るそうなのですが、VB.NETもSQLServerも動かしたことないんです。
ワードとエクセルしかやったことがなくて(;´Д⊂)

いきなり開発に回されてメモ書きで作る処理を指示されて色々調べたのですが…。
通るかどうかもわからないのですが、以下にコードを。


Dim mySQLcon As New SqlClient.SqlConnection
Dim myProc As String = "ストアド名称"
Dim myCommand As New SqlCommand(myProc, mySQLcon)
Dim myReader As SqlDataReader

mySQLcon.ConnectString = "接続情報"
mySQLcon.Open
myCommand.CommandType = CommandType.StoredProcedure

myCommand.Parameters.Add("@ユーザID", SqlDbType.VarChar).Value = "ユーザID文字列"
myCommand.Parameters.Add("@パスワード", SqlDbType.VarChar).Value = "パスワード文字列"
myReader = myCommand.ExecuteReader(CommandBehavior, SchemaOnly)

当初はここにストアドの実行結果(count(*)の結果件数)が入ると思っていたので

If myReader = 0 Then
処理1
Else
処理2
End If

というコードを脳内で展開してたのですが、Consoleの記述を見つけ>>292に繋がるのです(´・ω・`)

301:デフォルトの名無しさん
04/11/05 12:05:30
どこに質問を書くべきかわからなかったのですが、一応vb.netのことなのでここに書かせてもらいます。
Microsoft access2000とvb.net2002を使っています。
データベースのアクセス履歴をとってそのアクセスした時間をデータベースに記録する
というプログラムを書いているのですが、日付/時刻型のデータにvb.net側で現在時刻を取ったときは
[年/月/日 時:分:秒]というデータが格納されているのですが、それをaccessに送ると[年/月/日]の部分しか受け取ってくれません。
[時:分:秒]の部分は[00:00:00]となっています。

Dim r As DataRow

r = DsAccess1.T_アクセス履歴マスター.NewRow()
r("アクセス日時") = Date.Now    ←この時点で[年/月/日 時:分:秒]
r("アクセス元") = "制作部"
r("T_商品仮変更マスター") = "開始"
r("T_商品変更履歴") = "開始"
r("T_仕事一覧") = "開始"
DsAccess1.T_アクセス履歴マスター.Rows.Add(r)
odaAccess.Update(DsAccess1, "T_アクセス履歴マスター") ←ここでaccessに渡すと[年/月/日]

こんな感じのプログラムです。
ちなみにaccessの方で「アクセス日時」の設定は、
データ型:日付/日時型
書式:日付(標準) 1994/06/19 17:34:23
値要求:はい
です。
一度、これを解決するために、テキスト型で値を保存するという方法をとったのですが、
これだと並べ替えをしたときに9:55:55の方が10:00:00より未来だと取られてしまってだめでした。

どうすればちゃんと時刻まで渡すことができるかご教授ください。

302:デフォルトの名無しさん
04/11/05 12:57:33
>>300
まず、SqlCommand.ExecuteReaderメソッドは、
CommandTextプロパティに設定されたSQL文/ストアドプロシージャをデータベースに投げて、
その結果のストリームを読み取る為のSqlDataReaderクラス(のインスタンス)を返すわけだ。

SqlDataReaderクラスは、あくまでストリーム(まあ流れのあるデータって事)を読み取るためのクラス。
実際のデータを読み取るのはこのクラスの各種メソッドを使う。

例えばファイル(ファイルもストリームの一種)を読み取るクラスを考えてみて、
ファイルを開けただけでいきなり全部のテキストが返ってきても困るのは分かるよな?
それは実はバイナリファイルだったのかも知れないし、欲しかったのは1行目だけだったかも知れないのに。

そういうわけで、ストリームから読み取るクラスにはどう読み取るかを指定して実行するメソッド群が用意されている。
SqlDataReaderクラスでは、Readメソッド、GetBytesメソッド他の類が用意されている。

Readメソッドは、「今見てるところを次のレコードに進める」メソッドだ。
クエリの結果はレコード一つとは限らないと言うかそっちの方が多いだろう。
多くのサンプルで While (sqlDataReader.Read) となってるのは全てのレコードを読み取る為のコードだ。
ちなみに一番初めにSqlDataReaderが作られた時の「今見てるところ」はクエリ結果の最初のレコードの前。なのでデータを読み取るにはまずReadメソッドを使う必要がある。

さて、一つのレコードには普通複数の行があるわけで、それを取得するのがGet...メソッドだ。
「今見てるところの特定の列の値」をある型として読み取るメソッド群だな。
mySqlDataReader.GetInt32(0) なら今見てるレコードの0列目(最初の列)をInt32(VB.NETではInteger)として取り出すわけだ。

要約すれば、ExecuteReaderから返ってきたSqlDataReaderをReadしてGetInt32(実際はCount(*)が返してくる型に一致するGetなんとか)しろということ。

さて、これで別にConsoleクラスを使う必要が無い事が分かってもらえたかな。

>>301
こいつかね。
URLリンク(www.atmarkit.co.jp)
@ URLリンク(www.google.com)

303:デフォルトの名無しさん
04/11/05 13:45:56
>>302
御丁寧に教えて頂き大変感謝しております(;´Д⊂)

myReader = myCommand.ExecuteReader(CommandBehavior, SchemaOnly)
の後に

While myReader.Read() ←結果の最初のレコードに移動(sqlDataReaderのOpen?)
 Integer型の変数 = mySqlDataReader.GetInt32(0) ←結果をIntger型で格納する
End While

myReader.Close ←sqlDataReaderを閉じる

Integer型の変数にcount(*)の結果が格納される

この解釈で合っておりますでしょうか? orz
複数行数があった場合は型に合わせた変数を作って、Get...を型に合わせて指定し
レコードの何列目かを指定する(GetInt32(1)などのように)とそのレコードのデータが取れる。

と解釈したのですが(´・ω・`)


304:デフォルトの名無しさん
04/11/05 14:03:31
>>303
そんな感じ。

>  myReader = myCommand.ExecuteReader(CommandBehavior, SchemaOnly)
ExecuteReader の引数は CommandBehavior列挙型 一つだけで、列挙型の指定は「型名.メンバ名」。
だから CommandBehavior.SchemaOnly

>  While myReader.Read() ←結果の最初のレコードに移動(sqlDataReaderのOpen?)

ストリームそのものはExecuteReaderから返ってきた時点で開かれている。Closeするかストリームの終わりに達するまで、データはいつでも読みとれる。
//SqlDataReaderは、ストリームの実体ではなくて、ストリームを読み取る処理を簡単にするためのクラスである、というのはここでは余談。
あとはどこを読むかを決めるだけ。
一回目のReadで一番始めのレコードに目をやるわけだ。

>  複数行数があった場合は型に合わせた変数を作って、Get...を型に合わせて指定し
複数列、な。

あと必ずクエリ結果のレコードが一つに限られるならWhileする必要もないとか(一度だけ {ReadしてGet...して} Close)。

305:301
04/11/05 14:57:14
>302
まさにそれでした。ありがとうございます。
ただ、accessの書式が「年/月/日 時間」なのに対しvb側の書式が「日/月/年 時間」だったことが
問題となって「データ型が一致しません」というエラーが出たのですが、これはvb側を「Date.Now.Yera & "/" & Date.Now.Month & …」
とすることでなんとか解決することができました。

306:デフォルトの名無しさん
04/11/05 15:27:47
>>304
ありがとうございます(;´Д`)
訂正も含め助かりました。

>>295のレスの意味もなんとか掴めました。
重ね重ね感謝致します(;´Д⊂)

307:デフォルトの名無しさん
04/11/05 16:20:29
ノータッチデプロイで起動したEXEに引数渡したいんだけど、
http://サーバ名/hoge.exe?a=b
のように起動してもTypeInitializationExceptionが出て画面表示すらされない。
試しに引数処理のロジックをコメントアウトしてもエラーがでる。
というか、?以後を付けるともうエラーがでる。
なぜだか知ってる人いますか?

308:デフォルトの名無しさん
04/11/05 23:05:23
>>307
これ?
URLリンク(msdn.microsoft.com)

309:デフォルトの名無しさん
04/11/05 23:09:57
>>305
そういうときはそんな回りくどいことをせず、DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") とでもしる。

310:デフォルトの名無しさん
04/11/07 01:11:29
質問があります。
SqlCeDataReaderではHasRowsメンバが無いようですが、
レコードが存在しない事を検出するにはどうすれば良いのでしょうか?

311:デフォルトの名無しさん
04/11/07 01:22:25
>>310
.NET Framework1.1でHasRowsプロパティが追加されてるが。
1.0でならReadしたら分かるんじゃないかな。

312:デフォルトの名無しさん
04/11/07 02:26:29
ファイルの保存をするにはButtonコントロールにどんなプログラムを書けばいいんでしょうか?
俺の持ってる教本には載っていなかった・・・
新しい本を買うお金もないし立ち読みしても頭に入らないだろうし
エロイ人教えてください><

313:デフォルトの名無しさん
04/11/07 02:29:45
>>312
漠然としすぎだが取りあえずファイルに書き込む部分はこれ。
URLリンク(dobon.net)

314:デフォルトの名無しさん
04/11/07 03:17:01
>>313
ありがとう!
後で試してみます

315:デフォルトの名無しさん
04/11/07 06:21:19
form1.show vbModalがしたいんですが、VB.NETの場合どうするのでしょう。
1)ボタンを押すたびに新しいフォームが立ち上がります。
2)親フォームは子がshowしているときは黙らせたい
以上よろしく。

316:デフォルトの名無しさん
04/11/07 07:14:52
>>315
.showdialog はだめなんけ?


317:デフォルトの名無しさん
04/11/07 09:55:15
formのコンストラクターってなんなん?
 form_loadか?


318:デフォルトの名無しさん
04/11/07 09:57:02
>316
 ありがと。それです。

319:デフォルトの名無しさん
04/11/07 10:01:43
>>317
フォームもクラスなのでクラスと同じNew。

というかform_load? まさかVB6か?
VB6でも当然フォームもクラスなのでクラスと同じ
クラス(フォーム)名_initialize。

320:デフォルトの名無しさん
04/11/07 10:26:24
>>311
ここをみる限りではHasRowsメンバは無さそうですが・・・。

URLリンク(www.microsoft.com)

SqlDataReaderやOleDataReaderにはあることは知っているんですが・・・。
CompactFrameworkならではの制限なんでしょうか?
そうすると、やはり読んでみて、エラーをcatchするしかないんでしょうか?

321:デフォルトの名無しさん
04/11/07 10:33:18
>>320
いや失敬、2.0からだった。

別にレコードがなくてもReadは例外を投げないはずだが。
単にFalseを返してくるだけで。

322:317
04/11/07 14:26:01
>319
>フォームもクラスなのでクラスと同じNew。
ところが
Public Class frmData
Inherits System.Windows.Forms.Form
Public Sub New()

End Sub

ってやるとNewのところが波線になる。書き方まづいの?


323:デフォルトの名無しさん
04/11/07 14:41:00
>>322
新しいフォームプロジェクトに追加したときに、
既に自動作成されているコード(Regionディレクティブで畳まれてる)見てみ。

324:フナ太郎
04/11/07 14:42:37
>>322
やってみたけど波線になんないよ。もっと
外側に原因がありそうだ。

325:317
04/11/07 15:01:40
>323
Regionに入ってた。ありがと。


326:317
04/11/07 15:05:25
VB6で使ってたDLLを呼び出す関数って、NETではmodule1の中に書いたら
動いたけど、使い方はそれでいいの?


327:323
04/11/07 15:36:45
便乗質問なんだけど、コンストラクタをオーバーロードするときって
どうしてOverloads付けなくていいんですかねえ?

MSDNのどこ見てもこの辺触れられてないように思うんだけど。

328:デフォルトの名無しさん
04/11/07 16:18:57
VB.NETって開発環境を消したらうごかなくなる?
VB6のときは、そのまま出荷ってのが多かったけど。


329:デフォルトの名無しさん
04/11/07 16:29:09
.NET Frameworkを消したら動かない。
VBランタイムみたいなもん。
.NET Frameworkのみで開発もできるから開発環境を消したら動かなくなると言うのは正しい。
VB.NETのIDEやSDKを消しても問題はない。

330:デフォルトの名無しさん
04/11/07 18:18:09
>329
ありがと。も一つ聞きたいんだけど、以前開発が終わったのでVB6.0を削除したのだけど
バグが出たのでもう一度インストールしようとしたら、インストールできなかった。
VisualStudio6.0だけど。 .NETもそんなこと起こるのかなー。
だから怖くて消せない。どうせバグ出るし。なんか対策あるんだろか?

331:デフォルトの名無しさん
04/11/07 18:21:15
>>330
なにが言いたいのかよくわからないけど
まだ起こってもいない問題の対策聞くってどういうこと。。。?

332:最凶VB厨房
04/11/07 19:07:55
>>327
URLリンク(www.microsoft.com)

333:デフォルトの名無しさん
04/11/07 21:48:55
URLリンク(ame.dip.jp)
上のアドレスの画像の赤で囲ってあるコントロールってなんですか?

334:最凶VB厨房
04/11/07 21:49:19
スマン誤読。

基底クラスのコンストラクタが引数なしのみ()
派生クラスのコンストラクタが(a As String)と(a As String,b As String)
のものを作りたいとする。
Overloadsキーワードをメソッドで使うと派生クラスから見た場合、
()と(a As String)と(a As String,b As String)となる。
(仮にコンストラクタにOverloadsをつけるとすると)
Overloadsの意味がメソッドとコンストラクタでは意味が
異なってしまう。
+基本的に基底クラスと派生クラス間の問題を解決するもので
ある(Overrides,Shadows,Mustほにゃららetcも)。
+コンストラクタは特別なメソッドである。
これらのことを考慮すると、コンストラクタにOverloadsはつけないと
いうことに自然となると思われ。推測。

335:デフォルトの名無しさん
04/11/07 21:58:29
>>333
ラジオボタン


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

4232日前に更新/273 KB
担当:undef