トップページ⇒tech
1001コメント367KB

VB.NET質問スレ(Part30)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/05/17(日) 10:00:19
前スレ

VB.NET質問スレ(Part29)
http://pc12.2ch.net/test/read.cgi/tech/1235206416/l50

テンプレは>>2〜
0159デフォルトの名無しさん2009/06/14(日) 19:48:26
2002や2003じゃ駄目だがControlsを使うという手もあるかな
0160デフォルトの名無しさん2009/06/15(月) 09:24:22
VB.NETでマルチコア対応のコードって書けます?
0161デフォルトの名無しさん2009/06/15(月) 13:56:30
スレッド使えるだろ
0162デフォルトの名無しさん2009/06/15(月) 14:36:14
意味分かってないと思われ
0163デフォルトの名無しさん2009/06/16(火) 12:21:22
SQLを実行して、そのデータの表示方法を変えて出力したいのですが、どうすれば良いかわかりません。
0164デフォルトの名無しさん2009/06/16(火) 12:29:34
0から全部説明しろってか。
せめて SQLDataAdapter や DataSet の使い方くらい入門書で勉強しなさい。
0165デフォルトの名無しさん2009/06/16(火) 20:09:41
>>163
そのまま何回やっても勝手に表示方法が変わったりはしません。
どうすれば良いかと言うと、表示方法を変えるプログラムを作るしかないでしょう。

>>164
たぶんこのレベルの話かと
0166デフォルトの名無しさん2009/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")

0167デフォルトの名無しさん2009/06/16(火) 23:53:21
どこにPInvoke使う必要がある。
0168デフォルトの名無しさん2009/06/17(水) 01:11:12
LastError くらい確認しろよ
01691662009/06/17(水) 01:51:36
Daclareでやってみても結果は同じでした…。

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


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

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

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

真剣に悩んでおります。。。
もう少しご教授ください。お願いします。
0170デフォルトの名無しさん2009/06/17(水) 01:53:28
つーかなー。A か W かも明示的に指定してないし、マーシャリングも指定してないし、
適当に呼んどいて何言ってんだか、って感じだな。
01711622009/06/17(水) 02:18:35
Aliasですよね?
AもWも明示して試してみたのですが結果は同じでした…。

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


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

すみません。教えて頂けますでしょうか。。。
0172デフォルトの名無しさん2009/06/17(水) 09:20:45
VB2008を独習するのに、おすすめの書籍を教えてください

これまでVB6.0のフォームとモジュールだけでやってきて、
クラスとかオブジェクト指向とかはネットで読んで
「なんとなくこんなもんだろうか」程度の認識です
0173デフォルトの名無しさん2009/06/17(水) 09:29:36
オブジェクト指向きっちり勉強したいならjavaでもやれば?
VBやC#の本ってその辺の概念はスルーまたはあらかじめ理解してる前提で書かれてるのが多い
0174デフォルトの名無しさん2009/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
この場合は無指定で問題ない。
01751662009/06/17(水) 11:08:28
174さんの言う通り、アクセス権を設定したら取得出来ました。
本当にありがとうございました!

>Private Const EVENT_ALL_ACCESS As Integer = &H1F0003

こういうEnumの設定はどこで確認すればよいのでしょうか?
MSDN等、どこかに資料があるのでしょうか?
0176デフォルトの名無しさん2009/06/17(水) 11:15:48
win32apiのC言語のヘッダファイル
0177デフォルトの名無しさん2009/06/17(水) 11:16:23
>>4の「初心者から中級者のためのVB」のリンクきれてますよ
0178デフォルトの名無しさん2009/06/17(水) 11:25:53
>>175
Enum じゃないし。
つか、API 呼び出しするのに API の仕様も確認しないとか…

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

