VB.NET質問スレ(Part30)at TECH
VB.NET質問スレ(Part30) - 暇つぶし2ch175: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個ログができるような感じで。

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

258:デフォルトの名無しさん
09/06/28 15:03:59
質問させてください。
vb.netで開発したwebサイトを実行環境から確認しようと
IISを利用してアクセスしたのですが、
以下のようなエラーが出てしまいました。


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


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


使用しているソフト等
windows xp
VWD
ODBC
ODP.NET
Oracle11g

259:デフォルトの名無しさん
09/06/28 15:07:36
machine.config か web.config に参照設定を記述しろ、ってなかったか?

260:258
09/06/28 15:20:02
>>259
「参照設定を記述しろ」っていう表示はどこにもなかったです。

261:デフォルトの名無しさん
09/06/28 16:03:09
URLリンク(otndnld.oracle.co.jp)

とかは違う? IIS への発行はどうやったの? 実行環境に、Oracle のクライアントはインストールしてある?

262:258
09/06/28 16:17:05
>>261
IISへの発行は、コントロールパネルの「プログラムの追加と削除」→「コンポーネントの追加」からIISを追加して、
ネット検索を経て、設定を済ませました。
URLリンク(<)ローカルホスト> でIISが表示されるようになっています。

OracleDBサーバーと、実行環境が同じPC上で行われています。
Oracle11gがインストールされているPCなので、
Oracleクライアントは必要ないかと判断しました。

また、リンク先のページを拝見しましたが、いまいち理解ができません;


263:デフォルトの名無しさん
09/06/28 16:21:00
んで、開発環境と実行環境は別 PC なのね?
どちらも 32ビット?

Oracle DB が入ってても、クライアントがインストールされてなきゃダメ。
まずはそこを確認してみて。

264:258
09/06/28 16:27:54
>>263
ありがとうございます。
開発環境と実行環境は別PCです。
どちらも32ビットです。

今からOracleクラインアントを
OracleDBサーバーにしているPCにインストールしてみまつ。

265:258
09/06/28 16:49:52
>>263
確認したのですが、OracleDBサーバーにしているPCに
クライアント10gがすでにインストールされていました。



266:デフォルトの名無しさん
09/06/28 17:52:33
皆さんは帳票の出力はCrystalReportを使用してますか?
現在帳票はACCESSで使用しています。
今回、フォームをVB.NETで作成しなおし、DBはACCESSを使用することにしました。
帳票がかなり複雑でビジュアル的にも良くできているのですが、それを
VB.NETで作り直すのがかなり困難だということをひしひしと感じております。
皆さんだったらどうしますか?

267:デフォルトの名無しさん
09/06/28 18:00:13
クリリポ、Active Reports、iText あたり。

268:258
09/06/28 18:09:14
Oracleクライアントはインストールされているのですが、
未だに上手くいきません。

269:266
09/06/28 18:10:13
ActiveReoprts良さそうなんですが会社で買うことが出来ないので
無料ツールはありませんか?

270:デフォルトの名無しさん
09/06/28 18:14:35
どうもこうもPrintDocumentでガシガシ書くだけだわな

271:デフォルトの名無しさん
09/06/28 18:15:41
つーかこのage厨は…

272:デフォルトの名無しさん
09/06/28 18:21:47
>>268
アプリの web.config はどうなってんの?

273:258
09/06/28 18:28:44
>>268
すみません。
「どうなってんの?」というのは具体的にどの部分のことを指しているのでしょうか?

274:デフォルトの名無しさん
09/06/28 18:32:13
つーか、参照設定がおかしいんじゃね? って言われてるんだから、
そこを調べろよ。

275:デフォルトの名無しさん
09/06/28 18:38:01
まぁ、どうやって調べたらいいんですか? とかだろうなw

276:258
09/06/28 18:44:03
>>274
参照設定は既に設定済みです。
「.NET」タブから一覧を表示させ、
「Oracle.DataAccess」が追加されています。

277:デフォルトの名無しさん
09/06/28 18:46:11
それは開発環境の話だろ・・・

278:258
09/06/28 18:56:37
>>277
すみません。
勘違いしておりました。
どの箇所の参照設定なのか教えて頂けますでしょうか?

279:デフォルトの名無しさん
09/06/28 19:14:42
ここで質問したからには、
他コミュで質問できないからな?
某掲示板や某フォーラムなどですると
「マルチ禁止!」のレスがつくからな
気をつけろよ・・・



280:266
09/06/28 19:59:32
PrintDocumentとCrystalReportはどちらの方がおすすめですか?
今回私の作りたいのは、1週間のスケジュール表になります。
日ごとに四角の枠を配置し、その中にその日の予定をテーブルから
書き出すことになります。
CrystalReportでとりあえず作ってみたものの、印刷プレビューで表示
すると実際の配置とかなりずれて表示されるので、本当に実現できるのか
不安になってきました。
予定表のテーブルから日をキーにしてレコードを取得後、日(曜日)ごとにDataSetを
作成してデータを突っ込んでます。
1週間分なので曜日のDatasetが7個できる形になります。
それをCrystalReportに渡して、曜日ごとの枠に収まるようにレコードを入れていきたい
のですが、全然綺麗に配置出来ないし、途方も無い作業でへこんでます。
だからといって皆さんに愚痴ってもしょうがないんですが、あまりにもレポート機能が
しょぼすぎて、ACCESSよりも劣ってるなんて残念でしょうがないです。
基本的にやり方としては間違ってないですか?

281:デフォルトの名無しさん
09/06/28 20:11:56
ある程度フォーマットが決まってるならクリリポ。
変なフォーマットなら、自由度の高い PrintDocument だな。

282:266
09/06/28 20:14:30
>>281
PrintDocument使うって事は、コードのみで書いていくんですよね・・・
例えば、エクセルで作るような表(網掛けなど)も可能ですか?

283:デフォルトの名無しさん
09/06/28 20:17:10
Box の塗りつぶしでできるレベルだな。

つーか、Access がいい、っていうなら、Access でやれよ。

284:デフォルトの名無しさん
09/06/28 20:29:01
>>278
Web.configにいろんなDLLの参照設定が書かれてないか?
それとサーバにODP.NETはインストールしてるのか?


285:266
09/06/28 20:36:31
>>283
会社でVB.NETで作るっていることに決まったんで、
ACCESSで作る事ができません・・・

286:デフォルトの名無しさん
09/06/28 20:43:33
だったら文句言わずにやれよ。
文句言うくらいなら、会社のやつらを説得すればいい。

287:266
09/06/28 21:01:55
>>286
はぁ?CrystalReportで作ってるってさっきから言ってるだろう。

288:デフォルトの名無しさん
09/06/28 21:08:20
じゃ、Crystal Reports スレでも行けよ。スレ違いだから。

289:266
09/06/28 23:04:43
こりゃしっけいいたしました

290:266
09/06/28 23:13:36
ってCrystalReportすれないじゃないか。騙された。

291:デフォルトの名無しさん
09/06/29 12:18:06
先生方~馬鹿な私にアドバイスをください orz

VC++2008のWin32プロジェクトで開発した共有メモリのDLLを
VB.net2008から呼び出すプログラムを製作しています。

DLL内部で保持している構造体を参照渡しして共有する仕組みです。
ですが、下記記述だと構造体内部の配列(stSub1~3)が
Nothingの状態になったままです。VB初心者の私にアドバイスをお願いします
ちなみにOSはWinXPです。よろしくお願いします。

※記述は改行数の関係上、次の書き込みに書きます

292:291
09/06/29 12:19:57
続き(2/3)
見づらいと思いますがご了承ください orz 
------------------------
VC++記述
------------------------
typedef struct
{
short s1;
short s2;
}ST_SUB;
typedef struct
{
ST_SUB stSub1[10];
ST_SUB stSub2[10];
ST_SUB stSub3[10];
}ST_AREA;
DLL関数:HANDLE MemOpen(PVOID* Address)


293:291
09/06/29 12:22:28
------------------------
VB記述 抜粋
------------------------
Public Structure ST_AREA
Dim s1 As Short
Dim s2 As Short
End Structure
Public Structure ST_AREA
Dim stSub1() As ST_SUB
Dim stSub2() As ST_SUB
Dim stSub3() As ST_SUB
End Structure

Public stArea As ST_AREA
Declare Function MemOpen Lib "xx.dll" (<MarshalAs(UnmanagedType.Struct)> ByRef Address As ST_AREA) As Integer

Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click
Dim iRes As Integer
iRes = MemOpen(stArea)
End Sub

294:291
09/06/29 13:05:52
293のPublic Structureは
ST_AREAじゃなくST_SUBだった o..rz


295:デフォルトの名無しさん
09/06/29 13:37:07
MSDNのアンマネージ コードとの相互運用の中にあるサンプルみれ

