VB.NET質問スレ(Part30) ..
[2ch|▼Menu]
83:965
09/05/29 14:22:01
>>82
レスありがとうございます!!
勉強になります。参考にさせていただきます!!

84:83
09/05/29 14:23:20
↑名前が965になっていますが、間違いですのでスルーしてください。
連レスすみません。


85:デフォルトの名無しさん
09/05/29 19:27:56
ボタンの形変えるくらいなら鍵盤の画像貼り付けて
Clickイベントでどれが押されたか座標で判定する方が早くて綺麗

86:83
09/05/29 20:05:47
>>85
レスありがとうございます!
その方法は思いつきもしませんでした・・・。
試してみます!ありがとうございます!!

87:デフォルトの名無しさん
09/05/29 20:46:31
>>85
その場合「鍵盤が押された」表現はどうするのかな?

88:デフォルトの名無しさん
09/05/29 20:52:06
「鍵盤が押された」画像に切り替えれば

89:デフォルトの名無しさん
09/05/29 21:02:05
でも白鍵と黒鍵の組み合わせ考えると相当なパターン
用意しないといけない
(まあマウスでクリックだから複数鍵同時打鍵考えなくて
いいのは救いだが)

90:デフォルトの名無しさん
09/05/29 21:11:30
押された鍵盤の画像だけ切り替えれば

91:83
09/05/29 21:12:24
>>87-89
レスありがとうございます。
鍵盤が押された画像ですが、かなり用意しなければなりませんので確かに大変かもしれません。
言い忘れていましたが、マウス、キーボードどちらの入力も可能にしています。
マウスは複数同時に押すことはできませんが、キーボードからですと複数同時が可能となっています。
てんやわんやです。

92:デフォルトの名無しさん
09/05/29 21:33:02
鍵ごとに画像を分けてDrawImage
4つの鍵の形とそれぞれ押された状態で全部で8枚あれば足りる

93:デフォルトの名無しさん
09/05/30 14:26:38
時間を利用した暗号を作成するソフトを考えてるのですが
Timestringで時間を取得すると「00:00:00」という風になります
これを数字として認識できるように「000000」という風に区切り無しにする方法はあるでしょうか?
もしくは「00100100」という風に置き換えるという方法でもいいです

94:デフォルトの名無しさん
09/05/30 15:39:45
そもそもスタートから間違ってる
DateTime.Now.Ticks使えばいい

95:デフォルトの名無しさん
09/05/31 00:02:14
時間を利用した暗号ってなんだよ…
どういうものでどういう用途か知らんが
多分そういうのは暗号とは言わない方がいい。


96:デフォルトの名無しさん
09/05/31 01:30:48
ワンタイムパスワードなんてもあるけどね

97:デフォルトの名無しさん
09/05/31 10:57:06
開発環境
OS:WindowsXP ProSP3
Ver:Visual Basic .net 2002

実行環境
OS:WindowsXP ProSP3/HomeSP3
.NET Framework:1.070

フリーソフトを作ろうと思っています。
データベースについては、今はスタンドアローンでSQLServerとつないで動作確認をしているのですが、
配布する際に「クライアント側でもデータベースを入れてくれ!」というわけにはいかないので、
代替できるものを探しています。

ソースコード内部のSQLは極力変更したくないので、テキストファイルなどでの代替ではしたくないのですが、
可能でしょうか?


以上、よろしくお願いいたします。

98:デフォルトの名無しさん
09/05/31 13:51:32
>>97
.NET Framework:1.070で使えるかしらないけど、SQLite

99:97
09/05/31 20:37:09
>>98
やってみます。ありがとうございます。

100:デフォルトの名無しさん
09/05/31 20:41:57
2008Express使えばいいのに
無料でもさすがに2002よりはマシだろ

101:デフォルトの名無しさん
09/05/31 20:47:49
>>100
配信終了してたはず

102:デフォルトの名無しさん
09/05/31 20:50:10
終了したのは2005
2008は普通にダウンロードできる

103:デフォルトの名無しさん
09/05/31 23:25:11
初心者です。どうか教えてください。
新規登録をしたい場合、データベースにコンボボックスを通じて登録したいのですが
このままではコンボボックスに表示させるだけでとまってしまいます。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dim cnn as adodb.connection
dim rs as adodb.recordset
〜データベース接続〜
dim personalinfo as string

With Me.ComboBox1.Items
.Add(New PersonalInfo(1, "aaa"))
.Add(New PersonalInfo(2, "bbb"))
.Add(New PersonalInfo(3, "ccc"))
End With
End Sub
ここまでで表示をすることは可能なのですが、以下から

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
dim sql as string
sql = "SELECT FROM *~~~"と仮にすると
??????
End Sub

ここからコンボボックスとデータベースを繋ぎ、登録ボタン押すとデータベース
に追加できるようにしたいのですが、繋ぐためのコードがよくわかりません。

URLリンク(hpcgi1.nifty.com)

こちらを参考にしたのですがどう繋げたらいいかわかりませんでした。お願いします。

104:デフォルトの名無しさん
09/05/31 23:48:37
なんか変だな。

とりあえず、INSERT 文でも投げれ。

105:デフォルトの名無しさん
09/06/01 00:02:13
ありがとうございます。
例えばこの部分で、
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
dim sql as string
sql = "INSERT INTO ****" & _
" VALUE '" + combobox1 + "' ;"

End Sub
とすることでしょうか?

106:デフォルトの名無しさん
09/06/01 00:14:29
やってみればいいじゃん。

それから、マルチポストは止めような。

107:デフォルトの名無しさん
09/06/01 00:18:22
たぶん自作のソースがタコなんだと思うんですが、4コア環境にするとこけます。

デバッグしても原因が見つからず、暫定的にプログラム側で使用コア数を制限したいのですが、
そのようなオプションはご存じないでしょうか?

assemblyの中に書くのかとは思うのですが見つけられず。

あと、外部接続するのですが、WindowsFWの初回警告を出させる方法ご存じありませんか?

どうぞよろしくお願いします。

108:デフォルトの名無しさん
09/06/01 00:20:53
ありがとうございます。
気をつけます。あせっていたもので気にせず投稿していました。すみません。