…ていうかね、>>174 でも書いたけど
>>167 の言う通り、API 呼び出し使う意味がないんだったら
Dim ev as EventWaitHandle = EventWaitHandle.OpenExisting("EVENT000")
とした方がいいと思うんだが。
01791662009/06/17(水) 13:37:01
なるほど、そういう事ですね。
もうすこし調査してみます。

本当にありがとうございました。名無しに戻ります。
それでは。
01801722009/06/18(木) 09:27:49
>>173
今現在、VB2008を学習しなくてはならない事情がありまして
何かカリスマとかバイブル的な書籍、というのは無いものでしょうか

特に学習しなくても、VB6.0の頃とほぼ同じ作り方ができてしまいますが、
それを払拭して、VB2008ならこう構成した方がよい、こう書くべき、
というセオリーみたいなところを勉強したいです
0181デフォルトの名無しさん2009/06/18(木) 09:43:07
じゃC#勉強すればいいじゃん
自動的にVBも使えるようになるよ
VBの本である限りVB的なやり方というのはどうしても出てくる
VB2008というか.NET的に1番良いのは「C#と同じように使うこと」
0182デフォルトの名無しさん2009/06/18(木) 15:08:21
VB.NET2005を使ってADOとかADOXを使いMDBファイルを作成するPGをwebにアップされている
サンプルを見つつ書いてみたのですが、どうしてもエラーが取れません。

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