296:デフォルトの名無しさん
09/06/29 21:11:52
そもそも違うプログラム同士で、変数の値などを共有(メモリの共有)をするにはどうしたらいいんでしょうか?
どこかに解説サイトないでしょうか

297:デフォルトの名無しさん
09/06/29 22:55:08
つーか、宣言が全然おかしいじゃん。

メモリマップドファイルとか、プロセス間通信系かな。>共有

298:291
09/06/30 09:34:04
>>295
ありがとです。
PVOID*なのでクラスにしてちと試してみます

>>296
C++ならCreateFileMappingとかあるみたいですよ。
ほかの言語はわかりません。


299:291
09/06/30 10:34:29
連続申し訳ないです。。。

C言語なら

ST_AREA *pStArea
MemOpen(&pStArea);
pStArea->stSub1[3].s2 = 10;

とかやれば直接書き込みできるのに
VBってこういうことできないんですか?

IntPtrのようなもので受け取らないとだめですかね?

300:デフォルトの名無しさん
09/06/30 10:52:14
つ「構造体のサンプル」

301:291
09/06/30 13:51:15
>>300
先生ありがと!

サンプルを元にやってみたけど
他アプリから値を変えても値が変わらない。。。
値渡しになってる?
Public Structure ST_SUB
Public s1 As Short
Public s2 As Short
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Class ST_AREA
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _
Public stSub1 As ST_SUB()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _
Public stSub2 As ST_SUB()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _
Public stSub3 As ST_SUB()
End Structure

Public stArea As ST_AREA
Declare Function MemOpen Lib "xx.dll" (<MarshalAs(UnmanagedType.Struct)> ByRef Address As ST_AREA) As Integer

Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click
Dim iRes As Integer
iRes = MemOpen(stArea)
End Sub

302:291
09/06/30 13:54:35
End StructureじゃなくてEnd Classだ o...rz

Openしたときは最後に書き込んだ値が取れます。
VB側から書き込んでも相手の値は変わらず。。。

303:291
09/06/30 16:17:43
お、落ち着くんだ私。

Declare Function MemOpen Lib "xx.dll" (ByRef Address As ST_AREA) As Integer
だな。

Cで書かれてるDLLの引数の型がPVOID*だから構造体でなくクラスで合ってると思うけど
オープンした時のみ値が取得できる状況です。。。

助けてティーチャー orz

304:デフォルトの名無しさん
09/06/30 16:31:44
ByValArrayは構造体専用
構造体にしてByRef IntPtrで受けるか、配列の要素を全部フィールドに展開するか

305:デフォルトの名無しさん
09/07/01 02:11:46
DataSetてどういう場合に使用するものなのでしょうか?
mdbファイルにadoを使いデータを抽出(SQL文を使用)
この抽出結果を一時的に保管しておく器とかに使うものなのでしょうか?

306:デフォルトの名無しさん
09/07/01 07:34:02
>>303
> Cで書かれてるDLLの引数の型がPVOID*だから構造体でなくクラスで合ってると思うけど

意味がわからん。P/Invoke のサンプルからやり直せ


307:デフォルトの名無しさん
09/07/01 07:34:13
>>305
そんな感じ。

308:デフォルトの名無しさん
09/07/01 10:02:21
>>306
ポインタへのポインタが必要だから参照型(構造体ではなくクラス)の参照渡しにすればいいんだよ
理屈は間違ってない

309:デフォルトの名無しさん
09/07/01 10:39:35
>>305
SQLでの問合せの結果(複数行)をとっとくのがDataTable、
DataSet は DataTable のコレクション+αの機能。

310:デフォルトの名無しさん
09/07/01 10:41:48
>>308
すごく…おかしいです。

311:デフォルトの名無しさん
09/07/01 10:57:19
おかしいも何も、MSDNに書いてある

312:291
09/07/01 11:26:45
>>308さんのおっしゃるとおり
URLリンク(msdn.microsoft.com)(VS.80).aspx
上記サイトの
アンマネージ シグネチャ  マネージ宣言 1 レベルの間接参照 class MyStruct(…);
DoWork(MyStruct** x);   DoWork(ByRef x As MyStruct)
部分をみて構造体ではなくクラスにしないといけないのかなと判断してます
解釈が間違ってますかね?

>>304さん
>構造体にしてByRef IntPtrで受けるか
この意味が私の考えで合っているのかわかりませんが、
IntPtr型でポインターのアドレスを受け取り
構造体にキャストして割り当てるということなのでしょうか?

それとは別に、クラスにしてByValArray以外の方法(参照渡しができる方法)で
配列を作って引数に渡すことができればなぁと考えています。

考え方がC言語に偏っているので変なことを言ってるかもしれませんが
先生方、どうか温かい目でアドバイスをお願いします m(_ _)m

313:デフォルトの名無しさん
09/07/01 11:40:47
クラスなら配列の要素と同じ数だけフィールド並べるしかないんじゃないの

314:デフォルトの名無しさん
09/07/01 11:56:18
構造体として定義して、その配列を参照渡し(ByRef)してみるのはどうだろう
でも配列渡すならアドレス固定しないといけないから、IntPtrで受けてMarshal.PtrToStructureの方がまだ簡単確実

315:314
09/07/01 12:03:44
アドレス固定したら結局IntPtrで渡すことになるな
一行目撤回

316:デフォルトの名無しさん
09/07/01 13:12:57
>>299
>VBってこういうことできないんですか?
P/Invoke で外部関数呼び出し時には引数の変換がされるが、それ以外のタイミングで
Managed なコードから Unmanaged な領域を弄る簡単な方法はない。
おとなしく Marshal の共有メソッド (Read~/Write~等) に IntPtr を渡す方法を試せ。

317:デフォルトの名無しさん
09/07/01 13:14:58
やっと理解できた
VBのメンバを通してC側に直接書き込もうとしてたのか
マーシャリングでは無理だ
VBでは構造体も使えない
IntPtrで受けてMarshal.WriteByteでも使って直接書き込むしかない

318:291
09/07/01 15:41:43
先生方いろいろとありがとうございました。
以下のように落ち着きました(ST_SUBは以前のまま)
Public Structure ST_AREA
Puclic BaseAddr As IntPtr
Default Public Property stSub1(ByVal index As Integer) As ST_SUB
Get
Dim Offset As Integer = index * Marshal.SizeOf(GetType(ST_SUB))
Return CType(Marshal.PtrToStructure(BaseAddr, GetType(ST_SUB)), ST_SUB)
End Get
Set(ByVal value As ST_SUB) ' indexのサイズ超えは省略
Dim Offset As Integer = index * Marshal.SizeOf(GetType(RDS_DATA_AREA))
Marshal.WriteInt16(BaseAddr, Offset, CType(value.s1, Short)) ' ここをまとめたい
Marshal.WriteInt16(BaseAddr, Offset + Marshal.SizeOf(value.s1), CType(value.s2, Short)) ' まとめたいよ
End Set
End Property 'stSub2 と stSub3 も同様 オフセットを間違えないように!!
End Structure
Public stArea As ST_AREA
Declare Function MemOpen Lib "xx.dll" (ByRef Address As IntPtr) As Integer
Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click
Dim iRes As Integer = MemOpen(stArea.BaseAddr)
stArea.s1 = 10 'テストですよ
End Sub
SetのWriteInt16を一行にまとめたいとこですが思いつかなかったのでこんなです。
相手側アプリとの確認も取れました。VBむずかしいです orz
ありがとうございました~

319:291
09/07/01 16:00:09
XXX = stArea.s1
はできたけど
stArea.s1 = 10
はできてなかったorz
まぁでも何とかなりそうです^o^

320:デフォルトの名無しさん
09/07/03 20:13:21
XmlDocumentのSaveメソッドで「'」を「'」として書き出す方法ってないのかな?


321:デフォルトの名無しさん
09/07/03 20:51:09
ウィンドウと内部処理(DLL)を別のプロジェクトで作成しました。
質問は、DLLからFormに張ってあるコントロールのプロパティを変更する方法です。
Labelの文字を変える程度でいいのですが。

よろしくお願いします


322:デフォルトの名無しさん
09/07/03 21:19:41
>>321
フォームから DLL にコントロールの参照を渡してやれば OK

323:デフォルトの名無しさん
09/07/03 22:15:41
VS2005です

ユーザーコントロールにDataGridViewを貼り付けてColumnを2つ追加しました
これにイベントハンドラを記述するとユーザーコントロールのコンパイルは通りますが
コントロールの読み込み時にエラーが発生します

'RowsAddedイベントハンドラ
Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _
ByVal e As DataGridViewRowsAddedEventArgs) _
Handles DataGridView1.RowsAdded
DataGridView1.Sort(DataGridView1.Columns(1), ListSortDirection.Descending)
End Sub

列のSortModeがNotSortableに設定されているとき
列ヘッダーのSortGlyphDirectionをDesendingに設定することはできません
というエラーが出てるようですが、プロパティではSortModeはAutomaticになってます