109:デフォルトの名無しさん
09/06/01 00:21:50
>>107
とりあえず、SetProcessAffinityMask() とか?

110:デフォルトの名無しさん
09/06/01 02:03:53
<DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Function SetProcessAffinityMask(ByVal handle As IntPtr, ByVal mask As UIntPtr) As Boolean
End Function

sub a()
Dim vHandle As IntPtr
vHandle = Process.GetCurrentProcess().Handle
SetProcessAffinityMask(vHandle, New UIntPtr(&H1))
end sub

で解決しました。ありがとうございました。

111:デフォルトの名無しさん
09/06/02 19:50:56
初歩的な質問ですいません
win32APIと.netはまったく別ものなのですか?win32api上に.netが載っていると思っていたのですが
URLリンク(www.atmarkit.co.jp)を見ました。
また、最近のVisual studioは.net上で動いているのですか_

112:デフォルトの名無しさん
09/06/02 20:13:39
.NETのGUIはWin32APIに皮を被せたもの
Win32APIネイティブのコントロールを使わない新しいGUIフレームワーク(WPF)も使える
VisualStudio自体は.NETアプリじゃないけど.NETに激しく依存してて.NETなしでは成り立たない

113:111
09/06/02 20:31:23
>>112
なるほど〜、わかりやすい説明ありがとうございました

114:デフォルトの名無しさん
09/06/03 23:52:26
質問させてください

VB2008にてSeriaPortを使って通信を行うプログラムを書いています
それで、通信中に強制的に通信ケーブルを抜く操作を行うと、通信を停止後、再接続を試みるという処理を行わせたいのですが
通信中に通信ケーブルを引き抜くと、当然通信は止まってくれるのですが、その後、そのポートに接続を行おうとすると
「ポートにアクセスできません」といex.messageを受信してしまいます。
再び接続をするには、ソフト自体を立ち上げなおさないといけません
これをソフト上の処理で、再説z区できるようにしたいのですがどうすればよいと思われますか?

115:デフォルトの名無しさん
09/06/03 23:54:15
Hairetu(100,100)
Hairetu(100)()

の違いって・・・?
多次元配列?二次元配列?頭がこんがらがりそう

116:デフォルトの名無しさん
09/06/04 00:03:25
>>114
開きっぱなしになってるんだろうね。
具体的にどういう方法で通信をやってるの?

117:114
09/06/04 00:20:45
>>116
どういう方法と言いますと?
通信方法はこちらからコマンドを送って、相手の汎用機器から返信をもらう形です。
接続処理は普通に.open()と.close()です。
この場合、強制的にケーブルを外すので、close処理が行われないことになりますが。
それで再度openを行っても、おっしゃられるとおり、開きっぱなしになってるんだと思います。
よく分からなかったんですが、意味合い的にポートの開放(Dispose)とかやってみたんですが、これもアクセスが拒否されてしまいました

118:デフォルトの名無しさん
09/06/04 19:14:28
コントロールをダブルクリックしたときに自動生成されるコードを、
VB6のようにアルファベット順で出来るようにすることは出来ますか?

119:デフォルトの名無しさん
09/06/05 10:58:58
>>115
前者は、宣言した時点で 101×101 の固定サイズの配列ができ、そのすべてについて
いつでもアクセスできる。

   0 1 2  100
  0 ■■■...■■
  1 ■■■...■■
    :
100 ■■■...■■

後者は、宣言しただけでは「可変サイズの配列」の、101 の配列ができるのみ。
実際にアクセスする前に
  For i As Integer = 0 To 100
    Redim Hairetu(i)(100)
  Next i
などとしないといけないが、使用しない部分は Redim しなくてよかったり、
最初の添字が変わるごとにサイズを変えたりもできる。

   0 1 2  100
  0 ■■■...■■ (Hairetu(0) は 0〜100)
  1          (Hairetu(1) は Nothing)
  2 ■■■     (Hairetu(2) は 0〜2)
    :
100 ■■■...■   (Hairetu(100) は 0〜99)

でもメリットはメモリの節約くらい。
(速度にも影響するかもだが)

120:デフォルトの名無しさん
09/06/05 18:01:41
>>119
> でもメリットはメモリの節約くらい。
Array の各種メソッドが使えるってメリットは大きい
むしろ多次元配列こそメリットがないと思うね

121:デフォルトの名無しさん
09/06/05 20:35:19
ジャグ配列(後者)の方が大分速い
いろいろ多次元配列は冷遇されてるからそのうち公式に非推奨になるかもね

122:デフォルトの名無しさん
09/06/05 20:47:28
探しても見つからないので、教えてください。
VB.netでクラスの敬称などを使用していて、日本語でコメントしてあり、大規模である。

という条件を満たしているものをご存知でしたら、教えてください

123:デフォルトの名無しさん
09/06/05 20:54:00
VB.NETのオープンソースプロジェクト自体ほとんどないから諦めてC#読めるようになるといいよ

124:114
09/06/05 22:26:13
どなたか分かりませんでしょうか・・・

125:115
09/06/05 22:36:22
なるほど、そういうことになるんですね
私は前者は、データを格納するためのまんまデータの下駄箱のような配列として使用して
後者は、一時的にSplitなどで連続なデータを格納したいときに使用していました
使い分けてました
ちなみに、どちらが多次元配列とジャグ配列は別物なんですか?

126:114
09/06/05 22:41:23
>>115
多次元配列で二次などの要素数が不定期なものをジャグと

127:デフォルトの名無しさん
09/06/05 22:55:25
メモリの構造が全然違う
多次元配列は連続したメモリ領域
ジャグ配列は配列の配列
.NETでは通常区別する

128:デフォルトの名無しさん
09/06/06 17:46:02
Microsoft AccessのMDBファイルは、普通にAccessを使ってExcelファイルやCSVファイル
のデータをインポートしたり、クエリーの結果をExcelファイル形式でエクスポートした
りしてますが、Accessを使わずに、VB.NET等から同様のことってできますやろか。

129:デフォルトの名無しさん
09/06/07 09:54:00
VB.NETで作成したexeを動かすのにランタイムは必要になりますか?

130:デフォルトの名無しさん
09/06/07 09:55:33
VBランタイムはいらんが再頒布可能パッケージのインストールは必要だな