のadWCharでエラーになります。この型を認識させるにはどこをいじればいいのでしょうか?
0183デフォルトの名無しさん2009/06/18(木) 17:34:51
GUI(フォーム)をVB、コードをC++で書くことができると知ったのですが、
(ttp://pc12.2ch.net/test/read.cgi/tech/1099112351/1)
方法があれば開設しているサイトなど、教えてください
また複数の言語を混ぜてプログラムを作ることをなんというのでしょうか?
0184デフォルトの名無しさん2009/06/18(木) 19:23:24
IE では、「アクティブ コンテンツ」を制限する機能がありました。
「セキュリティ保護のため、このコンピュータにアクセスする可能性
のあるスクリプトやActiveXコントロールを実行しないよう、IEで制限
されています。オプションを表示するには、ここをクリックしてください」
という情報バーが出てくるものです。

この警告機能と、ダイアログを表示してユーザーが選択してから表示する
という機能を、WebBrowserにおいても導入するためにはどういった処理を
すれば良いでしょう?何か参照推奨のサイト等お教えください。よろしく
お願いします。
0185デフォルトの名無しさん2009/06/18(木) 22:20:05
>>183
C++/CLIでアセンブリ作って参照に追加するだけ
と言えば簡単そうに聞こえるけど、C++と.NET両方の知識がないと厳しい。
0186デフォルトの名無しさん2009/06/18(木) 22:34:15
>>185
ありがとうございます
C++/CLIでCILを作るのですね・・ややこしい><
0187デフォルトの名無しさん2009/06/19(金) 01:45:26
昔のC++のコードを利用したいとかでなければまずメリットはないね
ものすごい科学技術計算でもするなら別だけどw
0188デフォルトの名無しさん2009/06/19(金) 03:46:53
javaとか、昔の Basicって、1つの命令の後に、区切り文字
(";" や ";")を書けば、同じ行に続けて次の命令を記述できたよね。

VBって、それがないから、1行に一つの命令しか書けないでしょ?
1行に1つの命令しか書けないって、よく考えたら
ものすごく使い勝手悪い言語じゃない?
0189デフォルトの名無しさん2009/06/19(金) 04:03:27
あるから問題ない
0190デフォルトの名無しさん2009/06/19(金) 04:40:56
>>188

: で区切ればいいだろ
0191デフォルトの名無しさん2009/06/19(金) 10:01:01
>>150-152
>>154-156
大変遅くなりました!レスありがとうございます。
どれも参考になるものばかりで、本当にありがとうございました!
頑張って作成したいと思います!!
0192デフォルトの名無しさん2009/06/19(金) 10:02:21
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
01931492009/06/19(金) 10:02:42
↑↑149です。
連レスすみませんでした。
0194デフォルトの名無しさん2009/06/19(金) 13:00:12
現在VB2008 expressでWindowsフォームアプリケーションの多言語化について勉強しています。

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

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

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

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

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

なければ自前で、実行時に動的にカルチャに応じたXMLを読み込み(あれば)反映、といったような処理で多言語化を実装しようと考えています。
0195デフォルトの名無しさん2009/06/19(金) 13:10:11
厳密名付けてなかったら翻訳者が勝手にresxをコンパイルしたdllでも読み込まれるな
0196デフォルトの名無しさん2009/06/19(金) 15:39:40
DB側の接続文字列に変更があったとき、
DataSetにConnectionStringを追加していくと
前のConnectionStringが残ってしまうのですが・・・。

これ以前のConnectionSringを編集したい、
または以前のを削除したい場合はどうしたらいいのでしょうか?
01971962009/06/19(金) 15:50:19
app.configとSettings.settingsを手動で書き換えていいのかな・・・。
0198デフォルトの名無しさん2009/06/19(金) 15:55:01
OK
01991962009/06/19(金) 17:13:01
バックアップ取ってやってみたら
app.configとSettings.settingsの書き換えだけで問題なかったようです。
とっとと自分で試せって話ですよね・・・w

ともあれ、ありがとうございました。
0200デフォルトの名無しさん2009/06/20(土) 09:57:22
環境:VB.net2003

GUIプログラムで、Windowsフォームの中にコンソールのようなCUIなコントロールを表示させたいのですが、
(AllocConsoleみたいに別途コンソールを開くのではなく)
そういったコントロール(以前に入力(実行)した内容は変更できない)はありませんでしょうか?
(標準でなくてもサードパーティー製でもなんでもいいです)
もし無いのであればRichTextBoxあたりでなんとかしてみるつもりです。
0201デフォルトの名無しさん2009/06/20(土) 10:39:06
フォルダを複数選択するダイアログを作成したいと思っています。

こちらのページ
ttp://dobon.net/vb/dotnet/form/folderdialog.html
こコピペでフォルダを選択できるようにはなりました。

'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プロパティがないようです。
どうすればフォルダを複数選択できるようになるのでしょうか?
0202デフォルトの名無しさん2009/06/20(土) 10:55:49
代案があるかどうかは知らんがSHBrowserForFolderじゃ仕様上複数選択はどうやっても不可能だな
0203デフォルトの名無しさん2009/06/20(土) 11:06:55
http://btmtz.mvps.org/vbexplorer/
0204デフォルトの名無しさん2009/06/20(土) 11:42:47
ありがとうございます。
USBメモリ・外部メール等禁止のため長いコードだと手打ちはしんどいので、FolderBrowserDialogでディレクトリを選択後checked listboxに
ディレクトリ一覧を表示、そこで複数にチェックを入れるという形にしようと思います。
0205デフォルトの名無しさん2009/06/21(日) 03:15:14
繰り返せばええがな
0206デフォルトの名無しさん2009/06/22(月) 19:50:49
一覧表示の親フォームから詳細編集の子ダイアログを開くようなDBアプリを作ってて
親のBindingSourceを子に渡して子の各フォームにバインドさせたいんだけど、
コードで直接書くんじゃなくてデザイナのプロパティで設定する方法ってないでしょうか?
0207デフォルトの名無しさん2009/06/22(月) 19:53:30
s/子の各フォーム/子の各コントロール/
0208デフォルトの名無しさん2009/06/22(月) 20:18:28
VB.NETからエクセルのマクロを作成したり
データの入力制限を編集することは可能ですか?

指定したエクセルの列に値の重複を禁止する入力制限を追加して
DBの主キーのような設定を持たせたいのですが
入力制限の編集をVB.net上で行う方法が見つからないので
0209デフォルトの名無しさん2009/06/22(月) 21:18:07
マクロの記録で記録できるならできる。
記録できないのも、一部は可能。
0210デフォルトの名無しさん2009/06/23(火) 19:50:53
VBAのマクロを生成できるから何でもできる
0211デフォルトの名無しさん2009/06/23(火) 20:23:57
調べてもマクロ呼び出ししか出てこないけど。
VB.net上で書いたソースをどの参照からマクロ登録することが出来るんだろう。
どなたかサンプルソースがあるところ教えてください
0212デフォルトの名無しさん2009/06/23(火) 20:38:49
>>211
http://officetanaka.net/excel/vba/vbe/06.htm
0213デフォルトの名無しさん2009/06/23(火) 22:44:41
VB2005でftpクライアントの機能作ってます。
WebRequestMethods.Ftp でサーバにあるファイル名を取ってくるときに、
2バイト文字のファイル名だと化けてしまいます。
化けないで正しいファイル名を取得する方法はないでしょうか?
0214デフォルトの名無しさん2009/06/23(火) 22:53:11
FTPではマルチバイト文字は未定義なのよね
TcpClient or Socket使って自分でFTP喋るしかないんじゃないかなぁ
まあどっかにその辺の対応も含んだ野良FtpClientがあるかもしんないけど
0215デフォルトの名無しさん2009/06/24(水) 02:26:15
化けるって、どこでどう化けるんだ?
0216デフォルトの名無しさん2009/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を取得するにはどのように書いたら良いでしょうか?
0217デフォルトの名無しさん2009/06/24(水) 22:52:44
"UniformResourceLocator"でデータ取得
MemoryStreamにキャストしてそこからRead
Chr(0)を探してその直前までをEncoding.Default.GetString
0218デフォルトの名無しさん2009/06/24(水) 22:54:22
あ、Chr(0)じゃなくていいか、単に0探すだけで
0219デフォルトの名無しさん2009/06/25(木) 00:14:36
レスありがとございます。
その方法はアドレスバーのURLの左にあるアイコンをD&Dする方法ではないでしょうか?
HTMLのリンクになっているテキストはドラッグしても通行禁止のマークのままなのですが・・・
0220デフォルトの名無しさん2009/06/25(木) 00:18:44
普通にa要素のD&Dを取れる
IEとFxで確認した
あ、EffectはCopyだけじゃなくてLinkも入れないと駄目かも
0221デフォルトの名無しさん2009/06/25(木) 00:20:03
どぼんさんのHPにあるじゃないか
ttp://dobon.net/vb/dotnet/control/dropfromwebbrowser.html
0222デフォルトの名無しさん2009/06/25(木) 00:20:17
ありがとうございます。
DragDropEffects.Copy→DragDropEffects.Link
の変更で受け取れました。助かりました。
0223デフォルトの名無しさん2009/06/25(木) 02:06:49
OSを起動後に起動時の処理(スタートアップのプログラムの起動など)の一番最後に
(PCがアイドル状態になったら)自分のアプリを起動したいのですが、
OSが起動後にそのような状態になったというのはどのように調べたら良いでしょうか?
ちなみにWindowsXP-PROです。
0224デフォルトの名無しさん2009/06/25(木) 14:03:50
hint
wmic path Win32_Processor get LoadPercentage
0225デフォルトの名無しさん2009/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)良い案があれば教えて下さい。
0226デフォルトの名無しさん2009/06/25(木) 14:16:31
DBのテーブルは与えられてるもの?自分でいじれるもの?
02272252009/06/25(木) 14:17:56
連投すみません。
フィールド名を変数で定義出来れば多分出来るかなと思います。