ほわい?

324:デフォルトの名無しさん
09/07/03 22:28:19
なってます、ってどうやって確認したの?

325:デフォルトの名無しさん
09/07/03 22:34:02
>>324
ありがとうございます。
DataGridviewの設定はすべてデザイナでやってますので

326:デフォルトの名無しさん
09/07/03 22:37:02
改行したら送信してしまいました
つづきです

デザイナでやってて、Columnもデザイナであらかじめ追加してます
デザイナ上でのプロパティではAutomaticになっております

327:デフォルトの名無しさん
09/07/03 22:47:38
とりあえず、デザイナで設定したプロパティは忘れて、

'RowsAddedイベントハンドラ
Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _
ByVal e As DataGridViewRowsAddedEventArgs) _
Handles DataGridView1.RowsAdded
If ...SortMode <> NotSortable Then
 DataGridView1.Sort(DataGridView1.Columns(1), ListSortDirection.Descending)
End If
End Sub

みたいにしてみるとか、エラーが出たときにウォッチしてみるとか、
その辺で確認してみたら?

328:デフォルトの名無しさん
09/07/03 23:07:50
了解っす

329:デフォルトの名無しさん
09/07/04 00:02:23
うまく行きました!
データがない状態の時NotSortableになってんのかな?
ありがとうございました

330:デフォルトの名無しさん
09/07/04 00:19:06
>>320
そんなに大きくないならStringWriterで文字列に書き出して置換すれば

331:デフォルトの名無しさん
09/07/05 14:28:39
DataGridViewにdataset内部でリレーションシップを設定したTableA TableBのフィールドを表示したいんです

TableAとTableBは1対多結合になります
フィールドは同一のDataGridViewで表示したい
TaleBを連結したDataGridViewに非連結列を追加してTableAのフィールドを検索して貼り付けることはできそうですが
なんかデザイングリッド上でぱぱっとやれそうな気がしておたずねしました

何とぞよろしくお願いいたします

332:デフォルトの名無しさん
09/07/05 15:31:23
ググっても見つからないので質問させてください。
Textboxに入力されたデータから特定の行(ex:15行目から20行目)だけを取り出したいのですが、何か方法はないでしょうか?
よろしくお願いします。

333:デフォルトの名無しさん
09/07/05 15:36:17
>>332
どう検索したのか興味がある

Linesから適当に取得すればいいっしょ

334:デフォルトの名無しさん
09/07/05 15:50:04
>>333
初心者故に文字列の取得方法が分かりません。
申し訳ないです。

335:デフォルトの名無しさん
09/07/05 16:16:51
答え出てるじゃんw

336:デフォルトの名無しさん
09/07/05 16:18:49
DataGridViewをほぼ同じような表な形で印刷したいのですが、自分でライン書いて表の中のデータを書くというっ事をしなければならないんでしょうか?
DataGridviewをそっくりそのままの形のレイアウトで印刷してくれるようなもっと簡単なのがあってもよさそうなのですが・・・

337:デフォルトの名無しさん
09/07/05 16:22:09
>>335
すいません、Linesはどのように扱えばいいのでしょうか

338:デフォルトの名無しさん
09/07/05 16:24:10
表形式で出力できるレポートツールを使う、ってのが一般的かね。

おれはグリッドそのまま出せてもなんもうれしくないから、必要性を感じないな。

339:デフォルトの名無しさん
09/07/05 16:28:42
>>337
URLリンク(msdn.microsoft.com)

↑を見て、何がわからないのかきちんと説明しろ。

340:デフォルトの名無しさん
09/07/05 16:54:21
>>339
ごめんなさい
これを別のTextboxに出力させる方法が分かりません。

Dim counter as Integer
'Create a string array and store the contents of the Lines property.
Dim tempArray() as String
tempArray = textBox1.Lines

'Loop through the array and send the contents of the array to debug window.
For counter = 0 to tempArray.GetUpperBound(0)
System.Diagnostics.Debug.WriteLine( tempArray(counter) )
Next

341:デフォルトの名無しさん
09/07/05 16:54:58
Form右上の×ボタン押したときに終了するか確認メッセージ出して、
終了の場合は閉じるようにしたいんですが、closingイベント以外で実装
はできませんか?
今やりたい事は、フォームA→フォームBを呼び出してそこから終了
した場合、上記の確認メッセージを表示して両方のフォームが落ちるようにしたいです。
フォームBを×ボタンで閉じる動作を行うとフォームAをcloseという処理を走らせたい
のですが、フォームAにも上記のclosingイベントを実装する為
フォームB終了確認メッセージ後に、フォームAの終了確認メッセージが表示されてしまいます。
closingイベント内でフラグ立てて回避出来るかなと思ったら、無限ループに陥ってしまい無理でした。
どのような解決方法があるか教えていただけると幸いです。
よろしくお願いいたします。

342:デフォルトの名無しさん
09/07/05 17:19:49
FormB : FormClosingでキャンセルかどうか決める
FormA : FormBのFormClosedで自分をCloseする
    FormClosingでFormBが閉じられたときに呼び出された場合確認ダイアログを出さない

343:デフォルトの名無しさん
09/07/05 17:20:14
>>341
> Form右上の×ボタン押したときに終了するか確認メッセージ出して、
> 終了の場合は閉じるようにしたいんですが、closingイベント以外で実装
> はできませんか?

できない。

> 今やりたい事は、フォームA→フォームBを呼び出してそこから終了
> した場合、上記の確認メッセージを表示して両方のフォームが落ちるようにしたいです。
> フォームBを×ボタンで閉じる動作を行うとフォームAをcloseという処理を走らせたい

Closing イベントで閉じられる理由を確認すればいいんじゃね?

344:デフォルトの名無しさん
09/07/05 17:21:03
>>340
ってことは、取得する方法はわかったわけだ。

設定したいなら、「別のTextBox.Text = 取得した値」でOK。

345:デフォルトの名無しさん
09/07/05 17:27:40
>>331ですけど
ソースコードでテーブルをもう一つ作ってマージするって方法は見つけました

それが正解でしょうか?

コーディングなしで2つのDataGridViewで親子テーブルを作る例はいっぱいありましたが
それを単一のDataGridViewで表示するのって逆に難しいんですね

346:デフォルトの名無しさん
09/07/05 17:37:31
>>344
Dim counter As Integer
Dim tempArray() As String
  tempArray = textBox1.Lines

For counter = 0 To tempArray.GetUpperBound(0)
TextBox2.Text = tempArray(counter)
Next

こういうことでしょうか?
行数はFor counter = 0 To tempArray.GetUpperBound(0)の数値をいじればいいのですよね?

347:341
09/07/05 17:58:28
FormBの処理
FormB Closingイベントで確認ダイアログ表示
NOを返す→e.cancel=true (これでキャンセル)
YESを返す→FlgをtrueにしてFormA.close

FormA
上記のFormA.closeによって、FormAのClosingイベントが呼び出される。
FlgがTrueの場合、Closingイベント内の確認ダイアログはスルー。

私としては、上記の内容でいけると思ってたんですが、
FormA.Closeを実施のところで、何度も確認ダイアログが表示され
無限ループに陥っているようでした。

また、FormBのclosingイベント内に確認ダイアログをもうけないで
FormA.closeのみおいてみると何故か無限ループでエラーが出てしまいます。
その際、FormAにはClosingイベントはおいてません。
どなたか理由がわかる方いませんか?

348:336
09/07/05 18:18:31
>>338
>表形式で出力できるレポートツール
とは、どういうものなのでしょうか?

クリスタルレポートとかそういうものですか?
私は今、Vb2008を使ってるんですが、コントロールの一覧の中にCrystalreportがないのですが、なにか設定がいるんですかね

349:デフォルトの名無しさん
09/07/05 18:44:20
>>346
取得する行が決まってるなら、ループで回す必要はない

>>347
わかりづらいから、きちっとコード出してみ?

>>348
おまえさんの言うとおり、クリスタルレポートとか。
Edition によっては含まれてないんじゃない?

350:デフォルトの名無しさん
09/07/05 19:45:30
>>349
できました
ありがとうございます。

351:デフォルトの名無しさん
09/07/05 20:33:55
初期画面をログイン画面にしたいのですが、ログイン成功時にログイン画面をクローズして別フォームを表示したらフォームが全て落ちます。助けて下さい。

352:デフォルトの名無しさん
09/07/05 20:48:35
別フォームを表示してからログイン画面をクローズする
sub mainからログイン画面を表示する

353:336
09/07/05 23:12:53
>>349
Express Editionなんですが、クリスタルレポートは追加できないんでしょうか?

354:351
09/07/05 23:20:33
>>352
メイン画面をログイン画面に設定したらログイン画面落とした時点で
ほかのフォームも全て落ちちゃうんですよね。