131:デフォルトの名無しさん
09/06/07 09:56:45
ありがとうございます。

132:デフォルトの名無しさん
09/06/07 13:53:55
C++で作ったコードをVB.netに変換してくれるような機能はありますか?

133:デフォルトの名無しさん
09/06/07 13:56:59
ありません。

134:デフォルトの名無しさん
09/06/07 13:57:39
そうですか、残念です

135:デフォルトの名無しさん
09/06/07 15:40:38
VB.NETでちょっと悩んでいるので質問させてください。
ComboBoxでスタイルをDropDownにした時、テキストボックス部を描画しているイベントは何でしょうか?
オーナードロウで描画する際DropDownListであればOnPaintで描画したものがそのまま出るのですが、
DropDownのときはOnPaintで描画したものがテキストボックス部の描画で上書きされて隠れてしまいます。
DrawItemは違うみたいで、ちょっと袋小路です・・・。

136:デフォルトの名無しさん
09/06/07 22:01:34
>>158
【魔力】書き込むと願いが必ず叶うスレ【強力】409
だろ

137:デフォルトの名無しさん
09/06/08 20:04:40
↑ちょっと書き込み位置がズレていないか?

138:デフォルトの名無しさん
09/06/09 11:08:11
単なる誤爆だろう。なんだ書き込み位置って。

139:デフォルトの名無しさん
09/06/09 12:21:52
はいっ
コモンダイアログのデフォルトパスを
「ネットワーク全体」にしたいのですが、
参考になるサイトがどうにもみつからないんですけど
どのようにすればいいんでしょうか?


140:デフォルトの名無しさん
09/06/11 13:45:57
::{208D2C60-3AEA-1069-A2D7-08002B30309D}\ネットワーク全体

141:、
09/06/11 21:27:39
VB2008で悩んでます。
exeへパイプでデータを流す処理を考えています。
どんどんデータが流れてくるのでexeはループでデータが来るのを待っているのですが
そのことによってexeのほかの処理が動けません。どうすればよいですか?

142:デフォルトの名無しさん
09/06/11 21:29:35
スレッド

143:デフォルトの名無しさん
09/06/12 10:50:23
VB2008を使用しています。
キーボードを押すと音が鳴るプログラムを作成しています。midiOutなどを使ってやっています。
音は出るのですが、うまくいかないことがあります。
例えば、キーボードの"A"を押すと、"ド"の音が出るようにします。それで、Aを押すと、"ド"の音は出るのですが、
長押しですと、ドーー ドドドドドドド…といった風に途中から連続して音が出てしまいます。
きちんと音を伸ばして鳴らしたいので、何か良い方法はありませんでしょうか?

144:デフォルトの名無しさん
09/06/12 12:17:53
KeyDownで鳴らし始めてKeyUpで止めればいいんだろ
そういうことができるAPIがあるかは知らんけど

145:デフォルトの名無しさん
09/06/12 15:46:54
Public Enum ScanDirection
x = -1
y = 0
z = 1
End Enum

列挙型で宣言した値は計算に使って値を変えていくことは可能でしょうか?

146:デフォルトの名無しさん
09/06/12 15:52:12
変数使えよ

147:デフォルトの名無しさん
09/06/12 16:17:50
>>146
ありがとうございました

148:デフォルトの名無しさん
09/06/12 20:29:26
>>143
ドーッって、音が鳴り終わるまで、入力されても無視するってすればいいんじゃない?
そのためには、音が鳴っている状態を取得しないとだと思うけど。

適当にググったら↓使えそうな気がする

【VB.NET】 MCIで音楽再生 その1
URLリンク(tenjiku.exblog.jp)

MIDI、MP3などの音楽ファイルを再生する
URLリンク(dobon.net)


149:143
09/06/13 08:50:35
>>144
ありがとうございます。KeyUp,KeyDownは使用しているのですが、うまくいきません。
もう少し試行錯誤してみます。
>>148
その方法があったとは・・・。ですが和音も鳴らしたいので、その方法だと和音が鳴らない気が。
むむむ、もう少し考えてみます。

お二方ともご回答ありがとうございました。


150:デフォルトの名無しさん
09/06/13 15:15:48
>>149
キーイベントを受けたとこで、どのキーがすでに押されているかを判定するってすればどう?
全部のキーイベントを無視するんじゃなくて。
押されていないキーの音は鳴らし、押されているキーの音は何もしない。


151:デフォルトの名無しさん
09/06/13 17:58:49
>>149
MIDIを使用する(VB.Net)
URLリンク(homepage1.nifty.com)

152:デフォルトの名無しさん
09/06/13 18:14:57
>>151 じゃダメだわ、スマソ

153:デフォルトの名無しさん
09/06/13 18:19:37
ReportViewerコントロール用のレポートファイル( .rdlc )のデザイナでの作成方法について色々解説してあるページとか参考書ってないでしょうか。

レポートウィザードで作れるピボットテーブルをベースに色々と追加したい要素があるんですが、どうやりゃ良いのかいまいちわからない。
一応、やりたいことは今年度のピボットテーブルに前年度の合計とか、前年度比とかの行とか列を追加することです。

154:デフォルトの名無しさん
09/06/13 22:14:15
MIDIってどうやって音出せばいいのか知らんかったけど、これ面白いね。
勉強になるわぁ。

155:デフォルトの名無しさん
09/06/13 22:59:08
>>149
MIDIプログラミング
URLリンク(eternalwindows.jp)
Windows MIDI プログラム入門
URLリンク(ourworld.compuserve.com)
MIDIを鳴らす
URLリンク(www13.plala.or.jp)
詳説MIDI規格
URLリンク(www.pluto.dti.ne.jp)
自作楽器「MIDIテルミン」の製作:CodeZine:
URLリンク(codezine.jp)
MIDI音源の利用
URLリンク(www2.pf-x.net)
VB.NET でMIDIOUTをOPENするには?
URLリンク(hpcgi1.nifty.com)
16進数、8進数、2進数の文字列を整数に変換する
URLリンク(dobon.net)