1月の場合、変数に"1月"と代入しその変数=trueのレコードを取得とするような
クエリにぶちこめば動くようにしたいです。
02282252009/06/25(木) 14:20:31
>>226
DBは自分でいじることが出来ます。
本当にド素人なんでどういったやり方がスマートなのかわかってないので
、こういうプログラムを作るときは普通こういった方法をする
と言ったアドバイスを頂けたらと思います。
よろしくお願いいたします。
0229デフォルトの名無しさん2009/06/25(木) 14:23:31
Accessを使ってるとフォームを作りやすいようなイメージでテーブルを
作ってしまうのだろうけどそこが誤りだろうな。
日付によって読みに行く場所が違うというのが異常だからそこを直すべき。
02302252009/06/25(木) 14:58:45
>>229
つまり1月〜12月、1日〜31日のフィールドっていうのが異常って事ですよね?
むずかしいです・・・
0231デフォルトの名無しさん2009/06/25(木) 16:24:00
まず、フィールドってのがRDB上の属性(カラム)なのかGUI上のコントロールなのかよくわからない
可能ならとりあえず現状のスキーマとSQLクエリでも晒してくれ
0232デフォルトの名無しさん2009/06/25(木) 16:30:58
RDBの流儀でいえばこんな感じのスキーマになると予想