355:デフォルトの名無しさん
09/07/05 23:22:20
>>353
URLリンク(www.microsoft.com)

ダメだね。

356:デフォルトの名無しさん
09/07/05 23:36:56
>>354
ログインをメインにするから不味い、ってことだろ。

357:デフォルトの名無しさん
09/07/06 01:28:08
>>331ですが、データソースを見るとリレーションが効いて
親テーブルの下に子テーブルが見えてるんですが

こいつをDataGridViewの単一テーブル上に展開できません

tableA
fieldID
fieldA
tableB
fieldID
fieldB

fieldID fieldA fieldB のような表現をしたいのですが・・・やはり無理でしょうか?

358:デフォルトの名無しさん
09/07/06 02:13:56
表示用に列一つ追加してExpression使うのが一番楽かな

359:デフォルトの名無しさん
09/07/06 02:24:49
あ、DataColumn.Expressionな

360:デフォルトの名無しさん
09/07/06 10:10:53
>>358
やっぱりそうですか
誰かに言って貰わないと楽ちんな方法を知らずに回り道してるんじゃないかと心配で
先に進めないもので・・・

ありがとうございました

361:デフォルトの名無しさん
09/07/06 11:56:20
>>331
たびたびすみません。

datasetのデザイナで子テーブルにフィールドを追加しフィールドプロパティのExpressionに
TableA.FieldAを設定すると
リレーションシップ0が見あたりません
そこで
parent(リレーションシップ名).FiedlAを設定すると
リレーションシップ名が見あたりません

となります。datasetデザイナ上では確かにリレーションシップを設定してその名前をコピペしてるので間違いないと思うのですが

もしかしてコード上で設定しないといけないのでしょうか?

362:デフォルトの名無しさん
09/07/06 12:14:49
Expression設定してるところでブレークポイント設定して確認すれ

363:デフォルトの名無しさん
09/07/06 13:05:59
>>362
datasetデザイナ上でプロパティを設定してるだけなので・・・・

よっぽどまぬけなことをやってるのかググっても該当するものは出てこず・・・

orz

364:デフォルトの名無しさん
09/07/06 13:19:17
現在のプロジェクトをExpressionで検索してみろよ

365:デフォルトの名無しさん
09/07/06 13:25:32
>>364
やっと意味がわかりました。なるほど・・・

で、やっと設定できました

原因は不明ですが、ビルドしたら親テーブルのフィールドを認識するようになりました

お騒がせしました

366:デフォルトの名無しさん
09/07/06 19:24:59
すみません
VBからTwitterに文字列を投稿する方法はAPI以外にないでしょうか?

367:デフォルトの名無しさん
09/07/06 21:54:39
これがWin32APIの事を指していたら、それはそれで面白いかもしれんね。

368:デフォルトの名無しさん
09/07/06 21:55:30
>>367
TwitterAPIの方です

369:デフォルトの名無しさん
09/07/06 22:15:26
SerialPortにて0.1Sec毎に送受の通信を行っているプログラムなんですが
フォームに配置しているボタンを連打したり、データグリッドを更新させたりしてプログラムに一次的に負荷をかけると、その間だけ送受の通信が止まってしまいます。
ためしにForm2を作ってその別のフォームで単独で通信させていてもForm1にあるボタン等を連打して負荷をかけると同じような結果でした。

こういう問題はどういう風に解決したらよろしいのでしょうか?
どうかご助言のほうをよろしくお願いします。

370:デフォルトの名無しさん
09/07/06 22:35:11
負荷とか関係なく、UIスレッドで通信しているのが原因の予感。
スレッドを分ければ一瞬で解決すると見た。

371:デフォルトの名無しさん
09/07/06 22:35:23
別のスレッドで通信を処理すればいいんじゃね?

372:デフォルトの名無しさん
09/07/06 22:42:11
UIスレッド?ですか
VB2008を使っているのですが、スレッドとはどういう事なのでしょうか?


373:デフォルトの名無しさん
09/07/06 22:50:21
マルチスレッドプログラミングってやつ
原則的に時間のかかる処理は別のスレッドを作ってそっちで動かさないとUIが固まります
特別な技術や注意が必要なのでしっかり勉強しましょう

374:デフォルトの名無しさん
09/07/06 22:51:31
「ワーカースレッド」でMSDN を検索してこい。

375:デフォルトの名無しさん
09/07/06 22:58:14

『.NETマルチスレッドプログラミング 1:スレッドの実行と同期』
URLリンク(codezine.jp)

『.NETマルチスレッドプログラミング 2:非同期デリゲートとスレッドプール』
URLリンク(codezine.jp)

376:デフォルトの名無しさん
09/07/07 04:24:03
ありがとうございます
参考にさせていただきます

なんとなくマルチスレッドの動きは分かったんですが
このプログラムは送信はタイマーイベントで行っていて、受信はCOMのDataRecivedイベントで行っているのですが
この場合、>>369のように停止させたくはないので両メソッドともマルチスレッド化したほうがよろしいんでしょうか?
なかなか複雑そうですね・・。

377:デフォルトの名無しさん
09/07/07 07:47:52
どうせDataReceivedはSerialPortが用意したスレッド上になるのだから、
データを格納した上でControl.BeginInvokeしておけば、
UIスレッドが原因で邪魔されることは無いんじゃないかな。

378:376
09/07/07 19:14:09
>>377
>データを格納した上でControl.BeginInvokeしておけば、
>UIスレッドが原因で邪魔されることは無いんじゃないかな。
すみません・・・もう少し詳しく説明していただけませんでしょうか?

それと思ったのですが
現状のプログラムがDaraRecivedイベントが発生してデータを受け取ったら、そのデータのヘッダ等を確認するためにDaraRecivedイベント内で処理関数(*1)を呼び出して、最終的に変数にデータを格納する処理にしています
そしてフォームに配置したタイマーイベントで、その格納した変数にアクセスしデータを読み取るようにしています。
DaraRecivedイベントから呼び出した上記の(*1)の処理関数もDataRecivedイベントと同じスレッド、つまりフォームが実行されているスレッドとは別で実行されているということなんですよね?

ということは、既に受信処理は別のスレッドで処理されていたということなんですよね
この場合、フォームに配置したタイマーイベントで行っている送信処理のみがフォームと同スレッドな為にフォーム操作時に停止していると判断して
結果的には送信処理のみを別スレッドにすれば問題は解決しそうですね

マルチスレッドについては教わった解説サイトを見て調べるとして
・・・タイマーイベント内の、送信処理を別スレッドにするべきなんでしょうか
それともこのタイマーイベント自体を別スレッドにしないといけないんでしょうか?
タイマーイベントはフォームを操作したとして途切れることはないのかな

379:デフォルトの名無しさん
09/07/07 19:34:19
送信処理を別スレッドにしてみて、改善されるか試してみなよ。
今後のことを考えれば、スレッド使えないと自分が大変なんだからさ。


380:デフォルトの名無しさん
09/07/07 19:46:17
System.Timers.Timerの方を使えば、
勝手に手持ちのスレッドプールからイベントを起こしてくれるから、
スレッドを一から作る必要は無いんじゃないかな。
UIスレッドとは無関係にイベントは発生するから、止まる事も無いはず。

381:デフォルトの名無しさん
09/07/07 22:00:04
Oracleと繋ぐときにOracle Clientを使わない方法って無いんですか?

382:デフォルトの名無しさん
09/07/07 22:02:18
ODP.NETでもODBCでも

383:デフォルトの名無しさん
09/07/07 22:19:17
>>382
ODP.NETやODBCだと、exeの配布先のマシンに
オラクルのクライアントがインストールされていなくても
SQLの実行などができますか?

384:デフォルトの名無しさん
09/07/07 22:25:49
まさか

質問はちゃんと要件をまとめてからしてくれよ

385:デフォルトの名無しさん
09/07/07 22:31:15
>>384
じゃ、exeの配布先のマシンには
Oracleのクライアントソフト(.Net)は必須なんですね?

386:デフォルトの名無しさん
09/07/07 22:34:17
そもそも今現在受信処理と送信処理はちゃんと(うまく)同期とって動いてるの?


387:デフォルトの名無しさん
09/07/07 22:36:04
Oracleのインストールは必須
.NETからOracleへのアクセスはSystem.Data.OracleClientやSystem.Data.Odbcなら標準ライブラリに用意されてる
> Oracleのクライアントソフト(.Net)
って何指してるの?

388:デフォルトの名無しさん
09/07/07 22:36:30
Oracleのクライアントソフト(.Net)ってなんだよ。
Oracleのネイティブなクライアント(OCIとか)と
.NETのプロバイダは別物だぞ。

さらにDataDirectなどの、Oracleのネイティブなクライアントが
不要なプロバイダもあることはある。


389:デフォルトの名無しさん
09/07/07 22:39:23
ありがとうございます。
納得しました。