156:デフォルトの名無しさん
09/06/13 23:44:12
コールバック関数による出力デバイスの状態監視
URLリンク(maglog.jp)
MSDN midiOutOpen
URLリンク(msdn.microsoft.com)

デバイスは送られたデータの再生が終わるとコールバック関数にMM_WOM_DONEメッセージ(WOM_DONE)を送ります。


157:デフォルトの名無しさん
09/06/14 16:50:16
ちょっと質問です
text1、text2、text3というチェックボックスがあったとして、

For i = 1 To 3
If text[i].Checked = False Then
MsgBox("エラー:text" & i)
End If
Next

という風にしたいのですがtext1の1を動的に変えたい場合はどうすればいいのでしょうか?


158:デフォルトの名無しさん
09/06/14 16:55:46
配列に入れとけ

159:デフォルトの名無しさん
09/06/14 19:48:26
2002や2003じゃ駄目だがControlsを使うという手もあるかな

160:デフォルトの名無しさん
09/06/15 09:24:22
VB.NETでマルチコア対応のコードって書けます?

161:デフォルトの名無しさん
09/06/15 13:56:30
スレッド使えるだろ

162:デフォルトの名無しさん
09/06/15 14:36:14
意味分かってないと思われ

163:デフォルトの名無しさん
09/06/16 12:21:22
SQLを実行して、そのデータの表示方法を変えて出力したいのですが、どうすれば良いかわかりません。

164:デフォルトの名無しさん
09/06/16 12:29:34
0から全部説明しろってか。
せめて SQLDataAdapter や DataSet の使い方くらい入門書で勉強しなさい。

165:デフォルトの名無しさん
09/06/16 20:09:41
>>163
そのまま何回やっても勝手に表示方法が変わったりはしません。
どうすれば良いかと言うと、表示方法を変えるプログラムを作るしかないでしょう。

>>164
たぶんこのレベルの話かと

166:デフォルトの名無しさん
09/06/16 22:45:40
皆さんにお聴きしたいのですが、よろしいでしょうか。
今、VC6.0とVB2005でイベント処理を書こうとしています。
以下の通り書いているのですが、VB側では一向にハンドルが返って来ず
0のままです。

何かおかしい所は有りますでしょうか。是非お知恵をお貸しください。。。

VC6.0でイベント作成

HANDLE hEvent;
hEvent = CreateEvent(NULL, TRUE, FALSE, "EVENT000");


VB2005でイベントオープン

宣言

<DllImport("kernel32.dll")> _
Public Function OpenEvent(ByVal dwDesiredAcess As UInt32, _
ByVal bInheritHandle As Boolean, ByVal lpName As String) As IntPtr
End Function

呼出

Dim pt As IntPtr
pt = OpenEvent(0, False, "EVENT000")



167:デフォルトの名無しさん
09/06/16 23:53:21
どこにPInvoke使う必要がある。


168:デフォルトの名無しさん
09/06/17 01:11:12
LastError くらい確認しろよ

169:166
09/06/17 01:51:36
Daclareでやってみても結果は同じでした…。

LastErrorの値は、確認してみます。中途半端ですみません。


これに限らず、VB2005でAPIを使用する時に文字列を渡すと動作がおかしくなる傾向があるんですよね…。

うまく文字列が渡っていないのか、あるいは文字列を渡す時(Daclare等)の設定の他に、プロジェクト単位での設定等が必要になるのでしょうか?

結局、全てのAPIはVB2005で使用可能と考えて良いのでしょうか?

真剣に悩んでおります。。。
もう少しご教授ください。お願いします。

170:デフォルトの名無しさん
09/06/17 01:53:28
つーかなー。A か W かも明示的に指定してないし、マーシャリングも指定してないし、
適当に呼んどいて何言ってんだか、って感じだな。

171:162
09/06/17 02:18:35
Aliasですよね?
AもWも明示して試してみたのですが結果は同じでした…。

Marcialの指定は初耳です。どういう形で指定すれば良いのでしょうか?


分かる方から見れば、適当なだけかも知れませんが、不勉強なのは承知の上です。

すみません。教えて頂けますでしょうか。。。

172:デフォルトの名無しさん
09/06/17 09:20:45
VB2008を独習するのに、おすすめの書籍を教えてください

これまでVB6.0のフォームとモジュールだけでやってきて、
クラスとかオブジェクト指向とかはネットで読んで
「なんとなくこんなもんだろうか」程度の認識です

173:デフォルトの名無しさん
09/06/17 09:29:36
オブジェクト指向きっちり勉強したいならjavaでもやれば?
VBやC#の本ってその辺の概念はスルーまたはあらかじめ理解してる前提で書かれてるのが多い

174:デフォルトの名無しさん
09/06/17 09:33:25
>>166
>pt = OpenEvent(0, False, "EVENT000")
なんでアクセス権に 0 (アクセス権なし) してんだコレ。
Private Const EVENT_ALL_ACCESS As Integer = &H1F0003
pt = OpenEvent(EVENT_ALL_ACCESS, False, "EVENT000")

>>167
EventWaitHandle.OpenExisting 使うところだろうけど
まあ、どうしてもやってみたかったんだろう。

>>170
この場合は無指定で問題ない。

175:166
09/06/17 11:08:28
174さんの言う通り、アクセス権を設定したら取得出来ました。
本当にありがとうございました!

>Private Const EVENT_ALL_ACCESS As Integer = &H1F0003

こういうEnumの設定はどこで確認すればよいのでしょうか?
MSDN等、どこかに資料があるのでしょうか?


176:デフォルトの名無しさん
09/06/17 11:15:48
win32apiのC言語のヘッダファイル

177:デフォルトの名無しさん
09/06/17 11:16:23
>>4の「初心者から中級者のためのVB」のリンクきれてますよ

178:デフォルトの名無しさん
09/06/17 11:25:53
>>175
Enum じゃないし。
つか、API 呼び出しするのに API の仕様も確認しないとか…

>MSDN等、どこかに資料があるのでしょうか?
何を指定すればいいのかは勿論 MSDN ライブラリ等。
ただ、記号定数が実際にどういう値なのかは
ヘッダを覗くしかない。
(探すときは Visual Studio のファイル検索を使うと楽)

