VB.NET質問スレ (Part8) ..
930:デフォルトの名無しさん
05/01/22 02:23:20
>>907
何か良く分かりませんが、迷惑掛けたのならあやまります。
すみませんでした。
931:デフォルトの名無しさん
05/01/22 07:16:27
>>930
よく分からずに謝っても意味がない。
932:デフォルトの名無しさん
05/01/22 14:07:06
vbではglobalでフォーム間の共通変数がみれたのに
vb.netはなくなったのですか?
どうやればいいのだろう?
933:デフォルトの名無しさん
05/01/22 14:15:12
>>932
少し上のレスを読め
934:デフォルトの名無しさん
05/01/22 14:18:22
>>926
ていうか本当にmSec単位で処理する必要なんてあるの?
こういうこと書く人って9割方本人の「思い込み」で書いてると思う。
935:デフォルトの名無しさん
05/01/22 15:43:36
気になるな。テキストファイルの1行ごとを定期送信するのにAPIのタイマーじゃ精度不足って
どんな案件なんだろうか。
936:デフォルトの名無しさん
05/01/22 18:14:11
他プロセスの動作負荷にはげしく増減があるとか?
‥‥つか、パソコンの処理能力が足りてないのかも。
937:デフォルトの名無しさん
05/01/22 18:45:13
いや、そういう意味じゃなくてmSecオーダーのリアルタイム性が要求される処理なんて
そんなにないんだよ。
単に「バッファ」って考え方がわかってないだけのような気がするんだけど。
938:デフォルトの名無しさん
05/01/22 20:49:14
Javaで言うHTMLEditorKit.Parserみたいなクラスはないでしょうか。
939:デフォルトの名無しさん
05/01/22 20:54:16
すいません。どなたか>>925をお願いします。
940:デフォルトの名無しさん
05/01/22 21:07:41
>>939
人に物を尋ねるときはまず自分の問題が他人に正確に過不足なく伝わるような
文章を書くこと。
他人に「エスパー」であることを期待しないこと。
こんなの中学卒業までにしっかりマスターしとけよ。
フォームのレイアウトが崩れるって言われてもねえ。。
文章で問題を表現する自信がないなら、
とりあえずどっかのアプロダに画像上げるとか手はあるでしょ。
941:デフォルトの名無しさん
05/01/22 21:10:49
>>940
わかんないのか・・・
942:デフォルトの名無しさん
05/01/22 21:11:23
938は具体的にそのクラスがどういう機能なのか説明すべきだな。
943:941
05/01/22 21:11:41
他の方どうぞー
940さんはもう書き込まなくていいですよ。
944:デフォルトの名無しさん
05/01/22 21:12:52
>>942
はあ?説明しなきゃいけないの?常識として知っといてほしいな。
まぁあんた以外には伝わってると思うが・・・
945:デフォルトの名無しさん
05/01/22 21:13:25
随分下手な煽りだな。
946:デフォルトの名無しさん
05/01/22 21:14:08
>>945
わかんないのか・・・なんでわかんない奴に限って書き込むんだ?
947:946
05/01/22 21:18:09
おっとと・・・そう書いたらみんな黙っちまったか。
ホントしょーもねー奴ら
948:デフォルトの名無しさん
05/01/23 01:15:47
>>938
ある。
以上。
949:938
05/01/23 08:24:46
>>948
あれ?とっくに自己解決してたんですけど。知ってますよ。
調査に何時間もかけちゃいました?だとしたらすいません。
950:デフォルトの名無しさん
05/01/23 10:32:45
forループ処理でコントロールのロックを防ぐ、DelphiでいうとProcessMessageのような
機能は.NETではどのようにするのでしょうか?
951:最凶VB厨房
05/01/23 10:49:25
Application.DoEvents()かな。
952:950
05/01/23 11:39:09
>>951 ありがとう。
953:デフォルトの名無しさん
05/01/23 12:39:18
>>951
純粋に問われたことに対する答えとしては正しいけどなんかなあ。
こういう質問には、「そもそもUIスレッドにそういうコード書くのが間違い」
って答えが正解だと思う。
954:デフォルトの名無しさん
05/01/23 18:26:23
>>953
大正解。スレッド作ってそっちで処理だね。
955:デフォルトの名無しさん
05/01/23 19:16:46
>>953
いいじゃん別に。お前が使うんだからさ。
956:デフォルトの名無しさん
05/01/23 19:40:32
>>954
そして>>917のような状況に陥ると。
957:デフォルトの名無しさん
05/01/23 20:23:43
フォームを作成すると拡張子がresxというファイルができているのですが、
これは何のファイルなのでしょうか。
958:デフォルトの名無しさん
05/01/23 20:38:50
>>957
URLリンク(www.microsoft.com)
URLリンク(www.atmarkit.co.jp)
959:デフォルトの名無しさん
05/01/23 21:12:45
他のプロシージャで使っていた変数を他のプロシージャで使うにはどうすれば良いですか?
教えてください
960:デフォルトの名無しさん
05/01/23 21:16:10
>>959
モジュールに記載
961:デフォルトの名無しさん
05/01/23 21:29:27
スレリンク(tech板:190番)
マルチポストか?
962:デフォルトの名無しさん
05/01/23 21:43:52
>>959
プロシージャ外で宣言。
963:デフォルトの名無しさん
05/01/23 21:46:45
>>962
どうやればよろしいのでしょうか?
964:デフォルトの名無しさん
05/01/23 22:03:47
>>963
古い資料だけど参考になる。
URLリンク(www.sakai.zaq.ne.jp)
965:デフォルトの名無しさん
05/01/24 11:29:02
DataGridで選択した行を削除するボタンを作ってます。
1、DataGridでマウスクリックし特定の行を選択
2、Form上の削除ボタンを押して、該当行の削除
3、ひととおり削除処理が終わったら、マスターファイル更新
コード上ではこんな感じです。
a、クリックした行をCurrentRowIndexで取得して
b、DataRow.DeleteでRowStateを変更
c、終了時にDataAdapter.Updateでマスターファイルを更新
しかし、この方法で1−2の手順を繰り返し、複数回の行削除を行
おうとすると、RowIndexがダブってしまい誤動作を引き起こします。
最終行以外を消すと、DataGrid上の表示とDataTable内のIndexに
不整合が起こるからだと思います。AcceptChangesを適用すると
DataGrid上では問題なく削除できますが、RowStateが変わってし
まうため、今度はマスターファイル更新ができなくなります。
DataGrid上で直接削除すればいいんでしょうが、大量にある行か
ら特定のものを見つけるのに時間がかかります。最悪、DataView
で抽出して直接削除という手段を考えていますが、1−3の手順で
他にうまい方法はないでしょうか? 長文すみません。(´・ω・`)
966:デフォルトの名無しさん
05/01/24 11:34:55
URLリンク(www.atmarkit.co.jp)
967:デフォルトの名無しさん
05/01/24 11:43:33
Win32APIを呼ぶ方法がうまくいかないので悩んでいます。
具体例としてウィンドウ上のボタンを押すと、user32.dllのExitWindowsExを
呼ぶというプログラムを作ろうとしました。
【実装】
1) 普通にウィンドウ上にPushボタ(Button1)を1つ配置した。
2) (全般) - (Declarations)のところに
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Const EWX_LOGOFF = 0
というExitWindowsExを用いるための宣言を行う。
3) (Button1) - (Click)のところに
Dim lngWin32apiResultCode As Long
lngWin32apiResultCode = ExitWindowsEx(EWX_LOGOFF, &HFFFFFFFF)
という変数宣言と呼び出しを行った。
【現象】
Form1.vb(1) : error BC30001: 名前空間のステートメントが無効です。
Form1.vb(2) : error BC30001: 名前空間のステートメントが無効です。
Form1.vb(62) : error BC30451: 名前 'ExitWindowsEx' は宣言されていません。
Form1.vb(62) : error BC30451: 名前 'EWX_LOGOFF' は宣言されていません。
といった具合にBuildもできません。
【疑問】
なぜ、宣言がことごとく否定されてしまうのでしょうか?
968:デフォルトの名無しさん
05/01/24 11:53:08
>>967
FormモジュールにDeclare文を書くことはできたっけ?
969:デフォルトの名無しさん
05/01/24 11:55:27
>>967
> 2) (全般) - (Declarations)のところに
と言うのが良くわからんが、
> Form1.vb(1) : error BC30001: 名前空間のステートメントが無効です。
は要するに名前空間直下に関数を宣言してるってエラーで、
例えばImports文のすぐ下にClass宣言も無しにいきなりメソッドを書いてるようなもの。
モジュールを追加するなりしてそこでAPI宣言をすればいいだろう。
> Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
あとVB.NETでは32ビット値はInteger (.NET FrameworkでいうInt32) だよ。
970:デフォルトの名無しさん
05/01/24 12:09:50
>>967
Form1内に書くなら
>Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
ではなく
Private Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Declareは基本的にモジュール記述時にグローバルな参照として使用するときに記述する宣言。
その辺を考慮すればできると思う。
971:デフォルトの名無しさん
05/01/24 13:09:56
>>966
ありがとうございます。
CurrencyManagerの使い方を学ぼうと思ってぐぐってたら、別の
方法も見つかったので、こちらを試したところうまくいきました。
URLリンク(www.atmarkit.co.jp)
C# to VB.NET Translatorにかけたらこんな感じになったので、こ
のRowに対してDeleteを実行したところ、整合性を保ったまま継続
削除できました。
Dim row As DataRow = CType(dgSample.BindingContext(dgSample.DataSource, dgSample.DataMember).Current, DataRowView).Row
VB6.0のADOから移行するため勉強中ですが、カレント行の扱い
が変わってて四苦八苦してたところでした。ほんと助かりました。
972:デフォルトの名無しさん
05/01/24 13:51:32
>>968-970
皆さん、どうもありがとうございました。どうにか解決しました。
結局、自分の採った方法は>>969さんのものでした。
1) ソリューションエクスプローラ上で [追加(D)] - [モジュールの追加(M)]の
操作でModule1.vbを追加。
2) Module Module1 〜 End Module間に
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Const EWX_LOGOFF = 0
を追加
でBuildしたらエラーが出ませんでした。動作内容もほぼ期待どおりでした
(なんか処理が遅いようだけど、それは質問の主旨とは無関係なので略)。
このExitWindowsExを使うのは8年近く前の雑誌の記事を参考にしたため
このような記述になっていますが、>>969さんのおっしゃるようにVB.NETでは
LongでなくIntegerを使うべきだったように思います。
そもそもの狙いはVCで作ったプログラムがあり、それを
GUIはVB、内部処理はVCでDLLにしたものを呼び出す
という形にするということで、その前段階で引っかかっていたのでした。
どうもありがとうございました。
973:デフォルトの名無しさん
05/01/24 14:13:15
すみません、1年目の初心者です
Image型変数に格納されている画像の左側30ピクセル分を廃棄して
元のImage型変数に格納し戻すにはどのようにすれば良いのでしょうか
974:デフォルトの名無しさん
05/01/24 14:31:27
廃棄した部分はどうなるの?
イメージの幅が狭くなる? 黒で塗りつぶす?
975:デフォルトの名無しさん
05/01/24 14:41:18
ファイル名がtest1.txt、test2.txt,test3.txt・・・・・・test50.txt
の50個のテキストファイルを、消去するにはどうすれば?
ファイル名の1,2,3などの整数部分を、変数にし、ループさせて
消すにはどうしたらよいですか?
976:デフォルトの名無しさん
05/01/24 14:43:08
ループカウンタがiとして、
"test" & i,ToString() & ".txt"
でいいんじゃないかね。
977:973
05/01/24 14:49:23
>>974
イメージの幅を狭くしたいです。
978:デフォルトの名無しさん
05/01/24 14:54:56
なら、
1)元の画像より幅が30ピクセル小さいBitmapオブジェクトをNewする
2)Graphics.FromImageメソッドで作ったBitmapオブジェクトからGraphicsオブジェクトを取得する
3)GraphicsのDrawImageメソッドを適切な引数で実行し、元画像を描画する
4)GraphicsのDisposeメソッドを実行する
5)Image型変数Image2を宣言し、元のImageを代入する
6)元のImageに (2)で作成したBitmapを代入する
7)Image2のDisposeメソッドを実行する
5・7は必須ではないがモアベターな手法として。
3は色々試して。
979:琴音
05/01/24 15:23:32
プログラミング初心者です。いまVB.NETで以下のようなフォームを作成してます。
<FORM1>
テキストボックスと更新ボタン
<CLASS1>
更新ボタンを押したときの処理
=====================
Public Class Form1
Inherits System.Windows.Forms.Form
//" Windows フォーム デザイナで生成されたコード "
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TestClass As New Class1
TestClass.Main1()
End Sub
End Class
=====================
Public Class Class1
Dim i As Integer
Public Sub Main1()
Dim TestForm As New Form1
TestForm.TextBox1.Text = "あいうえお"
TestForm.Refresh()
End Sub
End Class
=====================
更新ボタンを押したときフォームがうまく再表示されません。やり方が間違ってるのだと思いますがご存知でしたら教えてください。
980:973
05/01/24 16:02:43
>>974
>>978
ありがとうございます
リーダーの簡易レビューでもその手順でOK通れました
981:デフォルトの名無しさん
05/01/24 16:58:42
ある指定したディレクトリに、テキストファイルが作成されたら
イベント発生させたいです。ファイルは5つほど、時間を置いて作成されて
ファイル名は指定せず、単にtxtファイルが作成されたら、その度に
イベント発生という形にしたいですが
ある指定したディレクトリにtxtファイル(ファイル名指定なし)
が作成されたらという条件が書けません、どうすればよいでしょうか?
982:デフォルトの名無しさん
05/01/24 18:23:14
>>981
FileSystemWatcher
983:デフォルトの名無しさん
05/01/24 18:59:42
labelの表示に、一定時間後に表示を変えるにはどうすればいいんですか?
たとえば、「あいうえお」を一文字ずつ一秒間だけ表示するとか。
984:デフォルトの名無しさん
05/01/24 19:05:52
System.Windows.Forms.Timer
985:デフォルトの名無しさん
05/01/24 19:19:08
>>979
だから何度でも言うが、まず問題が人に正確に伝わらない限り
答えは永遠に得られないよ。どんな親切な人がいようとね。
ハッキリ言うとそのコードと文章では、結局何がしたいのかいまいちよく分らない。
新しく作ったフォームを操作しているのに再表示?っていうか再表示って何?
というか、君そもそも何の学習もせずに質問してないか?
人とコミュニケーションする以上、
質問するのにも最低限の知識は押さえてないと始まらないでしょ。
>>983
そんなことを人に尋ねるおたんちんにプログラミングは無理。
986:デフォルトの名無しさん
05/01/24 19:25:09
質問する人にあれこれいうつもりは全くないんだけど、
C#スレとVBスレで質問のレベルが全然違うのはどうしてだ。
同じ.NETなのに。そもそもどちらで聞いてもいいような質問がほとんどだから
スレが分かれている必要性も疑問だが。
987:デフォルトの名無しさん
05/01/24 19:36:33
>>979
TestForm.Show
でもダメか?
988:デフォルトの名無しさん
05/01/24 19:41:46
>>987
TestForm変数はMain1()の中だけのローカル変数なので、
Show()してMain1()を抜けた瞬間ダングリングポインタになる。
どっかにスコープの確保した変数でおかないと。
そもそも何やりたいのかサッパリ分からんしね。
989:デフォルトの名無しさん
05/01/24 20:04:58
ごつい参考書のClass解説を斜め読みして、とりあえず作ってみました
感が満ちあふれてるような。もっと初心者向けの解説書から始めたほ
うがいいんでないかと。
990:デフォルトの名無しさん
05/01/24 21:27:11
MSCommを使ってRS-232Cケーブルでシリアル接続してデータ
のやりとりを行うプログラムを作成中なんですが
COMポートの変更をVBのプログラム上から行いたいのです。
デフォルトではCOM1なのですが、例えばプログラム上で
コンボボックスを利用し
MSComm1.ComPort = comport.selectedIndex + 1
というようなことをやりその後ComOpenを真にしても
使われているポートでもないっぽいのにエラーが起きてしまいます。
マイコンピュータのデバイスマネージャーから手動でCOMを変えてやると
うまくいきます。
これを何とかプログラム上から操作したいですが、どうすればよろしいんでしょうか?
ご存知の方、ご教授ください。宜しくお願いします。
991:デフォルトの名無しさん
05/01/24 21:35:13
>>990
エラー内容を一言一句書いてくれ。
話はそれからだ。
992:デフォルトの名無しさん
05/01/24 21:39:39
>>990
質問する前にヘルプぐらい読んだらどうよ?
MSComm使うってことは旧VBの正規版Pro以上の持ってるんでしょ?
だったらMSDN読めるはずじゃん。
持ってないならライセンス違反だよ。
おまけに質問の文章もいまいちわかり難い。つかみどころがない。
>使われているポートでもないっぽいのに
想像だが、「使えない」ポート指定してるからじゃないの?
993:デフォルトの名無しさん
05/01/24 21:50:18
>>990
次スレよろ
それと不十分な質問分への返り討ちテンプレ案
「もうちょっと詳しく丁寧に」
994:デフォルトの名無しさん
05/01/24 21:50:29
ここは、.NETスレだよな?VB6スレじゃないよな?
995:デフォルトの名無しさん
05/01/24 21:55:40
>>991
学校のPCで作業していて、自宅のPCには.net環境がないのでエラー内容が
分からないんです。申し訳ありません。
>>992
On Error Resume
For i=0 To 16
MSComm1.CommPort = i
MSComm1.PortOpen = True
If MSComm1.PortOpen = True Then
comport.Items.Add("COM" & i & "OK")
Else
comport.Items.Add("COM" & i & "NG")
End If
MSComm1.PortOpen = False
For Next
みたいなカンジでとりあえずポート1から16までをオープンしてみては
使えるかどうかをif文で分けて、コンボボックスのリストに追加して
いってるんですが、デフォルトの1と3しかOKにならないのです。
これはそれ以外は使えないという事なんでしょうか?
なんかまた良く分からない文章になってすいません。これ以上自分でも
詳しく書けないので・・・真剣に困ってるのでどうか宜しくお願いします。
996:デフォルトの名無しさん
05/01/24 22:03:38
>>995
COMポートってのは、実際にデバイス(仮想デバイスでもいいけど)がないと使えない。
急に「COM6が欲しい!」とか思ってもそうは行かない。
997:デフォルトの名無しさん
05/01/24 22:09:03
自宅のPCにもドットネット環境作れ。当然だろんなもん。はっきり言って真剣に勉強する意欲を疑う。
998:デフォルトの名無しさん
05/01/24 22:16:17
学生さん専用の格安の奴たしかあったよね。
学生さんはいいな。
ま、でもMSCommのライセンスが困るわけだが。
999:997
05/01/24 22:16:44
まぁオレなんて医者から脳みそが少ないって言われてから
真剣に生きる気もないけどな。
1000:デフォルトの名無しさん
05/01/24 22:18:13
終了
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4856日前に更新/258 KB
担当:undef