390:デフォルトの名無しさん
09/07/08 16:42:49
VB2005でアプリを開発しています。
あるファイルが他のなんらかのアプリケーションで既に開かれているかどうかを調べるにはどうすれば良いでしょうか?
ファイル名から、そのファイルを開いているアプリケーションが何なのかを知りたいのです。

開発しているアプリからデータを既存のファイルに上書きでエクスポートしようとした時、
他のアプリでそのファイルが開かれていればエラーになってしまうので、どのアプリがその
ファイルを開いているかをユーザに通知したいのです。

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

391:デフォルトの名無しさん
09/07/08 16:49:29
無理じゃないかな、ハンドルの継承とかあるし

392:デフォルトの名無しさん
09/07/08 17:01:02
なんかAPIができたときいたことがある

393:390
09/07/08 17:28:25
>>391
>>392
レスありがとうございます。

とりあえず現時点では「ファイルが他のアプリケーションで使用されていないことを確認してください。」と
メッセージボックスを表示しています。

たとえば、開発しているアプリから xls ファイルでエクスポートしてそのファイルが Excel で開かれていれば
ユーザは Excel というアプリを自分で確認してくれるのですが、別のアプリでその xls ファイルを読み込んで
いる場合、ユーザはその xls ファイルが開かれているということに気づきにくいみたいですので、どのアプリが
その xls ファイルを開いているのか通知したいんです...

openfiles というコマンドがあるみたいですが、これは非公開APIを使用しているかも...みたいな記述は
見かけました。
ただこのコマンドを使用するにはシステムのパフォーマンスが低下する可能性があるとの事(openfiles.exe が
ファイルのトレースを行うのでオーバーヘッドが発生)で、このコマンドを使用するには抵抗があります。
URLリンク(www.atmarkit.co.jp)

何か妙案はないかな...

394:デフォルトの名無しさん
09/07/08 19:55:41
使い終わったらOFFにすればいいんだろ

395:デフォルトの名無しさん
09/07/08 20:47:51
>>393
URLリンク(technet.microsoft.com)(en-us).aspx

これはだめ?

396:デフォルトの名無しさん
09/07/08 20:51:10
VB2008を使用しています。
Form1とForm2を作成し、Form1からForm2を以下のようにして表示させました。

[Class Main]
Public Sub Main()
Application.Run(New Form1)
End Sub

[Class Form1]
Private Sub Form1_Load( 略 )
Form2.Show()
End Sub

Public Sub SetTextBox( str )
TextBox1.Text = str
End Sub

[Class Form2]
Private Sub Button1_Click( 略 )
Form1.SetTextBox("test")
End Sub

このとき、Form2のボタンからForm1のTextBoxに文字列をセットできないのは
Application.RunでNewしているForm1にアクセス出来ていないからでしょうか?

397:デフォルトの名無しさん
09/07/08 20:56:46
>>393
自分が開いてるかどうかなら
COM経由で開いてる文書一覧が取得できなかったっけ?

他PCが開いているかどうかなら
開かれていたらどうしたいのかによるんじゃね?
そもそもExcelが排他かけないんだし…


398:デフォルトの名無しさん
09/07/08 22:05:21
>>396
よくわからんけど
Form1.TextBox.Text = "test"
は、ダメなの?

399:デフォルトの名無しさん
09/07/08 22:09:43
>>396
VBは過去のしがらみにより、フォームのインスタンスを生成しなくても
フォームにアクセスできる。
この場合のフォームのインスタンスは、既定のインスタンスとか呼ばれてる
>Application.RunでNewしているForm1にアクセス出来ていないからでしょうか
その通り。Newすると、既定のインスタンスじゃないインスタンスが生成されてる
Form2が呼んでるForm1はインスタンス指定がないから既定のインスタンスのForm1
Application.Run(Form1)で既定のインスタンスのForm1を表示させれば思った通りの動作



400:デフォルトの名無しさん
09/07/08 22:18:24
過去のしがらみというか、オブジェクト指向がわからない人のためにVB2005になってわざわざ導入されたんだよ
VBユーザーは怒るべき

401:デフォルトの名無しさん
09/07/09 00:07:02
>>396
2008は持っていないのですが、VB2005で実験してみたところ、普通に書き込みされました。

Public Class Main
  Public Form1 as new Form1
  Public Sub Main()
    Application.Run(Form1)
  End Sub
End Class
ってやってもダメだろうか。

実験その1
Public Class Main
  Public MyForm1 as new Form1
  Public Sub Main()
    Application.Run(MyForm1)
  End Sub
End Class