…ていうかね、>>174 でも書いたけど
>>167 の言う通り、API 呼び出し使う意味がないんだったら
Dim ev as EventWaitHandle = EventWaitHandle.OpenExisting("EVENT000")
とした方がいいと思うんだが。

179:166
09/06/17 13:37:01
なるほど、そういう事ですね。
もうすこし調査してみます。

本当にありがとうございました。名無しに戻ります。
それでは。

180:172
09/06/18 09:27:49
>>173
今現在、VB2008を学習しなくてはならない事情がありまして
何かカリスマとかバイブル的な書籍、というのは無いものでしょうか

特に学習しなくても、VB6.0の頃とほぼ同じ作り方ができてしまいますが、
それを払拭して、VB2008ならこう構成した方がよい、こう書くべき、
というセオリーみたいなところを勉強したいです

181:デフォルトの名無しさん
09/06/18 09:43:07
じゃC#勉強すればいいじゃん
自動的にVBも使えるようになるよ
VBの本である限りVB的なやり方というのはどうしても出てくる
VB2008というか.NET的に1番良いのは「C#と同じように使うこと」

182:デフォルトの名無しさん
09/06/18 15:08:21
VB.NET2005を使ってADOとかADOXを使いMDBファイルを作成するPGをwebにアップされている
サンプルを見つつ書いてみたのですが、どうしてもエラーが取れません。

' 他のフィールドの定義
With cat.Tables(strTable).Columns
  .Append("商品コード", adWChar, 10)
End With

のadWCharでエラーになります。この型を認識させるにはどこをいじればいいのでしょうか?

183:デフォルトの名無しさん
09/06/18 17:34:51
GUI(フォーム)をVB、コードをC++で書くことができると知ったのですが、
(スレリンク(tech板:1番))
方法があれば開設しているサイトなど、教えてください
また複数の言語を混ぜてプログラムを作ることをなんというのでしょうか?

184:デフォルトの名無しさん
09/06/18 19:23:24
IE では、「アクティブ コンテンツ」を制限する機能がありました。
「セキュリティ保護のため、このコンピュータにアクセスする可能性
のあるスクリプトやActiveXコントロールを実行しないよう、IEで制限
されています。オプションを表示するには、ここをクリックしてください」
という情報バーが出てくるものです。

この警告機能と、ダイアログを表示してユーザーが選択してから表示する
という機能を、WebBrowserにおいても導入するためにはどういった処理を
すれば良いでしょう?何か参照推奨のサイト等お教えください。よろしく
お願いします。

185:デフォルトの名無しさん
09/06/18 22:20:05
>>183
C++/CLIでアセンブリ作って参照に追加するだけ
と言えば簡単そうに聞こえるけど、C++と.NET両方の知識がないと厳しい。

186:デフォルトの名無しさん
09/06/18 22:34:15
>>185
ありがとうございます
C++/CLIでCILを作るのですね・・ややこしい><

187:デフォルトの名無しさん
09/06/19 01:45:26
昔のC++のコードを利用したいとかでなければまずメリットはないね
ものすごい科学技術計算でもするなら別だけどw

188:デフォルトの名無しさん
09/06/19 03:46:53
javaとか、昔の Basicって、1つの命令の後に、区切り文字
(";" や ";")を書けば、同じ行に続けて次の命令を記述できたよね。

VBって、それがないから、1行に一つの命令しか書けないでしょ?
1行に1つの命令しか書けないって、よく考えたら
ものすごく使い勝手悪い言語じゃない?


189:デフォルトの名無しさん
09/06/19 04:03:27
あるから問題ない

190:デフォルトの名無しさん
09/06/19 04:40:56
>>188

: で区切ればいいだろ

191:デフォルトの名無しさん
09/06/19 10:01:01
>>150-152
>>154-156
大変遅くなりました!レスありがとうございます。
どれも参考になるものばかりで、本当にありがとうございました!
頑張って作成したいと思います!!

192:デフォルトの名無しさん
09/06/19 10:02:21
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \

193:149
09/06/19 10:02:42
↑↑149です。
連レスすみませんでした。


194:デフォルトの名無しさん
09/06/19 13:00:12
現在VB2008 expressでWindowsフォームアプリケーションの多言語化について勉強しています。

C#による多言語対応アプリケーション開発のコツ
URLリンク(codezine.jp)
を参考に、デザイナ、resxファイルを利用して多言語化を行うことができました。

この作業を実際に行ってみて思ったのですが、
.netには、ある言語に翻訳したい!と思った人がアプリ公開者を通さずに翻訳 > 配布 ということが簡単にできる仕組みは準備されているのでしょうか。

実際に多言語対応したアプリを公開した場合、個人レベルだと、
規定の言語で公開(またはVerUP) > 各言語の翻訳者による翻訳 > 翻訳を反映
という流れになると思うのですが、

VerUP等でresxファイル内のデータが増えた場合(翻訳作業が必要な文字列などが増えた場合)、
各言語のresxを(アプリ公開者が)入手 > (アプリ公開者が)ビルド > dll作成 > 配布

という方法で翻訳を反映するのがやはり一般的なのでしょうか。

なければ自前で、実行時に動的にカルチャに応じたXMLを読み込み(あれば)反映、といったような処理で多言語化を実装しようと考えています。

195:デフォルトの名無しさん
09/06/19 13:10:11
厳密名付けてなかったら翻訳者が勝手にresxをコンパイルしたdllでも読み込まれるな

196:デフォルトの名無しさん
09/06/19 15:39:40
DB側の接続文字列に変更があったとき、
DataSetにConnectionStringを追加していくと
前のConnectionStringが残ってしまうのですが・・・。

これ以前のConnectionSringを編集したい、
または以前のを削除したい場合はどうしたらいいのでしょうか?

197:196
09/06/19 15:50:19
app.configとSettings.settingsを手動で書き換えていいのかな・・・。

198:デフォルトの名無しさん
09/06/19 15:55:01
OK

199:196
09/06/19 17:13:01
バックアップ取ってやってみたら
app.configとSettings.settingsの書き換えだけで問題なかったようです。
とっとと自分で試せって話ですよね・・・w

ともあれ、ありがとうございました。

200:デフォルトの名無しさん
09/06/20 09:57:22
環境:VB.net2003