スケジュール表 [ 日付, 業務種別ID, 実業務ID ]
業務マスタ [ 業務種別ID, 業務名, 実業務テーブル名 ]
(実業務表) [ 実業務ID, 必要な情報・・・ ] ←業務ごとに作成
0233デフォルトの名無しさん2009/06/25(木) 17:39:47
>>225
プログラムで動的にSQLを生成して実行する
フィールド名も動的に変更できる

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

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

俺の予想スキーマ

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

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

まああれだ。DB設計の話は板違いだな
0234デフォルトの名無しさん2009/06/25(木) 22:34:03
DBも気になるけどチェックボックスが大量に並んでいる画面を想像してぞっとした
あ、チェックボックスのリストコントロールとかもあるか・・・
0235デフォルトの名無しさん2009/06/26(金) 04:16:35
大量って言っても、12個+31個だからなぁ

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

まあしかし、>225からここまで1回もvb.netって言葉が出てないじゃないかw
0236デフォルトの名無しさん2009/06/26(金) 13:36:39
↑
おい、出すなよ。
0237デフォルトの名無しさん2009/06/26(金) 16:00:18
DB的な使い方をしない前提なら、
スポットで1日分だけ読み込もうとせずに、
1年分くらい全部読み込んでおけってことになるね。
0238デフォルトの名無しさん2009/06/26(金) 18:18:29
VB.NETでスレッドを扱いたいんです。
同時に20個ほどスレッドを起動させ終了を待ちたいのですが、
どうすればいいのでしょうか?
.joinでは無理ですよね?
よろしくお願いします。
0239デフォルトの名無しさん2009/06/26(金) 18:21:09
別にJoinでも問題ないと思うが
0240デフォルトの名無しさん2009/06/26(金) 18:49:10
そんなにスレッド起動させてどうすんの?
SNS巡回ツールでも作んの?
0241デフォルトの名無しさん2009/06/26(金) 23:46:59
大量のラベルコントロールを書き換えがしたくて
label1 label2 label3...のような感じで連番にして繰り返し処理で
一気に書き換えようと思うのですが思うようにできません
target = Cobj("label" & i) のような感じにしたのですが
エラーが出てとまってしまいます
どうしたらよいのでしょうか?
0242デフォルトの名無しさん2009/06/27(土) 00:02:44
>>241
label1 label2 label3...をListに入れる
0243デフォルトの名無しさん2009/06/27(土) 00:03:16
テンプレに入れたいぐらい良く出るな、この類の。

配列に入れとけ
0244デフォルトの名無しさん2009/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
0245デフォルトの名無しさん2009/06/27(土) 00:34:12
正直、こんな命令があったんだとか
こんな使い方があったんだとか
他人のプログラムやサイトを見て知ることが多く
それを踏まえてみると自分の書いたコードがとても無駄だったみたいな経験があるんですが