Public Class Form2
  Private Sub Button1_Click(略
    Form1.SetTextBox("test")
  End Sub
End Class

Form1は一緒ね。結果は、正常に?書き込み動作された。
MyForm1っていうForm1のインスタンスが、Form1って名前でアクセスできるみたい。
仕様としては嫌だなぁ。
続きます・・・




402:401
09/07/09 00:15:44
実験その2
Public Class Main
  Public MyForm1 as new Form1
  Public Sub Main()
    Application.Run(MyForm1)
  End Sub
End Class

Public Class Form2
  Public MyForm1_2 as new Form1
  Private Sub Button1_Click(略
    MyForm1_2.SetTextBox("test")
  End Sub
End Class

Form1は例によって一緒。
結果は、書き込みされず。
見えないMyForm2にアクセスしている模様。
ちなみにこの後
MyForm2.Show
とすると、書き込み済みで表示される。
これはまぁ普通。
もう少し続きます・・・

403:401
09/07/09 00:25:50
実験その2
Public Class Main
  Public MyForm1 as new Form1
  Public Sub Main()
    Application.Run(MyForm1)
  End Sub
End Class

Public Class Form2
  Public MyForm1_2 as new Form1
  Private Sub Button1_Click(略
    MyForm1_2.Show
    Form1.SetTextBox("test")
  End Sub
End Class

Form1は例によって一緒。
結果は、MyForm1のフォームに書き込みされました。
MyForm1とMyForm1_2という二つのForm1がインスタンス化されていて、
Form1という名前ではどちらか判断できないのですが、結果はそういうことで。
最初インスタンス化したClassの別名になっている?
実際の内部挙動はわかりません。

これもイケてないなぁ。
以上、長文スマソ


404:デフォルトの名無しさん
09/07/09 01:01:51

横槍を入れることで疑問を解消させてもらう新しい形で
質問させて頂きます。

2つめの実験(>>402)で、
どうして書き込みされたフォームが見えないのかわかりません。
MyForm2 というのは、MyForm1_2 のことですよね?

3つめの実験(>>403)は、
結局、MyForm1にはアクセスしていない、ということではないですか?

Formというクラスは、インスタンスを作らなくてもアクセスできる
Shared(静的)な要素を持っているのでしょうか。
(>>399)さんが言っていることは、
デザイナで作成するForm1には、自分自身のインスタンスをあらわす「Form1」という
要素がSharedか何かで自動的に定義される、ということなのでしょうか。


405:デフォルトの名無しさん
09/07/09 02:52:21
>>400
既定のインスタンスってのは、VB6にはあった
.NETになっていったん廃止されて2005で復活らしい

>>401
>VB2005で実験してみたところ、普通に書き込みされました
手元に2005ないんで試せないが、そうだとすると、2005と2008で動作が違うといことに

実験の内容から考察するに、2005でフォームをnewすると、
1個目のインスタンスは既定のインスタンス戻してるっぽいな
2008なら1回目のnewから既定のインスタンスと別のインスタンス作ってるっぽい

>>404
二つ目の実験でMyForm1_2は、Form2の中でnewされた(Form1の)インスタンス
Application.Runされている(=表示されている)のはMainでnewされた(Form1の)インスタンス
これは明らかに別物だから>401が言うとおりまあ普通

三つ目の実験だが、
Form1.SetTextBox("test") でForm1って変数はないから、
これは既定のインスタンスに書き込みにいってる
MyForm1が書き込まれたってことは、MyForm1のnewで既定のインスタンス取得してると思われ

2008で実験その3やると、どっちのフォームにも書きこまれない
これはMyForm1もMyForm1_2も既定のインスタンスとは別のインスタンスだってことだと

406:404
09/07/09 05:13:06
なるほど、既定のインスタンスがどういうものなのか、よくわかった。

で、2005ではMain クラスの Main メソッドで new されて、かつ
Application.Run で使用されたフォームは、
そのフォームクラスの既定のインスタンスになるのか。
つまりこれは既定のインスタンスになるための十分条件なわけだけど、
最低限必要な条件って、上記のうちどれだろ。。。

ま、とりあえず横槍質問はこのくらいにしときます。


407:396
09/07/09 09:23:18
>>398-406
レスありがとうございます。

>>399
詳しい説明をありがとうございます。
Application.Run(Form1) で期待通りの動作が出来ました。

>>401
実験をありがとうございます。
VB2005 と VB2008 で動作が異なっている事が分りました。

408:デフォルトの名無しさん
09/07/09 09:34:02
VB.NETはBasicの後継言語と聞いたので質問なのだが、
N88Basic にあった、Play 文はどこにいったんですか?
昔、Play文で作曲しまくっていたので、
VB.NETでもどうしてもPlay文を使いたいのです。
どうか、お願いします。


409:デフォルトの名無しさん
09/07/09 09:41:35
後継言語ではありません
全くの別物です
だいたい、そういう組み込みの「~文」などというのはVB.NETにはほとんど存在しません
.NETのライブラリにも無いのでWin32API使いましょう

410:390
09/07/09 09:52:38
>>394
ON/OFFを切り替える度にPCの再起動が必要になります。
これは実運用上、非現実的です。

>>395
プロセスが利用しているDLLを表示するためのコマンドラインツールですよね?
ちょっと目的とは異なるかと思うんです...

>>397
COM経由で開いているファイルの一覧を取得することができるんですか!?
ちょっと調べてみます。

環境的にはスタンドアロンの場合が多いです。
私が開発しているアプリから xls 形式でエクスポート上書き保存できない場合、
スタンドアロン環境でかつ Excel は起動していない時、ユーザは「なんで?」と
なってしまうんです。他アプリが該当の xls ファイルを掴んでいるケースが
あったりするので、ユーザに「xxx.exe でその xls が開かれていますよ。」と
通知したいんです。

411:デフォルトの名無しさん
09/07/09 11:18:53
>>406
なんかちょっと勘違いしてるっぽいが
フォームの「既定のインスタンス」ってのは、そのインスタンスを保持する変数がなくても
明示的に(newで)作成しなくても存在する特殊なインスタンスのこと
普通のオブジェクトだと、保持する変数がないインスタンスはGCで回収される

明示的にnewされた普通のインスタンスが「規定」になるわけではないよ

412:デフォルトの名無しさん
09/07/09 12:02:40
>>397
取得できるのは自プロセスが開いた一覧だね


413:デフォルトの名無しさん
09/07/09 13:31:24
>>410
URLリンク(technet.microsoft.com)
こいつでファイル指定して開いてるプロセス検索できる

こいつがどうやってるかわからんが、同じことやれば可能なはずだ


414:デフォルトの名無しさん
09/07/09 15:47:11
>>413
openfiles.exeと同じことだろ
>>410
URLリンク(oshiete1.goo.ne.jp)

415:デフォルトの名無しさん
09/07/09 16:13:00
>>414
Process Explorerは、openfiles.exeみたいに(設定変えて)再起動しなくても使えるみたいだが?


416:390
09/07/09 17:09:04
>>412-415
レスありがとうございます。

>>413のご指摘のようなことを自前で実装したいのですが仕組みがわからないです。

せめて Process Explorer にファイル名をパラメータで渡して結果を受け取る、みたいな
ことができれば嬉しいんですが。

エンドユーザはコンピュータに不慣れな人が多いので、なるべく必要な機能を自前で
実装してあげたいのです。

というか、このような機能の需要て少ないんでしょうかね。
.NetFramework4.0あたりで機能を実装してくれたら...ないか。


ひとまず>>414氏が提示してくれたリンクを見ながら闘ってみます。

417:デフォルトの名無しさん
09/07/09 19:35:11
Dim StartQuery As New EventQuery( _
"SELECT * FROM" & _
" __InstanceCreationEvent WITHIN 1 " & _
"WHERE TargetInstance isa ""Win32_Process""")
StartWatcher = New ManagementEventWatcher(StartQuery)

AddHandler StartWatcher.EventArrived, AddressOf Me.ProcessArrived

Private Sub ProcessArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
msgbox("Arrived")
Me.RefreshList()
End Sub

プロセスの一覧を表示していて新規で何かが起動したら更新するというようにやってるんだけど
"Arrived"メッセージは出るけどRefreshListが呼ばれない
特にエラーも何も出ない
たぶんMeの参照先が違ってるんだろうけどこれはどうすればいいの?

418:デフォルトの名無しさん
09/07/09 19:44:12
RefreshListが呼ばれないとどうやって判断したのさ
取り敢えずMsgBoxはDebug.Print辺りに置き換えてステップ実行
多分別スレッドでイベントハンドラが呼び出されてるから

419:デフォルトの名無しさん
09/07/09 19:47:28
>>418
RefreshListの中にmsgboxとconsole.write両方を入れてみたけど反応なし
エラーも何も出ない
別スレッドで呼び出されてるのは分かってるwその回避方法を聞いてるのw

420:デフォルトの名無しさん
09/07/09 19:52:29
だからまずステップ実行して確認しろよ

421:デフォルトの名無しさん
09/07/09 19:52:53
そこまでわかってるなら
MeにContol.Invoke使ってUIスレッドでRefreshList()呼べばいいじゃん

422:デフォルトの名無しさん
09/07/09 20:00:51
>>421
そういうものがあるのを今見つけて試してる

423:デフォルトの名無しさん
09/07/09 20:06:48
出来たw

424:デフォルトの名無しさん
09/07/09 21:47:25
>別スレッドで呼び出されてるのは分かってるwその回避方法を聞いてるのw
聞いてないだろどう見ても、あほかよ


425:デフォルトの名無しさん
09/07/09 22:58:43
>>424
Meの参照先が違うって書いてるのにそれが読み取れないってどんだけ素人だよw
あーちなみにVB.Netまだ1週間目w

426:デフォルトの名無しさん
09/07/09 23:07:07
別スレッドで参照先が異なるとかどこの世界のスレッドだよ

427:デフォルトの名無しさん
09/07/09 23:37:15
ちょっとVB.Netしろうとの俺に教えてくれ
Meの参照先ってインスタンスだよな

インスタンスとスレッドって同じなのか?

428:デフォルトの名無しさん
09/07/09 23:41:21
何を言っているのか分からないぐらい全然違うもの

429:デフォルトの名無しさん
09/07/09 23:45:15
>>427
>インスタンスとスレッドって同じなのか?

違うよ

430:デフォルトの名無しさん
09/07/10 00:18:44
IEのアドレスバーの左側のeのurlのアイコンを
コントロールへD&DしてURLを取得する方法について
>>216で教えて頂いたのですが
このアイコンをアプリケーションのexeファイルのアイコンにドロップして
アプリケーションを起動した場合に、urlを取得する方法を教えて頂きたいです。

ファイルやフォルダのドロップの情報の取得は
cmds = System.Environment.GetCommandLineArgs
で確認できたのですが、urlのアイコンの場合は
この中には入らないようです。

431:デフォルトの名無しさん
09/07/10 00:27:48
そもそもドロップでexe実行できたっけ?

432:デフォルトの名無しさん
09/07/10 01:52:37
>>427
・インスタンスとは・・・
例えば、クラスを自分で定義する場合、
  public class MyClass
  ~
  end class
と記述する。で、このクラスを form1 内で使う場合、例えば次のように記述する。
  dim mc1 as new MyClass
  dim mc2 as MyClass
  mc2 = new MyClass
これで、mc1、mc2 というのが、クラス名「MyClass」のインスタンスということになる。
new +「クラス名」で、そのクラスのインスタンスを作ることができる、というわけ。
インスタンスというのは、変数やクラスを代入するための入れ物、と思っておけばよいはず。
as の後ろにくる MyClass とか integer とかは、別箇所で定義されているクラス名(型名)でしかない。
実際に値を代入してプログラム内で参照するのは、そのインスタンスである。
だから、一つのクラスにいろいろな値をセットしたものを別々に保持できる。(mc1 と mc2 のように)

・スレッドとは・・・
プログラムの実行単位?とでもいったらいいのかな。
スレッド内のプログラムは、上から下に順番に実行される。
条件分岐やループで実行順が前後することはあっても、
一つの行を実行し終わるまで、次の行は実行されない。
スレッドを意識したプログラミングをしていなければ、通常は
そういた状態になっている。(シングルスレッド)

スレッドを二つ作れば、それぞれのスレッドでプログラムが上から下に順番に実行され、
ユーザーから見ると、同時に二つの行を実行しているように見える。
ファイルを読み込むとか、TCP/IP通信をするなど、時間のかかる処理を実行する場合に、
あらかじめその処理部分だけを別スレッドとして記述し、必要時にそのスレッドをスタートさせることによって、
時間のかかる処理を実行しながら、他の処理も同時に処理できるようになる。(マルチスレッド)

433:427
09/07/10 05:13:03
Meが参照するのはインスタンスでいいんだよな?

>たぶんMeの参照先が違ってるんだろうけど
これはつまり、別インスタンスを参照してるってことだよな
んでこれから
>別スレッドで呼び出されてるのは分かってる
になるのはなんでかわからんのだが

スレッドが違えばインスタンスは別のものなのか?
インスタンスはスレッドごとに生成されるの?

434:デフォルトの名無しさん
09/07/10 06:42:26
インスタンスってのはプロセス固有のWindows管理IDのことだな普通なら
スレッドはプロセスが異なるので別のインスタンスになる

通常のWindows概念でのインスタンスでいいのなら
VBのフォームはすべて同じインスタンス
スレッドは別
DLLも別
インスタンスが違うと何が起こるかというとスタックメモリが別になる
つまりグローバルな変数やクラスへは感嘆には相互にアクセス出来ない

435:デフォルトの名無しさん
09/07/10 08:17:13
その説明は紛らわしすぎる。.NET殆ど関係ないし。

>>433
Meが参照するのはインスタンスでOK。
そして通常、インスタンスはプロセス単位で生成されることになる。
まあ、.NETのアプリケーションドメインを利用すれば、
単一プロセス内に完全に分離した環境を複数作ったりもできるのだけど、
普通は関係ないな。

436:デフォルトの名無しさん
09/07/10 09:30:33
>>434
>インスタンスってのはプロセス固有のWindows管理IDのことだな普通なら
お前の「普通」が判らん。
VBに限らず一般にOOPLで「インスタンス」といえば、プロセス上のメモリに
割り当てられた、オブジェクトの実体。
>スレッドはプロセスが異なるので別のインスタンスになる
もう喋るなw

437:デフォルトの名無しさん
09/07/10 10:37:41
VB2005

環境
XPPro、C2D E8400、3GBRAM、HDD80GB

フォーム50個位あるプロジェクトいじってるんだけど
起動とかいろいろ遅い(起動30秒くらい、MSDNも起動20秒くらい、全般的にもっさり)
ストレージがネックだと思うんですが、
大容量のHDDよりかSSDにしたほうがいいですかね?
SSDで開発してる方、体感的に速くなりましたか?

438:デフォルトの名無しさん
09/07/10 11:26:47
>ストレージがネックだと思うんですが、
俺には
>フォーム50個位ある
これを最初に一気に作ってるからだと思えるんだが。

439:438
09/07/10 11:28:14
…いや、勘違い。IDEの起動が遅いっつってんのか。

440:デフォルトの名無しさん
09/07/10 11:37:41
CドライブにSSD使ってるけど取り敢えず我慢できないほどの遅さはないなぁ
初めからSSD入れてるからHDDとのまともな比較はできないけど

DocumentExplorerでSystem.Windows.Forms.RichTextBoxのメンバ一覧開くのに3秒弱ぐらい
これは単に飼い慣らされてるだけか

441:デフォルトの名無しさん
09/07/10 11:56:09
HDDも壊れる時は2~3年くらいで壊れちゃうけど
開発でSSDは、ちょっと怖くない?

442:デフォルトの名無しさん
09/07/10 13:25:44
>>437
デザイン画面を開きまくってないよな?

開発用にわざわざSSDで入れ直すなら
RAMディスクの方が簡単でよくね?


443:デフォルトの名無しさん
09/07/10 13:54:33
>>441
一応SLCにしてる メモリも無駄に積んでるからスワップもまずしないはず
プロジェクト自体はHDDにおいてるし

投資ほどの効果があったかというと首をひねらざるを得ないのは事実
まあPCに金使うのも趣味の一環だから良いけどさ

444:427
09/07/10 14:00:25
Windowsでvb.netでの一般的な話でいいんだけど

プロセスてのはほぼプログラムのEXE単位だよな
んでスレッドってのは実際にCPUが仕事する単位で、
プロセスが一つ以上のスレッドをもって管理しながらプログラムを実行してる

インスタンスは、プロセス単位で生成(管理)される

ここまでOK?

>>434
2行目以降がまったく理解できん
>スレッドはプロセスが異なるので別のインスタンスになる
スレッドは...インスタンスになる?
スレッドはプロセスが異なる...?
>VBのフォームはすべて同じインスタンス
たとえばフォームを何回かnewしても、それはすべて同じインスタンス?
>スレッドは別
何と別?
>DLLも別
何と、何が別?元のexeとスレッドが別ってこと?
>つまりグローバルな変数やクラスへは感嘆には相互にアクセス出来ない
これは、自分と同じクラスの異なるインスタンス間では、って話?
グローバルってのはそのクラスでpublic定義だってこと?
それともそのクラスからみて上位のレベルで定義されてるってこと?


445:デフォルトの名無しさん
09/07/10 14:06:41
434はスルーして良し

446:デフォルトの名無しさん
09/07/10 14:08:38
>>442
> デザイン画面を開きまくってないよな?
10個位開いてたので1個にしてみると80%くらいの時間になりました。
気づくと色々開いちゃってるのでこまめに閉じるようにしたほうがいいですね。

> 開発用にわざわざSSDで入れ直すなら
> RAMディスクの方が簡単でよくね?
Excelを大量に読み書きする処理作っててRAMディスクは使ってるんですが
プロジェクト一式RAMに置いてもそう変わらなかったです。
開発環境自体も置くのはちょっと容量が厳しそう。

ありがとうございます。
お手軽に劇的な改善は難しそうな感じですかね。
VB6メインでやってて最近復帰したんですが、
その頃に比べてPCの性能は飛躍的に向上してるはずですが、
なかなか難しい物ですね。

447:デフォルトの名無しさん
09/07/10 14:32:09
どう考えても2010のインテリセンスは重すぎだと思う。

448:デフォルトの名無しさん
09/07/10 15:30:21
>>436
だたの先頭アドレスを実態と呼ぼうがIDと呼ぼうが個人の自由だが

449:デフォルトの名無しさん
09/07/10 15:32:55
Newするとき、しないときの見極めは
覚えるしかないのでしょうか?

450:デフォルトの名無しさん
09/07/10 15:39:14
マルチプロセス
  複数の「プログラム」が別々のオブジェクトを参照しながら動いてる。
  自分と隣の部屋のやつが、たまたま同時にスパゲティ食ってる状態。どんな食い方しても喧嘩にならない。

マルチスレッド
  複数の「プログラム」が同一のオブジェクトを参照しながら動いてる。
  自分ちで、兄弟どうしが一緒にスパゲティ食ってるようなもの。スパゲティの取り合いで喧嘩になる。

451:デフォルトの名無しさん
09/07/10 16:05:19
>>448
そうだな。便所の壁にでも書いとけ。

452:デフォルトの名無しさん
09/07/10 16:20:06
>>449
それって>>407の話?

453:デフォルトの名無しさん
09/07/10 17:20:57
参照型のメンバを含む構造体を定義しています。
その構造体型の変数間で代入を実行しても
当然のことながら参照型のメンバはコピーされません。
C++ならば代入演算子をオーバロードすればよいのですが、
VB2008ではできません。

参照型のメンバもコピーされるようにするにはどうしたらよいでしょうか?
よろしくお願いいたします。

454:449
09/07/10 17:24:23
>>452
違います。
StringやInteger は、Newをしないで使えますよね?
Mathクラスは、New自体が出来ないので、
その見極めは覚えるしかないのかなと思ったので。

455:デフォルトの名無しさん
09/07/10 17:30:45
>>453
構造体はCのとは性質も使いどころも違うから気をつけてな。
そういうものは通常は参照型で作ってICloneable.Clone。

456:453
09/07/10 17:40:31
>>455
早速ありがとうございました。
ICloneable.Cloneは来週にでもちょっと調べてみます。


457:デフォルトの名無しさん
09/07/10 19:42:07
VB2005

デザイナでは見えないのに、
プロパティウインドウのドロップダウンに出てくる
コントロールを選んで削除したいのですが、
LocationやSizeをいじっても出てきません。
どのようにすればいいでしょうか。

458:デフォルトの名無しさん
09/07/10 19:45:02
直接書き換えれば良いじゃない。
どうせただのテキストなんだし。

459:デフォルトの名無しさん
09/07/10 20:08:18
>>454
・Integer は値型なので New 不要。
・String は参照型だけど他とちょっと違ってて、
 文字列を代入することでコンストラクタが呼ばれるので
 その場合は New 不要。
・Math に限らず、「共有メソッド」を呼び出すときは New 不要。

460:デフォルトの名無しさん
09/07/10 20:10:35
>>457
「ドキュメント アウトライン」 (表示メニューの
その他のウィンドウにある) を出しといて
フォームのデザイナを開くと、コントロールやら
コンポーネントが表示されるので、そこで選択して削除。

461:デフォルトの名無しさん
09/07/10 20:21:45
ありがとうございます。

>>458
Designer.vb書き換えですか。
数が20個ぐらいあるので出来ればもっとスマートな方法があればと思ったんですが…。

>>460
なぜかそれでも出てこないんです。
他のコントロールはいくつかのPanelにすべて乗せているのですが
それをすべて削除してドキュメントアウトライン上はFormしかない状態でも
プロパティウインドウのドロップダウンには相変わらず出てきてしまいます。

とりあえず必要なコントロール(が乗っているPanel)をごっそり別の空Formに移して
コードも丸ごとコピペという無理やりな方法で対処しました。

462:デフォルトの名無しさん
09/07/10 23:12:40
質問です。

 Manu.exe
 Sub.exe
の2つのプログラムがあるとします。

Manu.exeからProcess.StartでSub.exeを起動しているプログラムがあるのですが、
SubをDll化してManuから参照し、呼び出すのに比べて負荷は大きいでしょうか?

Subは必ずManuから呼ばれるのでSubをDll化してManuから普通に参照するように変えたいのですが
作った人が問題がなければ変えたくないと言っているので変える理由がほしいのです。

よろしくお願いします。






463:デフォルトの名無しさん
09/07/10 23:35:49
そりゃプロセス作るのは一仕事だけどな
何で変える理由がないのに変えたいんだよ

464:デフォルトの名無しさん
09/07/10 23:58:40
別のexeだろうと、Publicで公開されているアセンブリにはアクセス可能。
exeなんて単なるブートストラップです。偉い人には(ry

465:デフォルトの名無しさん
09/07/11 00:31:55
入出力の受け渡しに一時ファイルを使ってるなら、
相手を直接呼ぶのに較べてものすごーく非効率

466:462
09/07/11 02:05:06
2つのプログラムを例にあげましたが、
Sub.exe的なプログラムがこれから50個くらいできる予定でいます。
1exe=1ソリューションです。

>> 463
>プロセス作るのは一仕事
やっぱり負荷はかかるのですね。
管理がめんどそうなので変更したいと言ったのですが
却下されました。なので変更するための新たな
別の理由がほしかったのです。

>> 464
今のつくりだとMainのところにもフォームを呼び出す前に
ごにょごにょ書いてあるのですが、MainもProcess.Start
を使わずに呼べますか?

467:デフォルトの名無しさん
09/07/11 02:20:53
フォーム1個だけのソリューションを50個作って、全部exeにする?? ・・ありえんわ
何でそんな腐った設計にしたんだ・・・。

468:デフォルトの名無しさん
09/07/11 02:30:11
fork至上主義な人なんだろうか……
で、.NETで同じようなやり方がわからないから個別のアプリにしたとか。

469:デフォルトの名無しさん
09/07/11 02:37:36
そもそもプロセス分けたら普通に不便だろ。
データのやり取りとか何もないわけ?


470:デフォルトの名無しさん
09/07/11 02:39:56
>>467
え?普通そうしないの?
1ソリューションに全部入れちゃうの?

471:デフォルトの名無しさん
09/07/11 03:15:14
>>470
そりゃ必要に応じてプロジェクト分けるし、ある程度独立してたり他で使うやつとかはソリューションも分けるけど
Form毎にソリューション作ったり、全部一緒にしちゃう(小規模なのは例外)なんて事は普通やらんだろ。

Form毎にソリューション分けてexeにして、Process.Startしてるやつなんて見た事がない。

472:デフォルトの名無しさん
09/07/11 03:18:00
>>466
その50個のフォームで一つの業務アプリになるのか?
もしそうなら、一つのEXEでいいと思うがな
アプリ配布に50個のexe配布とか、exeファイルのバージョン管理50個とかやっとれん

>>470
もし50個のexe作るとしても、50個のプロジェクトは作るが、
ソリューションは一つで済ますのが普通じゃないかと思うのだが

473:デフォルトの名無しさん
09/07/11 09:01:26
VB6の頃は酔う言う作り方もしたな。.NET以降では意味がない。

474:デフォルトの名無しさん
09/07/11 09:05:51
>酔う言う
*そういう

共通部分のモジュールをソース単位で共有してたり

475:デフォルトの名無しさん
09/07/11 16:49:13
>>470
アセンブリは分割しても、特に理由がない限り
プロセスを複数にしないのが普通だと思うが。

476:デフォルトの名無しさん
09/07/12 03:59:45
Formを閉じるとき
 Me.close
のみで
 Me.dispose
をしなかった場合、どのような問題が発生しますか?

477:デフォルトの名無しさん
09/07/12 04:27:31
ガベコレが起きるまでリソースが解放されない。

まあほっといても、いつかはガベコレがリソースを解放してくれるわけですがね。
普通、Formが抱えてるリソースなんて、そんな多くないと思うし。
背景画像とか?

478:デフォルトの名無しさん
09/07/12 04:36:31
ダイアログフォームと非表示のMDI子フォームでない普通のモーダレスフォームなら、
CloseでDisposeされる。
この辺の動作はややこしいんでMSDNをよく見たほうがいい。

479:デフォルトの名無しさん
09/07/12 16:45:20
>>472
フォーム毎にexeを分けることで、業務が稼動中でもアプリを終了させずに
アップデートや不具合対応が出来るからとかなんとかで、そんな話もありました。

480:デフォルトの名無しさん
09/07/12 18:05:45
それなら共通部分をDLLに括りだすこともソース単位で共有することもできないよね?
コピペコードだらけになるんだろうな

481:デフォルトの名無しさん
09/07/12 18:37:02
今までVB6を使っていて、Visual Studio 2008に最近切り替えたのですが、
WinSockが見当たらなくなりました。
ひょっとして何か別のコントロールに変わってしまったのですか?

482:デフォルトの名無しさん
09/07/12 18:41:09
コントロールなんかない
System.NET名前空間やSystem.NET.Sockets名前空間にあるクラスを使う

483:デフォルトの名無しさん
09/07/12 19:08:32
>>480
リンクとして参照すれば共有できるよ。

484:デフォルトの名無しさん
09/07/12 19:16:37
それで>>429に対応しようとするとバージョン管理が大変すぎるだろ

485:484
09/07/12 19:22:33
>>479の間違い

486:デフォルトの名無しさん
09/07/12 19:27:41
>>482
レスありがとうございます。
System.NET名前空間やSystem.NET.Sockets名前空間について調べてみましたが、
具体的な使い方がよくわかりませんでした。
プロジェクト→クラスでの追加したうえで、Socketを利用する、ということですか?

487:デフォルトの名無しさん
09/07/12 19:32:48
必要なクラスのインスタンスを作って使う
これだけでわからなないなら、オブジェクト指向を勉強しろとしか言いようがない

488:デフォルトの名無しさん
09/07/12 23:48:15
DBの接続先をウィザードを使って設定したのですが、
なんらかの不具合が発生してDBに接続が出来なかった場合に
エラーを返すような処理を作りたいです。
例えばDBに接続するところにtyr~catch文を入れようと思うんですが、
自動で作られている部分の為、どこにあるかわかりませんでした。
どのあたりで、DBに接続している処理が記述されているのでしょうか?

489:デフォルトの名無しさん
09/07/13 00:01:58
>>488
メニューの[デバッグ]-[ステップ イン]で見ていけばわかるんじゃね

490:488
09/07/13 00:16:19
>>489
ちょっと試してみます。
ちなみに自動で作られた処理の部分を書き換えるのって
問題ないですよね?

491:デフォルトの名無しさん
09/07/13 00:39:31
文字列の中から特定の文字列がいくつあるか数える関数を教えて

492:デフォルトの名無しさん
09/07/13 02:17:12
>>491
正規表現で探し出して、カウントする変数をインクリメントすりゃいい

493:デフォルトの名無しさん
09/07/13 07:52:53 BE:1857300285-2BP(0)
VB初心者です。
VisualStudio2005 VBにて開発を行っています。

先輩のソースに似せようとしているのですが、
処理の起動方法がわからなくて困ってます。

フォームありのソリューションにて、下記のフォーム起動方法を
Public Class Program
<STAThread()> _
Shared Sub Main(ByVal CmdArgs() As String)
・・・・
  Application.Run(New ClassName(param))
  ・・・・
  end sub
end class

Public Class ClassName
Public Sub New(ByVal param As string)
処理
End Sub
End Class

consoleのソリューションにて、
Application.Runに替わる関数を見つけられません。
同じように実行するにはどうしたらいいのでしょうか?


494:デフォルトの名無しさん
09/07/13 10:11:09
>>493
Application.Run() は MSDN にも
「アプリケーション メッセージ ループの実行を開始する」
と書かれているように、イベント・ドリブンなアプリケーションのときに使うもの。
コンソールアプリなら、その Main の中に必要な処理を書けばよい。

495:デフォルトの名無しさん
09/07/13 10:38:03
現在、.NETアプリケーションでWebBrowserコントロールにおいて
フォルダのExplorer表示を出しています。そうすると必ずあの青色の
「タスクメニュー」が現れてきます。これを消す方法を探しています。

C#, C♯, C#相談室 Part53
スレリンク(tech板:199番)

にて質問してはおりましたものの回答得られませんでした。もし方法ご存知
の方おられましたら、ご指導のほど何卒よろしくお願いします。



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