GUIプログラムで、Windowsフォームの中にコンソールのようなCUIなコントロールを表示させたいのですが、
(AllocConsoleみたいに別途コンソールを開くのではなく)
そういったコントロール(以前に入力(実行)した内容は変更できない)はありませんでしょうか?
(標準でなくてもサードパーティー製でもなんでもいいです)
もし無いのであればRichTextBoxあたりでなんとかしてみるつもりです。


201:デフォルトの名無しさん
09/06/20 10:39:06
フォルダを複数選択するダイアログを作成したいと思っています。

こちらのページ
URLリンク(dobon.net)
こコピペでフォルダを選択できるようにはなりました。

'FolderBrowserDialogクラスのインスタンスを作成
Dim fbd As New FolderBrowserDialog

'上部に表示する説明テキストを指定する
fbd.Description = "フォルダを指定してください。"
'ルートフォルダを指定する
'デフォルトでDesktop
fbd.RootFolder = Environment.SpecialFolder.Desktop
'最初に選択するフォルダを指定する
'RootFolder以下にあるフォルダである必要がある
fbd.SelectedPath = "C:\Windows"
'ユーザーが新しいフォルダを作成できるようにする
'デフォルトでTrue
fbd.ShowNewFolderButton = True

'ダイアログを表示する
If fbd.ShowDialog(Me) = DialogResult.OK Then
'選択されたフォルダを表示する
Console.WriteLine(fbd.SelectedPath)
End If

しかし、OpenFileDialogと異なりFolderBrowserDialogにはMultiselectプロパティがないようです。
どうすればフォルダを複数選択できるようになるのでしょうか?

202:デフォルトの名無しさん
09/06/20 10:55:49
代案があるかどうかは知らんがSHBrowserForFolderじゃ仕様上複数選択はどうやっても不可能だな

203:デフォルトの名無しさん
09/06/20 11:06:55
URLリンク(btmtz.mvps.org)

204:デフォルトの名無しさん
09/06/20 11:42:47
ありがとうございます。
USBメモリ・外部メール等禁止のため長いコードだと手打ちはしんどいので、FolderBrowserDialogでディレクトリを選択後checked listboxに
ディレクトリ一覧を表示、そこで複数にチェックを入れるという形にしようと思います。

205:デフォルトの名無しさん
09/06/21 03:15:14
繰り返せばええがな

206:デフォルトの名無しさん
09/06/22 19:50:49
一覧表示の親フォームから詳細編集の子ダイアログを開くようなDBアプリを作ってて
親のBindingSourceを子に渡して子の各フォームにバインドさせたいんだけど、
コードで直接書くんじゃなくてデザイナのプロパティで設定する方法ってないでしょうか?

207:デフォルトの名無しさん
09/06/22 19:53:30
s/子の各フォーム/子の各コントロール/

208:デフォルトの名無しさん
09/06/22 20:18:28
VB.NETからエクセルのマクロを作成したり
データの入力制限を編集することは可能ですか?

指定したエクセルの列に値の重複を禁止する入力制限を追加して
DBの主キーのような設定を持たせたいのですが
入力制限の編集をVB.net上で行う方法が見つからないので

209:デフォルトの名無しさん
09/06/22 21:18:07
マクロの記録で記録できるならできる。
記録できないのも、一部は可能。

210:デフォルトの名無しさん
09/06/23 19:50:53
VBAのマクロを生成できるから何でもできる

211:デフォルトの名無しさん
09/06/23 20:23:57
調べてもマクロ呼び出ししか出てこないけど。
VB.net上で書いたソースをどの参照からマクロ登録することが出来るんだろう。
どなたかサンプルソースがあるところ教えてください

212:デフォルトの名無しさん
09/06/23 20:38:49
>>211
URLリンク(officetanaka.net)

213:デフォルトの名無しさん
09/06/23 22:44:41
VB2005でftpクライアントの機能作ってます。
WebRequestMethods.Ftp でサーバにあるファイル名を取ってくるときに、
2バイト文字のファイル名だと化けてしまいます。
化けないで正しいファイル名を取得する方法はないでしょうか?

214:デフォルトの名無しさん
09/06/23 22:53:11
FTPではマルチバイト文字は未定義なのよね
TcpClient or Socket使って自分でFTP喋るしかないんじゃないかなぁ
まあどっかにその辺の対応も含んだ野良FtpClientがあるかもしんないけど

215:デフォルトの名無しさん
09/06/24 02:26:15
化けるって、どこでどう化けるんだ?

216:デフォルトの名無しさん
09/06/24 22:10:40
テキストボックスのD&Dで
テキストのD&Dは
Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
If e.Data.GetDataPresent(DataFormats.UnicodeText) Then
e.Effect = DragDropEffects.Copy
End Sub

で処理できるのですが、インターネットエクスプローラに表示されているWEBページの
リンクの文字をD&Dした際に、HTMLに設定されたURLを取得するにはどのように書いたら良いでしょうか?

217:デフォルトの名無しさん
09/06/24 22:52:44
"UniformResourceLocator"でデータ取得
MemoryStreamにキャストしてそこからRead
Chr(0)を探してその直前までをEncoding.Default.GetString

218:デフォルトの名無しさん
09/06/24 22:54:22
あ、Chr(0)じゃなくていいか、単に0探すだけで

219:デフォルトの名無しさん
09/06/25 00:14:36
レスありがとございます。
その方法はアドレスバーのURLの左にあるアイコンをD&Dする方法ではないでしょうか?
HTMLのリンクになっているテキストはドラッグしても通行禁止のマークのままなのですが・・・

220:デフォルトの名無しさん
09/06/25 00:18:44
普通にa要素のD&Dを取れる
IEとFxで確認した
あ、EffectはCopyだけじゃなくてLinkも入れないと駄目かも

221:デフォルトの名無しさん
09/06/25 00:20:03
どぼんさんのHPにあるじゃないか
URLリンク(dobon.net)

222:デフォルトの名無しさん
09/06/25 00:20:17
ありがとうございます。
DragDropEffects.Copy→DragDropEffects.Link
の変更で受け取れました。助かりました。