みなさんはどうやって、こんな命令があるこんな使い方があるみたいなものを学んでるんですか?
0246デフォルトの名無しさん2009/06/27(土) 00:36:46
MSDNのサンプルを読破しようと思ったこともありました
挫折しました
というわけで他人のプログラムやサイトw
02472382009/06/27(土) 01:31:43
>>238です
スレッドが終わるタイミングはまちまちです。
終わったスレッドから終わったあとの処理をしていきたいのです。
.joinだと制御が戻ってこないので困っています。
0248デフォルトの名無しさん2009/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になる
0249デフォルトの名無しさん2009/06/27(土) 02:16:37
>>248
Static (Visual Basic)
ttp://msdn.microsoft.com/ja-jp/library/z2cty7t8(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
0250デフォルトの名無しさん2009/06/27(土) 02:28:03
>>249
thnx
staticなのにインスタンス別とは・・・
0251デフォルトの名無しさん2009/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
02522252009/06/27(土) 08:11:33
皆さん、教えていただきありがとうございました。
DBの設計を見直した方が良かったのですが、時間的な関係で今回はこのまま行く
事になりました。
結局プログラムでレコード1件ずつ読み込んで、指定日付の月、日に
対応するフィールドそれぞれのデータがtrueなら取得。
取得したデータを別テーブルに追加していってスケジュール表を作りました。

申し訳ないのですが、別のことでもう少し教えて頂きたい事があります。
スケジュール表を更新した日付等、ちょっとした情報を保存しておきたいのですが、
その為だけにわざわざ新しいテーブルを作るっていうのはおかしいですか?
保存しておきたい情報としては、更新日付、いつから〜いつまでのデータを
スケジュール表に取得しているかという情報くらいです。
スケジュール表は3種類あるので保存するレコード数は3件以上には絶対にならないので
たった3件の情報の為だけのテーブル作るっていうのは、変なのかなと思いまして
皆さんのご意見をいただけたらと思います。
お願いします。
0253デフォルトの名無しさん2009/06/27(土) 11:14:59
DBを使うのはやめてOSファイルに書き出すのはどうだろう。
DataSetに全部突っ込んでテキスト(XML)で保存するのもいいアイデアだと思う。
0254デフォルトの名無しさん2009/06/27(土) 12:59:33
いい加減、VB.NET関係ない話は該当するスレ(板)で聞け
02552252009/06/27(土) 15:13:48
>>254
VB.NETで作ってるので、関係ないとは一概に言えないと思います。
0256デフォルトの名無しさん2009/06/27(土) 15:30:58
関係ないだろ。
0257デフォルトの名無しさん2009/06/28(日) 13:18:40
>>252
書いてあることだけみると、他の人のアドバイスを元にDBから作り直せば3時間くらいで作れそうな気がするんだけど、
それでも「時間的な関係で」って結局そのままつくり続けるならここで聞く意味ないんじゃないか?

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

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

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

業務スケジュールっていうことだし、多分そんな頻繁に変更がないから、容量もそんなにくわないと思う。
0258デフォルトの名無しさん2009/06/28(日) 15:03:59
質問させてください。
vb.netで開発したwebサイトを実行環境から確認しようと
IISを利用してアクセスしたのですが、
以下のようなエラーが出てしまいました。


BC40056: インポート 'Oracle.DataAccess.Client' で指定された名前空間または型が、
パブリック メンバを含んでいないか、または見つかりません。
名前空間または型が定義されていて、
少なくとも 1 つのパブリック メンバを含んでいることを確認してください。
また、インポートされた要素名がエイリアスを使用していないことを確認してください。


開発環境からは正常に実行できていたのですが、
実行環境からだとこのようなエラーが出てしまい困っています。
どなたか助けてください。


使用しているソフト等
windows xp
VWD
ODBC
ODP.NET
Oracle11g
■ このスレッドは過去ログ倉庫に格納されています