223:デフォルトの名無しさん
09/06/25 02:06:49
OSを起動後に起動時の処理(スタートアップのプログラムの起動など)の一番最後に
(PCがアイドル状態になったら)自分のアプリを起動したいのですが、
OSが起動後にそのような状態になったというのはどのように調べたら良いでしょうか?
ちなみにWindowsXP-PROです。

224:デフォルトの名無しさん
09/06/25 14:03:50
hint
wmic path Win32_Processor get LoadPercentage

225:デフォルトの名無しさん
09/06/25 14:04:10
すみません。自分の開発してるプログラムでつまずいてしまったので教えてください。
現在業務をスケジュール管理するプログラムを作っています。
業務を登録する画面では、1月〜12月、1日〜31日までのチェックボックスを
それぞれ作っています。
例えば1月〜12月と1日のチェックボックスをチェックすると、毎月1日の業務
として登録され、スケジュール表に毎月1日だけその業務が表示されるような
ものを作りたいと思ってます。
データベースはACCESSを使用しており、月と日のチェックボックスに対応する
項目としてはYes/No型で1月〜12月、1日〜31日まで全て作っています。

今つまずいている点は、日付を指定してDB上からその日付に該当する業務を取得
したいのですが日付によってチェックするフィールドの位置が違う為、
どのようにすればいいか悩んでいます。
例えば6月1日の業務を取得したい場合、DB上で6月フィールドにチェックがあるかどうか
の確認が必要になりますが、日付によって確認するフィールドを動的に変える方法を
教えてください。

1月1日の場合〜、1月2日の場合〜とコーディングしたら365日分つくらないと
いけないので(こんな案しか思いつかなかったorz)良い案があれば教えて下さい。

226:デフォルトの名無しさん
09/06/25 14:16:31
DBのテーブルは与えられてるもの?自分でいじれるもの?

227:225
09/06/25 14:17:56
連投すみません。
フィールド名を変数で定義出来れば多分出来るかなと思います。

1月の場合、変数に"1月"と代入しその変数=trueのレコードを取得とするような
クエリにぶちこめば動くようにしたいです。


228:225
09/06/25 14:20:31
>>226
DBは自分でいじることが出来ます。
本当にド素人なんでどういったやり方がスマートなのかわかってないので
、こういうプログラムを作るときは普通こういった方法をする
と言ったアドバイスを頂けたらと思います。
よろしくお願いいたします。

229:デフォルトの名無しさん
09/06/25 14:23:31
Accessを使ってるとフォームを作りやすいようなイメージでテーブルを
作ってしまうのだろうけどそこが誤りだろうな。
日付によって読みに行く場所が違うというのが異常だからそこを直すべき。

230:225
09/06/25 14:58:45
>>229
つまり1月〜12月、1日〜31日のフィールドっていうのが異常って事ですよね?
むずかしいです・・・

231:デフォルトの名無しさん
09/06/25 16:24:00
まず、フィールドってのがRDB上の属性(カラム)なのかGUI上のコントロールなのかよくわからない
可能ならとりあえず現状のスキーマとSQLクエリでも晒してくれ

232:デフォルトの名無しさん
09/06/25 16:30:58
RDBの流儀でいえばこんな感じのスキーマになると予想

スケジュール表 [ 日付, 業務種別ID, 実業務ID ]
業務マスタ [ 業務種別ID, 業務名, 実業務テーブル名 ]
(実業務表) [ 実業務ID, 必要な情報・・・ ] ←業務ごとに作成


233:デフォルトの名無しさん
09/06/25 17:39:47
>>225
プログラムで動的にSQLを生成して実行する
フィールド名も動的に変更できる

>>229
今回の要件なら、俺でも1−12月のフラグと1−31日のフラグもつかもしれない
まあ、ホントは後で書くスキーマのようにするのが正解だろうけど

>>232
登録するのは、業務の繰り返し頻度であって、業務のスケジュールそのものじゃないぞ
そのスキーマだと、日ごとスケジュールの生成って作業が必要だな
そして繰り返し頻度を変更した場合、今あるスケジュールを全部けして再生成
さらに何年先までのスケジュールを生成していいのか不明

俺の予想スキーマ

業務マスタ(業務ID,業務名,その他必要な内容)
業務頻度月(業務ID,業務実行月)
業務頻度日(業務ID,業務実行日)

指定月日の業務を知りたければ、この三つを業務IDでjoinして
業務頻度月.業務実行月=指定月日の月 and 業務頻度日.業務実行日=指定月日の日 を検索

まああれだ。DB設計の話は板違いだな

234:デフォルトの名無しさん
09/06/25 22:34:03
DBも気になるけどチェックボックスが大量に並んでいる画面を想像してぞっとした
あ、チェックボックスのリストコントロールとかもあるか・・・

235:デフォルトの名無しさん
09/06/26 04:16:35
大量って言っても、12個+31個だからなぁ

カレンダー系のマスタメンテとかで、31個のチェックボックスを
並べるのなんて結構やってるし

まあしかし、>225からここまで1回もvb.netって言葉が出てないじゃないかw


236:デフォルトの名無しさん
09/06/26 13:36:39

おい、出すなよ。

237:デフォルトの名無しさん
09/06/26 16:00:18
DB的な使い方をしない前提なら、
スポットで1日分だけ読み込もうとせずに、
1年分くらい全部読み込んでおけってことになるね。

238:デフォルトの名無しさん
09/06/26 18:18:29
VB.NETでスレッドを扱いたいんです。
同時に20個ほどスレッドを起動させ終了を待ちたいのですが、
どうすればいいのでしょうか?
.joinでは無理ですよね?
よろしくお願いします。

239:デフォルトの名無しさん
09/06/26 18:21:09
別にJoinでも問題ないと思うが

240:デフォルトの名無しさん
09/06/26 18:49:10
そんなにスレッド起動させてどうすんの?
SNS巡回ツールでも作んの?


241:デフォルトの名無しさん
09/06/26 23:46:59
大量のラベルコントロールを書き換えがしたくて
label1 label2 label3...のような感じで連番にして繰り返し処理で
一気に書き換えようと思うのですが思うようにできません
target = Cobj("label" & i) のような感じにしたのですが
エラーが出てとまってしまいます
どうしたらよいのでしょうか?

242:デフォルトの名無しさん
09/06/27 00:02:44
>>241
label1 label2 label3...をListに入れる

243:デフォルトの名無しさん
09/06/27 00:03:16
テンプレに入れたいぐらい良く出るな、この類の。

配列に入れとけ

244:デフォルトの名無しさん
09/06/27 00:13:42
Controls()からLabelをさがせばいいんじゃない

For Each child As Control In Me.Controls
 If child.Text Like "Label*" Then
  child.Text = child.Text & "でんがな"
 End If
Next

245:デフォルトの名無しさん
09/06/27 00:34:12
正直、こんな命令があったんだとか
こんな使い方があったんだとか
他人のプログラムやサイトを見て知ることが多く
それを踏まえてみると自分の書いたコードがとても無駄だったみたいな経験があるんですが

みなさんはどうやって、こんな命令があるこんな使い方があるみたいなものを学んでるんですか?

246:デフォルトの名無しさん
09/06/27 00:36:46
MSDNのサンプルを読破しようと思ったこともありました
挫折しました
というわけで他人のプログラムやサイトw

247:238
09/06/27 01:31:43
>>238です
スレッドが終わるタイミングはまちまちです。
終わったスレッドから終わったあとの処理をしていきたいのです。
.joinだと制御が戻ってこないので困っています。

248:デフォルトの名無しさん
09/06/27 01:33:33
コンストラクタ内のstatic変数ってそのクラスのオブジェクトすべてで共通じゃないの?
オブジェクトに通し番号をつけようと思って以下のように書いたんだが、毎回0になるのだが・・・

Public Class Form1
 Private Class Foo
  Public Sub New()
   Static Sequence As Integer = 0
   Sequence += 1
   (毎回0に初期化されてこの時点で1になる

249:デフォルトの名無しさん
09/06/27 02:16:37
>>248
Static (Visual Basic)
URLリンク(msdn.microsoft.com)(VS.80).aspx

>プロシージャが Shared でなければ、その Static 変数を含むローカル変数はインスタンス変数になります。
>そのインスタンス内の変数は、別のインスタンス内の同じ名前を持つ変数とは独立したものです。

各インスタンスで共有したかったらShared使ってこんな感じ

Private Class Foo
 Private Shared Sequence As Integer = 0
 Public Sub New()
  Sequence += 1
  Console.WriteLine(Sequence)
 End Sub
End Class

250:デフォルトの名無しさん
09/06/27 02:28:03
>>249
thnx
staticなのにインスタンス別とは・・・

251:デフォルトの名無しさん
09/06/27 03:39:00
>>247
やっぱ、スレッドが終わるとき自分で終了通知する、とかじゃないかね

Dim waitHandles(20) As AutoResetEvent

Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  For i As Integer = 0 To waitHandles.Length - 1
    waitHandles(i) = New AutoResetEvent(False)
    Dim workThread As Thread = New Thread(AddressOf worker)
    workThread.Start(i)
  Next
  Dim manageThread As Thread = New Thread(AddressOf manager)
  manageThread.Start()
End Sub

Private Sub worker(ByVal obj As Object)
  Dim i As Integer = CInt(obj)
  Thread.Sleep(i * 100) '適当に仕事をする
  waitHandles(i).Set() 'スレッドが終わるときに終了通知
End Sub

Private Sub manager()
  Debug.Print("--------------")
  For count As Integer = 0 To waitHandles.Length - 1
    Dim i As Integer = WaitHandle.WaitAny(waitHandles) '終了通知を待つ
    Debug.Print("worker {0} done", i)
  Next
  Debug.Print("ALL done")
End Sub

252:225
09/06/27 08:11:33
皆さん、教えていただきありがとうございました。
DBの設計を見直した方が良かったのですが、時間的な関係で今回はこのまま行く
事になりました。
結局プログラムでレコード1件ずつ読み込んで、指定日付の月、日に
対応するフィールドそれぞれのデータがtrueなら取得。
取得したデータを別テーブルに追加していってスケジュール表を作りました。

申し訳ないのですが、別のことでもう少し教えて頂きたい事があります。
スケジュール表を更新した日付等、ちょっとした情報を保存しておきたいのですが、
その為だけにわざわざ新しいテーブルを作るっていうのはおかしいですか?
保存しておきたい情報としては、更新日付、いつから〜いつまでのデータを
スケジュール表に取得しているかという情報くらいです。
スケジュール表は3種類あるので保存するレコード数は3件以上には絶対にならないので
たった3件の情報の為だけのテーブル作るっていうのは、変なのかなと思いまして
皆さんのご意見をいただけたらと思います。
お願いします。

253:デフォルトの名無しさん
09/06/27 11:14:59
DBを使うのはやめてOSファイルに書き出すのはどうだろう。
DataSetに全部突っ込んでテキスト(XML)で保存するのもいいアイデアだと思う。

254:デフォルトの名無しさん
09/06/27 12:59:33
いい加減、VB.NET関係ない話は該当するスレ(板)で聞け


255:225
09/06/27 15:13:48
>>254
VB.NETで作ってるので、関係ないとは一概に言えないと思います。

256:デフォルトの名無しさん
09/06/27 15:30:58
関係ないだろ。

257:デフォルトの名無しさん
09/06/28 13:18:40
>>252
書いてあることだけみると、他の人のアドバイスを元にDBから作り直せば3時間くらいで作れそうな気がするんだけど、
それでも「時間的な関係で」って結局そのままつくり続けるならここで聞く意味ないんじゃないか?

とりあえず更新日付等の情報を保存するためにテーブルを作るのは別に問題ないと思うけど、その程度の情報なら、
更新が起きたときにそのテーブルのレコードをUPDATEするんじゃなくて、INSERTしてログ的な使い方のほうが、そのデータをほしいって言った人の要求に近いんじゃないか。

更新対象のスケジュール日付、更新した人、作業内容(追加、修正、削除等)、更新日

みたいな感じのログにしておけば当面の要求はこなせると思う。
毎月1日実行のスケジュールを追加したら12個ログができるような感じで。

業務スケジュールっていうことだし、多分そんな頻繁に変更がないから、容量もそんなにくわないと思う。


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

4944日前に更新/199 KB
担当:undef