VB.NET質問スレ(Part35)at TECH
VB.NET質問スレ(Part35) - 暇つぶし2ch561:デフォルトの名無しさん
11/01/07 10:49:05
>>543
ちょっとやり方違うと思うけど
例えばこんなやり方はどうだろ?

URLリンク(www.dotup.org)

もう見てない可能性のが高いかw

562:543
11/01/07 15:19:45
返信遅れすいません、 >>555 さん、>>558 さんの手段を調べつつ、別の作業に追われていました。

>>558 さん >>561 さん アドバイスありがとうございます。

1:DataSet 内に テーブルA を作成
2:DataGridView のプロパティ DataSource として テーブルA を指定
  (DataGridView の列構造は、テーブルAと完全一致)
3:CSVの値を DataTable テーブルBに取り、様々な編集を加える
4:テーブルB を テーブル?C(宣言した型:DataSet1.【テーブルAの名前】DataTable)に代入
5:DataGridView.DataSource = テーブルC

このような手段で現在は処理を行っています。いっそソース全文載せた方がいいですかね・・・長いですが。

テーブルCを一行取得するごとに手順5を行い、その後テーブルCを初期化する事で、手順5の
段階で常に最新行を取得することができました。
ただ、この場合手順5を行うたびに最新行で上書きされてしまい、最終的な表示が1行のみとなってしまいます。
(初期化を行わないと 1行⇒2行⇒3行・・・・⇒全行)となり、全行最後に代入するならそれ以外の工程が完全に
無駄ですし、そもそもの目的である『全行コピーのような単体(非ループ)の進捗を現す』ことになりません。

現在詰まっているのは、この部分です。

563:543
11/01/07 15:21:58
>> 558 さん
directcast は型の強制変換と認識しているのですが、この場合ですとテーブルCを DataTable に変換するという
解釈で間違っていませんか?

Dim テーブルD As DataTable = directcast(テーブルC , DataTable)
DataGridView.DataSource = テーブルD

この形では上手くいかなかったので、他にも色々調べましたが上手い手段が見つかりませんでした。

>> 561 さん
参考URLを見ましたが、パスワードがかかっているようで落とせませんでした。すいません。

(追記)>>553 の最も致命的な問題Cについて
相変わらず意味不明で未解決ですが
URLリンク(www.pctec.2chmatome.info)
ここの 393 さんと似た症状だったのでビルドしてみたら、完成品では全く発生しませんでした。
原因不明なのが非常に気がかりですが、一応表面上は解決です。

564:デフォルトの名無しさん
11/01/07 15:32:17
>>543
むしろこちらがすみません。
ごめんパス書き忘れてた
PASS:vb



565:543
11/01/07 15:46:48
>>561
なにこれすごい・・・。
ありがとうございます!読解する作業に勤しみます!!

566:559
11/01/07 20:19:16
>>560
自宅からすいません
ありがとうございます。
普通のつなぎかたがわかりませんが、複数台でアプリを使いたかったので、
PC1以外での動作確認をするために、行いました。

567:デフォルトの名無しさん
11/01/08 18:56:59
皆様!たすけてください。
DataGridView関連なのですが、
起動時にDataGridViewをアクティブにしているのですが、
Form.Load イベントでImeModeをonにしているのですが、、
Windows Vista では日本語入力になり、
Windows7 ではなりません。
くぐっても解決方法が見つかりませんでした。
どなたかアドバイスを宜しくお願いします。



568:567
11/01/08 18:59:01
すみません。
Visual Basic 2008 Pro です。

569:デフォルトの名無しさん
11/01/09 00:30:51
>>566
普通てのはDBサーバとしてSQLSERVERを使うことじゃないかな?
ファイルを共有して使うようなやり方ではないて事。

ただ、複数でやる場合クライアントOのライセンスの問題もあるので注意が必要
それはムとは関係ない別件か

570:デフォルトの名無しさん
11/01/09 17:22:04
TextBoxを右クリックした時に表示されるコンテキストメニューに
右から左に読むやUnicode制御文字の表示というメニューがありますが、
これらを選択できないようにする方法はあるでしょうか?
TextBoxのContextMenuプロパティを見てもNothingとなっており、
どこを修正していいか分かりません。
やはり自作するしかないのでしょうか?


571:デフォルトの名無しさん
11/01/09 17:51:16
>>570
dobonさんのところに解答があるよ

572:デフォルトの名無しさん
11/01/09 19:16:02
>>571
ありがとうございます。
コンテキストメニュー自体を表示しないようにする方法は見つかったのですが、
コンテキストメニュー内の一部を選択できないようにする方法は見つかりませんでした。
よろしければ詳しい場所を教えていただけませんか?


573:デフォルトの名無しさん
11/01/09 22:08:07
環境 OS:XP SP2 VB:2010express(無料ver) SQLServer2008
PC1 にDBのmdfファイルがある。

PC1でデバッグしていますが、
接続文字列が、 c:\programfile~ だと接続できるのですが
\\pc1\c$\programfile~ とすると接続できません。
TCP/IPは有効
SQLサーバーのリモート接続は許可
ファイヤーウォールはポート開放済み(現在無効にしてます)

書き方がまずいのか、サーバーになってるPC1からは接続できないのか
設定が何かたりないのか、誰かエスパーお願いします

インスタンス名も
.\インスタンス名  だといけますが
\\PC1\インスタンス名,ポート番号  にすると、接続できなくなります。

こちらについても誰かエスパーお願いします。

574:デフォルトの名無しさん
11/01/10 15:12:53
URLリンク(msdn.microsoft.com)

575:543
11/01/11 11:08:44
休日を挟んだため遅くなりましたが、お陰様で問題が解決したのでお礼を。

>>561
サンプルを組んで下さるとか感激しました。
現在参考にしているコードは巨大すぎ、私のスキルでは必要な情報を探すことが非常に困難でしたが
561さんの洗練されたコードを見て、とても理解の助けとなりました。
質問部分以外でも『Useing』等の使い方など参考になる点が多く、ぜひ味わいつくそうと思います。

動け!動けよ!!と半ギレ状態でキーボードを叩く作業から開放されました。

結局
・CSVの取り込みとDataGridViewへの書き込みは BackgroundWorker にお願いする
・元フォームの全コントロールへのEnable設定により、ロックとロック解除を行う
・更新状況は ProgressBar 及び 進捗状況を表すラベル.Update() による表記で現す
・DataTable 上に CSV データを書き込む際は、Castをループさせると便利。

以上により
『フォームを先に表示し、裏で重い作業を行う。かつ、その進捗状況を随時表示する。』
という目的が達成されました。

>>544 >>545 >>546 >>549 >>550 >>555 >>558 >>561

アドバイスくださった方ありがとうございます。
聞ける相手がおらず困っていたため、とても助かりました。

576:デフォルトの名無しさん
11/01/11 11:20:10
>>575
PGはどうかしらんが、少なくともスポークスマンの才能はあると思う


577:デフォルトの名無しさん
11/01/12 04:09:27
環境はOSはXPのsp3、VB2008EEです
正規表現を使い、二行以上の文章から検索し、抽出したいと思いました
一度変数に入れて改行を置換したらできたのですが、こういう時は他にやり方はありますか?


578:デフォルトの名無しさん
11/01/12 13:06:56
>改行を置換したら
この辺が意味不明
二行以上の文章からどの部分を抽出すればいいの?

579:デフォルトの名無しさん
11/01/12 23:53:51
>>572
メモ帳にさえついてるんだから消す必要ないだろ

580:デフォルトの名無しさん
11/01/13 11:00:24
>>578
返事が遅くなってすいません
Sub Main()
Dim hoge As String = "abc" & vbNewLine & "de"
hoge = System.Text.RegularExpressions.Regex.Replace(hoge, "b.*d", "ghj")
Dim moga As String = "abcde"
moga = System.Text.RegularExpressions.Regex.Replace(moga, "b.*d", "qwert")
End Sub
このような感じです。hogeだとうまく行くのですが、mogaだとうまくいきません。
作っているプログラムは、ブラウザのNGワードなんです(練習用に作っています)。
"氏ね"をNGにしたいとき、"氏"と"ね"の行がまたがってるとうまく置換出来ませんでした。

581:デフォルトの名無しさん
11/01/13 11:21:34
RegexOptions.SingleLine

582:デフォルトの名無しさん
11/01/13 12:16:59
いくら考えても上のif文でtrueにならない理由がわかりません、助けてください・・・
Substringは一文字ずつ取り出すといくつかのサイトに書いて会ったのですが、
このコードだと1バイトずつ見てる感じがします。私が何を間違えてるんでしょうか
それとも第一引数は文字数、第二引数はバイト数ということなんでしょうか?
Sub Main()
Dim khonbun As String = vbNewLine
If khonbun.Substring(0, 1) = vbNewLine Then '偽
MsgBox("vbNewLine")
End If
If khonbun.Substring(0, 1) = vbCr Then '真
MsgBox("vbCr")
End If
If khonbun.Substring(0) = vbNewLine Then '真
MsgBox("vbNewLine")
End If
End Sub

583:デフォルトの名無しさん
11/01/13 12:20:56
vbNewLine = vbCrLf = Chr(13)+Chr(10) = キャリッジリターンとラインフィードの二文字

584:デフォルトの名無しさん
11/01/13 13:04:49
>>581>>583
うおおおおすべての疑問が解けました!!ありがとうございました!

585:デフォルトの名無しさん
11/01/13 16:32:21
【困っていること】
①某DLLファイルが参照する辞書ファイル(.DEC)の指定方法
 もしくは参考URLを理解する上で有効な書籍など。
 参考URL URLリンク(codezine.jp)

②DataGridViewへの『追記』方法

【詳細&経緯】
①某DLLファイル内の関数α(値Xを代入すると、辞書ファイルβからXに対応する値Yを返す)
 を使う際に「新辞書と旧辞書を同時に使いたい」という指定がありました。
 DLLファイルの中身をいじることは不可能そうなので、フォルダを辞書別に用意して
 プログラムで呼び出すDLLのパスを指定することはできないかと考えています。

 (DLLが操作できないなら、参照する辞書ファイル名βもいじれないと予想。フォルダを辞書
 ごとに作成し、フォルダにDLLと辞書を一対ずつ用意、参照する予定。)

 (作成元メーカー曰く、新辞書は旧辞書と同名で更新の際には上書きする仕様らしい。)

 一応参考URLは発見したのですが、ちょっと私のレベルでは意味不明なので、理解するうえで
 必要な知識などアドバイスいただければうれしいです。

586:デフォルトの名無しさん
11/01/13 16:33:33
②現在は
  1:CSVなりDBの中身を『空の』 DataTable に保存。
  2:上記 DataTable を 『空の』 DataSet.TblAddrListDataTable に1行ずつ保存。
  3:DataGridView.DataSource = 上記 DataSet.TblAddrListDataTable で表示を変更する。
 という手法によって DataGridView の中身を表示してています。

 ただ、この方法だと手順2を行うたびに表示内容が更新されてしまうので、手順2を
 『現在の DataGridView の中身をコピーした DataSet に対して、追加で』 一行ずつ保存。
 とできないものかと考えています。
 (扱うデータ量が多大なので、なるべく処理が早いほうが望ましい。)

 そもそも発想が間違っている、もっと良い手段があるなどアドバイス頂けると嬉しいです。
 よろしくおねがいします。

587:デフォルトの名無しさん
11/01/13 16:41:14
>>586
こないだの人?

①むしろメーカーにといあわせたほうがいいんじゃない?
そう言う使い方を想定していない場合、ライセンス違反になる可能性もあるだろうから

②はわけわかめ


588:デフォルトの名無しさん
11/01/13 16:49:26
DataGridViewは捨てて自前で描画すればいいのでは?
いくらでも早くできるよ

589:デフォルトの名無しさん
11/01/13 17:00:02
①はここを読めばおk
URLリンク(dobon.net)

590:585
11/01/13 19:37:29
>>587
ものすごく早いレスありがとうございます。
度々お世話になります、こないだの人です。

①については問い合わせてみたところ、技術の方が調べてくれました。結果
『参照する辞書ファイルのパスを指定する』
という素晴らしい関数が存在することを知り、解決です。
・・・さっさとサポートに電話しろって話でした、ありがとうございます。

②についても
Dim DataSet As New DataSet1.TableName

If DataGridView1.RowCount > 0 Then
DataSet = DataGridView1.DataSource
Else
'なにもしない
End If

以下、DataSet.AddTableName = (追加したい行) を行数回繰り返し

DataGridView1.DataSource = DataSet

これでOKでした、お騒がせしてすみません。

591:585
11/01/13 19:39:07
>>588 >>589
アドバイスありがとうございます。

>>588
解決はしましたが、後学のためにキーワードだけでも落としていってもらえると
とても嬉しいです。
DataGridView 以外に描画方法を知らないだけなので・・・。

>>589
実はそこも調査中に見つけて途中で良く判らなくなって困ってたURLの一つでした・・・。
でも、これが知識として基本になっているようですし、まずはそのURLから理解できるよう
読み進めていこうと思います。

592:デフォルトの名無しさん
11/01/14 01:15:40
使用されてないローカル変数です
ってのを言ってこないようにするには

593:デフォルトの名無しさん
11/01/14 09:01:38
使うか初期値入れれば?

宣言して初期値が入ってないものを条件分岐などで使うとそう言われるね

dim i as integer

if i== 0 then


dim i as integer = 0

なら怒られないんじゃね?

594:デフォルトの名無しさん
11/01/14 15:14:15
>宣言して初期値が入ってないものを条件分岐などで使うとそう言われるね
それは元々言われないだろ

595:デフォルトの名無しさん
11/01/14 17:09:18
>>594
ごめん、C#でしかも未割当の変数で怒られる
疲れてるな俺

596:デフォルトの名無しさん
11/01/14 18:07:26
警告を抑止する方法があったはずだけど、詳しくはわすれた
Visual Studioのスレで聞け

597:デフォルトの名無しさん
11/01/14 20:47:54
>宣言して初期値が入ってないものを条件分岐などで使うとそう言われるね
俺もあったと記憶してたが…違ったかな?

598:デフォルトの名無しさん
11/01/14 21:40:38
型によっては割り当て前変数使用の警告が出るな

599:デフォルトの名無しさん
11/01/15 00:21:18
>>592
プロジェクトのプロパティの「コンパイル」タブで「未使用のローカル変数」の
通知を「なし」にすればいいだけじゃないの?

600:デフォルトの名無しさん
11/01/15 06:28:27
次の数式は、いずれも "a Mod b" と同じ意味になります。

a - (b * (a \ b))

a - (b * Fix(a / b))

↑がなぜ おなじ なのかわけわかめ

601:デフォルトの名無しさん
11/01/15 18:18:29
>>600
a \ b と Fix(a / b) が同じなのがわからないのか?
a Mod b が下の二つの式で計算できるのがわからないのか?

どっちにしても演算子と関数の意味を理解できればあとは算数の世界なんだが

602:デフォルトの名無しさん
11/01/15 18:39:24
負の数についても同じなんだっけ?
Intってやつもあるよね

603:デフォルトの名無しさん
11/01/15 19:42:09
そもそも余りってのはなんなのか

604:デフォルトの名無しさん
11/01/15 19:56:24
余り=ぼっち



605:デフォルトの名無しさん
11/01/15 20:06:54
余り=やればできる子

606:デフォルトの名無しさん
11/01/15 20:12:59
やってできないから余ってんだよ

607:デフォルトの名無しさん
11/01/15 20:24:42
まだチャンスはある

608:デフォルトの名無しさん
11/01/15 20:31:30
そんなものはない

609:デフォルトの名無しさん
11/01/21 14:16:28
二つ手に負えない問題が出てきたので、ヒントをいただけると嬉しいです。

【困ってること】
 ○「種類 'System.OutOfMemoryException' の例外がスローされました。」というエラーの発生。
 ○Try & Catch を用いた場合にファイルが閉じられない。

【やりたいこと】
 ○DataGridView に表示された一覧表のうち
  『選択した行』の『特定の列(予め指定)』のみをCSVに書き出す。

【やっていること】
 長すぎるため次レスで投稿

【詳細】
 下記プログラムで、一応動きはしました。
 ただ、データが10万件とかあると凄く心許ないです。20万件とかあるとほぼ確実にエラー吐きます。
 20万件だと進捗チェックαの95%完了前後でエラー、10万件でもβの98%前後で稀にエラー。
 安定性を高めるため、メモリに優しい改善案を募集しています。(原因をメモリが溢れているためと想定)

 また、手順1~11は全て Try 内で行われており、エラー時は Catch に飛ぶのですが
 手順11前に Catch に飛んだ場合、CSVが開きっぱなしになってしまいます。
 (Dim sr As New System.IO.StreamWriter(csvPath, False, enc)で宣言、sr.close() で閉じていますが
  Catch 内に sr.close() と書いても無効でした・・・。)
 エラー時でもきちんと閉じる方法を教えていただきたいです。

宜しくお願いします。

610:デフォルトの名無しさん
11/01/21 14:18:02
【やっていること】
(変数の中身については、10行の DataGridView の奇数行を選択した場合として例示)

 0:書き込み先CSVを指定
(以下 bgWorker)
 1:指定されたCSVを開く。
 2:全行をループさせ、選択されていた場合行番号を変数 X に確保、","を繋げる( X = ,1,3,5,7,9)
 3:X の最初の一文字目(不要な "," )を削除し、文字列配列である XX に代入する。(XX() = 1/3/5/7/9)
★進捗チェックα
(大ループ(列ごと))
 4:For Each Y In XX() によって、XX(選択行の個数)分ループさせる。(選択行)
 5:DataGridView の DataSorce に対し、 DataSorce.Rows(Y) で書き込むべき列を取得
 6:取得行に対し、さらに列数Z回ループを行う。(カウンタは i とする)
(小ループ(セルごと))
 7:DataSorce.Columns(i).Caption にて、列ヘッダ HeaderName を取得。 
 8:HeaderName を条件に Select 文で分岐、『書き出すべき列か』を判定。
 9:書き込む場合、 "," & row(i).ToString を変数 XXX に追記。列項目に編集が必要な場合は、適宜行う。
(小ループ完了)
10:XXX の最初の一文字目(不要な "," )を削除し、CSVに XXX の内容および改行を書き込む。
★進捗チェックβ
(大ループ完了)
11:CSVを閉じる。

611:デフォルトの名無しさん
11/01/21 15:57:38

つうか、また君かwwww

先に書き出す列をどっかに保持ってから行ごとに処理していけばループの回数は減るんじゃない?

晒せるならソースとデータ(データを差し支えないように置換するなんかして)晒した方が早いんじゃないか?

612:デフォルトの名無しさん
11/01/21 16:52:48
処理2と3は不要だろ
処理4で全行ループさせて、該当行かどうかチェックすればいいだけ

最後にまとめてファイルに書くんじゃなくて、行単位で書き出せ
書きだす内容を変数にためると、サイズチェックしないといずれ入りきらなくなる

613:デフォルトの名無しさん
11/01/21 17:51:23
もうコテハンな乗れよww


614:デフォルトの名無しさん
11/01/21 18:56:46
コテハン名付けてやろうぜ

615:609
11/01/21 19:14:43
三度目ですねお世話になります。

>>611 >>612
早速アドバイスありがとうございます。
A:DataGridView のデータを取捨選択して書き込み用 DataTable に取る
 ⇒DataTable の中身をCSVに直接書き出す
B:ループカウンタあたりを作成し、DataGridView.Rows(カウンタ).Selected で判別
 ⇒True のみ手順5以下を行う
こう解釈してただいまソースと格闘中です。

>>613 >>614
うーん・・・。スレ人口?的にその方が判りやすいですかねいっそ。
自分なら「人恋し」とか付けそうですw

616:デフォルトの名無しさん
11/01/21 19:26:19
StreamReaderやStreamWriterをUsingで使やいいんでね?

617:609
11/01/21 20:55:52
>>616
アドバイスありがとうございます。
・・・そういえばそんな便利なものありましたね、忘れてました。

折角以前 >>561 で素晴らしいサンプルを貰ったのに。OTZ
・・・以前ついでに

>>576
コミュ障の気があるので、実は物凄く嬉しかったです。
雑談でレス数を延ばすのが申し訳なかったから自重しただけなんですよ!

618:609
11/01/21 21:06:24
お陰様で問題が解決しました、ありがとうございます。

困りごと①
 今回は >>612 の手法を使いました。
 >>611 を試していて「DataTable.newrow = DataGridView.rows(行番号)」と書いたところ
  型が違うと怒られてシフトしましたごめんなさい。

 結局
 ・手順4の行ループの直後にカウンタ(cnt)を設置
 ・『if DataGridView.Rows(cnt).Selected = true のみ処理を行う』指定(手順5の位置)
 ・Else までの間に手順6~10を行う
 ・End if の後ろでカウントアップと進捗チェックを行う。
 この手順で動かしたところ、CPU/メモリ共に使用率は50%前後をキープ。
 安心して動かせる(放置できる)ようになりました。

困りごと②
 Dim sr As New System.IO.StreamWriter(csvPath, False, enc) の行を
 Using sr As New System.IO.StreamWriter(csvPath, False, enc) で宣言
 手順11の位置に End Using を入れると、エラー時にもきちんとファイルを閉じてくれました。
 こっちも明らかに11飛ばして Catch に直行してるのに何故・・・。

>>611 >>612 >>613 >>614 >>616

お世話になりました、ありがとうございます。
聞く相手の居ない環境なので、真面目な話このスレの人が師匠です。

619:デフォルトの名無しさん
11/01/23 14:16:27
帳票を作成したいんだけど、コードで少しずつ調整するんじゃなくて、
視覚的にリストを配置したり、ラベルを置いたりすることって無理?
検索すると 有料ソフトばっかヒットするしやたら高いし・・・

620:デフォルトの名無しさん
11/01/23 14:55:15
>>619
バージョンは?
Crystal Reportsじゃだめなの?

621:619
11/01/23 15:26:05
>>620
サンクス ちょっと頑張ってみる
ちなみにVB2010express(新しくて無料の奴)
日本語版が最近でたみたいだけど、導入方法載ってるページがないっす

622:デフォルトの名無しさん
11/01/23 20:55:23
最近登場したUsingとは?

623:デフォルトの名無しさん
11/01/23 21:00:17
最近でもないだろ・・・

624:デフォルトの名無しさん
11/01/25 14:27:01
C#はpublic static classとできますが
VBはpublic shared classとするとエラーが出ます
VBの対応物はないんですか?

625:デフォルトの名無しさん
11/01/25 14:38:59
> 有効期間
> Visual Basic は静的クラスをサポートしません。
> 静的クラスと同等の機能はモジュールで実現されます。
> 詳細については、「Module ステートメント」を参照してください。

626:デフォルトの名無しさん
11/01/25 15:03:28
なるほど、モジュールなのか、ありがとうございますた

627:デフォルトの名無しさん
11/01/25 21:33:18
>>626
モジュールは旧VBから引き継いだレガシーだから使わない方がいいよ。
VBでは静的クラスはコンストラクタをprivateにして実装するのが普通。

628:デフォルトの名無しさん
11/01/25 21:39:19
MustInherit+Abstract(無理だけど)にしないとC#から正しく認識できる静的クラスにはならないよ

629:デフォルトの名無しさん
11/01/25 21:39:24
拡張メソッド涙目

630:デフォルトの名無しさん
11/01/25 21:40:10
間違えた
MustInherit+NonInheritable

631:デフォルトの名無しさん
11/01/25 21:53:57
>>630を実際試してみるとエラーでした

moduleをコンパイルしてReflectorすると
internal sealed class Aや
.class private auto ansi sealed A
って出ますね

>>627
普通のクラス+shared sub newで動きました、ありがとう

632:デフォルトの名無しさん
11/01/27 13:20:14
バインドしていないDataGridViewで、列を作って
DefaultCellStyle.Format
を指定しても反映されないのは仕様なんでしょうか。
対応方法ってないでしょうか。

633:デフォルトの名無しさん
11/01/27 15:56:04
バインドしてないんだったら値を設定する前にString.Formatしてやればいいだけのことなんじゃないでしょうか

634:デフォルトの名無しさん
11/01/28 00:51:32
>>632
Me.DataGridView1.Columns(0).DefaultCellStyle.Format = "#,0"
Me.DataGridView1.Rows(0).Cells(0).Value = 12345D
でできる。
書式にあわないデータを設定しているとかじゃないの?

Me.DataGridView1.Columns(0).DefaultCellStyle.Format = "#,0"
Me.DataGridView1.Rows(0).Cells(0).Value = "12345" ' ←数値用の書式設定なのに文字列を設定してる
とかだとダメ。

635:デフォルトの名無しさん
11/01/29 20:08:34
TableAdapterって
正規化されていないDBを受け取って
正規化されたDataSetやDataTableを返すような用途に使えますか?

636:デフォルトの名無しさん
11/02/01 11:10:13
ExcelシートのユーザーインターフェースをVBのフォーム上にロード
する方法ってどうやればいいんでしょうか?
SPREDやGridを使わずにExcelの機能をロードして使えないのかな?
って事です。
単純にコントロールとして追加できらと
Dim xlSheets As Microsoft.Office.Interop.New Excel.Sheets
Controls.Add(xlSheets)
みたいな感じやりましたが当然のように例外でます。

VSTOソリューションで近い事ができそうなんだけど、あれだとEcxel
ブックに実装って感じですよね。
あくまでWindowsフォームアプリにExcelのユーザインターフェース
だけ引っ張ってくるのを望んでいます。

情報持ってる方お願いします。

637:デフォルトの名無しさん
11/02/01 11:25:50
まあ無理だろね

638:デフォルトの名無しさん
11/02/01 11:54:12
WebBrowserでNavigateする手は一応ある
Excelの設定によっちゃダウンロードしちゃうとかいろいろ問題はあるが

639:デフォルトの名無しさん
11/02/01 12:52:52
おれもExcelと同等のスプレッドシート製品かExcelを取り込む方法知りたい
前調べた感じだと無理そうだったけど
>>638の方法だとExcel固まっちゃうんだよね


640:デフォルトの名無しさん
11/02/01 12:58:10
むかしはOLEオブジェクトってのがあったんだが、なくなったか?

641:デフォルトの名無しさん
11/02/01 13:06:58
[INFO] Visual Studio .NET の Windows フォームに OLE コンテナ コントロールがない
URLリンク(support.microsoft.com)

Visual Basic .NET で、WebBrowser コントロールを使用して Office ドキュメントを開く方法
URLリンク(support.microsoft.com)

642:デフォルトの名無しさん
11/02/01 19:17:55
AxSOActiveXってどうやって使うん?

643:デフォルトの名無しさん
11/02/01 23:30:34
dim cn as NpgsqlConnection = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=test;Password=test;Database=a")
cn.Open()
cn.Close()

これだけのプログラムを実行して、postgresqlのログに
 could not receive data from client: No connection could be made because the target machine actively refused it.
 unexpected EOF on client connection
というエラーが出るんですが何ででしょうか

このエラーを無視してDataTableにAdapter経由で値をFillすると何故かDBの中身は表示出来ます
ただ、もう一つ接続を用意してNpgsqlCommandBuilderを使って値を書き換えるコードを書いても
データは更新されませんでした

644:デフォルトの名無しさん
11/02/02 00:17:12
データソースにデータテーブルを指定しているDataGridView上で
データテーブル内のデータを直接書き換えた直後、DataGridViewの
表示が書き換えた内容にならない場合があります。
表示が出来てないだけで、スクロールなどして対象セルを表示しなおさせると
きちんと書き換えた内容になっているのですが、
ちょっとなんとかしたいです。

指定セルの表示を更新させるとか、そういった対処法は
何かないでしょうか?

645:人恋し
11/02/02 00:42:47
【やりたい事】
テーブルA:No,固有値,値1,値2
テーブルB:No,固有値,値B
テーブルC:No,固有値,値C
テーブルD:No,固有値,値D
このような4つのテーブルを結合して

テーブルX:No,固有値,値1,値2,テーブルB.固有値,テーブルC.固有値,テーブルD.固有値
という項目数6のテーブルXを DataTable で作成、DataSet にセットしようとしています。

なお、DataSet 上では No はキーとして設定されており、重複はNGです。
また、固有値は全テーブルで共有しており、固有値に対して値1,値2,値BCDが存在します。
(ある固有値は、テーブルAのみに存在。別の固有値は、全テーブルに存在など。)
データベースは Oracle を使用しています。

646:人恋し
11/02/02 00:46:29
【困っていること】
SELECT A全部とB/C/Dの固有値 FROM テーブルA
LEFT JOIN テーブルB ON テーブルA.固有値 = テーブルB.固有値
LEFT JOIN テーブルB ON テーブルA.固有値 = テーブルC.固有値
LEFT JOIN テーブルB ON テーブルA.固有値 = テーブルD.固有値
WHERE あれこれ

という文を書いた時、取得できるテーブルは

テーブルX:
No1,固有値X,値1,値2,テーブルB.固有値X,DBNull,DBNull
No2,固有値Y,値1,値2,テーブルB.固有値Y,テーブルC.固有値Y,DBNull
No2,固有値Y,値1,値2,テーブルB.固有値Y,テーブルC.固有値Y,DBNull
No3,固有値Z,値1,値2,テーブルB.固有値Z,テーブルC.固有値Z,テーブルD.固有値Z
No3,固有値Z,値1,値2,テーブルB.固有値Z,テーブルC.固有値Z,テーブルD.固有値Z
No3,固有値Z,値1,値2,テーブルB.固有値Z,テーブルC.固有値Z,テーブルD.固有値Z

と、複数テーブルに存在するデータが分裂してしまいます。

このまま書き込むと3行目で「キーが重複していますよ」と怒られるのですが、
DataTable の行を『重複したものは、一つ残して削除する』といった便利な
SQLの命令文は存在しないものかと困っています。

命令文、対処法などアドバイスいただけると嬉しいです。

647:デフォルトの名無しさん
11/02/02 01:57:24
>>644
UpdateとかRefreshとかでできないかな?
とか想像で言ってみる


>>645
A・B・C・Dがどういうのかよくわかんない
キーはNo?固有値?
固有値で結合してるなら固有値がキーな気もするけど、DataSetはNoがキーなんだよね
そもそも固有値がキーなら、結合しても分裂しないか

キーが同じテーブルを結合するなら分裂しないだろうから、
そもそもテーブル構成自体がおかしいんじゃないかなー

結果セットの重複を消したいだけなら、SQLのSELECT句ににdistinctを書けばいいけど
でもやっぱり問題はそこじゃない気がする

648:デフォルトの名無しさん
11/02/02 03:26:30
>>646
VB.NETまったく関係ない質問だな

そのSQLの3行目と4行目のテーブルBはCとDの間違いだよな?

その結果が本当なら、テーブルAに No2,固有値Y や No3,固有値Z の行が複数あるんだが
出力でNoをキーにしたいなら、複数行をどうまとめる気なんだ?

データセットのキーをNoにするのが理解できん
固有値に対して値1,値2,値BCDが存在 なんだから、固有値をキーにするべきじゃないのか?
固有値をキーにするならまず重複のない固有値の一覧つくって、それにテーブルA-Dをouter joinすればいい

まあどっちにしろテーブル設計とSQLの問題だから、これ以上はDB関係の板できけ

649:デフォルトの名無しさん
11/02/02 05:07:30
ねぇねぇみんな、どうしてC#やらないんですか?
VB.NETとか終わコンでしょww

650:デフォルトの名無しさん
11/02/02 07:39:47
>>645
ここはVB.NETスレだから
SQLの質問はこっちで

SQL質疑応答スレ 10問目
スレリンク(db板)

651:デフォルトの名無しさん
11/02/02 15:08:21
>>646
DISTINCTすればいいよ

652:デフォルトの名無しさん
11/02/03 13:19:55
PrintDocumentを使った印刷で
全ページに総ページ数を印字したい場合って、
PrintPageを発生させる前に
事前に総ページ数を数えておくしかやり方はないでしょうか?

PrintPageで印字時に総ページを示すタグの様な物を
印字しておいて、最後に全ページのタグを置き換え
みたいな事を妄想してましたが、そんな方法は可能ですか?

653:デフォルトの名無しさん
11/02/03 14:06:07
最後まで印刷終わった後でPagesつかっていじれへんの?

654:デフォルトの名無しさん
11/02/03 14:56:57
すみません、Pagesというのが判らないです。
どうやって呼び出すんでしょうか?

655:デフォルトの名無しさん
11/02/03 15:35:36
SP3とかインストールの問題と同じ可能性があるからそっち調べてみたら幸せになれるかも

656:デフォルトの名無しさん
11/02/03 15:36:16
ごめん、誤爆した

657:人恋し
11/02/03 22:41:03
返信が遅れてすいません、体調(精神?)不良で倒れてました。
お陰さまで解決です、DISTINCT が私の探していた魔法の言葉でした。
そして皆さまスレ違い失礼しました。

>>647
テーブルAとDataSetのキーはNo テーブルBCDのキーは固有値ですね。
固有値はBCD各テーブル間ではユニークですが、複数テーブルに同じ固有値が存在する
可能性があり得る、という状況です。
説明下手ですいません、問題はそこでした。

>>648
SQLは誤字ですごめんなさい。
まさにその「複数行をどうやって纏めるんだ?」という部分で詰んでました。

>>650
適切なスレの紹介ありがとうございます。

>>651
それが答えでしたありがとうございます。

>>647 >>648 >>650 >>651
毎回迅速かつ完璧なアドバイスありがとうございます。

658:デフォルトの名無しさん
11/02/04 04:30:04
>>657
スレ違いなんであんまりあれなんだが

テーブルAの主キーがNoで結合結果に同じNoが2行でるには、
結合条件でテーブルAの1行に対して相手のテーブルが2行必要
結合条件が相手テーブルの主キーならこれはあり得ない

Distinctなんてする必要ない。説明のどこかに間違いがある

659:人恋し
11/02/05 17:30:59
>>658
ありがとうございます。

まずキー設定が間違ってました、Aは固有値(Noはユニーク)、BCDはNoがキーですごめんなさい。
色々と残念すぎる質問でごめんなさい。

660:デフォルトの名無しさん
11/02/06 03:56:07
フォーム上でクリックした点の座標を配列に格納するために、MouseClickのイベントプロシージャで
x(n)=e.Xと書いたのですが、NullReferenceExceptionエラーが出てしまいます。

eクラスの使い方自体よく分からない上に
VB2002の本を読みながらVB2010を使っているので…アドバイスお願いします。

661:デフォルトの名無しさん
11/02/06 09:05:13
根拠もなくeを疑う前に、デバッガでブレークポイント張って何がNothingなのか確認すれ

662:デフォルトの名無しさん
11/02/06 09:26:58
このスレに質問で妥当かどうか迷っていますが、間違っていたらご指摘の程

以前VB(DOS版~)を使っていました。確かVB5前後まで
現在見るとVB.NETとなっていますが、違いを説明しているページ・書籍等ありますか?
またVBナンバーを辞めた理由をご存知の方は理由を教えてください。

プログラムと言うより言語の歴史で恐縮ですが、1つよろしくお願いします

663:デフォルトの名無しさん
11/02/06 09:35:29
ちょっとステートメントの書き方が似てるだけの別言語だから
違いとか言われても困る

と言いつつ言語バージョンは引き継いでるんだけどな。今VB10。開発環境の名前にはなってないけど

664:デフォルトの名無しさん
11/02/06 09:35:54
名前が変わったのは
.net frameworkというC#,VB,J#,F#他多数の言語で共通のライブラリが使える基盤に移行したから
そのため文法は似ているもののVB6以前とは互換性も無い

665:デフォルトの名無しさん
11/02/06 10:14:45
>>663,664
なるほど、ありがとう

ちょっと凝った事遣り出すと「おろ?」って感じなのね
イベントドリブンな構造は窓の仕組み上変えようがないだろうが
ライブラリまわりやコンポーネント関係流用は要検討か…

逆にC#やJ#との親和性は良くなったのかな?

666:>>660
11/02/06 10:27:06
>>661
学びはじめたばかりでブレークポイントも知りませんでした。雑な質問かもしれませんがお付き合いお願いします。

1行目がx(n)=e.Xで、この行を実行するとe.Xに赤二重下線が引かれて「オブジェクト参照がオブジェクトインスタンスに
設定されていません」と出ます。
だからe.XがNullなのかなと思って質問したのですが、試しにx(n)=2に書き換えて実行しても2の下に下線が出て
同じ文章が出ます。x(n)はIntegerで定義していますし、2がNull扱いになる理由もまったく想像できず困っています。

667:デフォルトの名無しさん
11/02/06 10:31:19
>>666

じゃあ、e.XがNothingかどうか調べてみようよ
それがNothingじゃなかったら、x(n)の方があやしい

668:667
11/02/06 10:33:50
>>666
> >>661

> 設定されていません」と出ます。
> だからe.XがNullなのかなと思って質問したのですが、試しにx(n)=2に書き換えて実行しても2の下に下線が出て
> 同じ文章が出ます。x(n)はIntegerで定義していますし、2がNull扱いになる理由もまったく想像できず困っています。

ちゃんと見てませんでしたすみません

それなら、x(n)が何も参照してないんじゃないだろうか

669:デフォルトの名無しさん
11/02/06 11:05:30
デバッグ中は自動変数とかそういうウィンドウ出てるから
(出てなかったらメニューのデバッグ>ウィンドウで)
それでそれぞれの変数の状態を確認する

670:デフォルトの名無しさん
11/02/06 11:07:08
>>668
おっしゃるとおり配列の宣言をよく理解していなかっただけの単純なミスでした。恥ずかしい。
それよりブレークポイントや、おかしい値のチェックを知れたことのほうがずっと有益でした。
デバッグって大事ですね。どうにか初めてのプログラムが完成しそうです。
重ねて回答くださってありがとうございます。

671:デフォルトの名無しさん
11/02/06 11:52:18
>>670
今日来たやつが偉そうに言うのもなんだが、こんなサイトを見つけた
URLリンク(homepage1.nifty.com)

「4.値型と参照型の違い」が今回のエラーの原因だと思われる
数多情報とみんなのアドバイスと熱意?で完成目指して頑張って欲しい

672:デフォルトの名無しさん
11/02/07 00:44:38
VBの関数辞典みたいな本でおススメ教えてくだぱい

673:デフォルトの名無しさん
11/02/07 00:48:23
MSDN with Google

674:デフォルトの名無しさん
11/02/07 00:48:35
>>672
MSDNライブラリ。
.NETライブラリのリファレンスは書籍化されてたはずだけど、
アホみたいに高いし東京都全部の電話帳ぐらいのボリュームがある。

675:デフォルトの名無しさん
11/02/07 00:52:27
なるほど本は必要ないんですね。サンクス!

676:デフォルトの名無しさん
11/02/07 09:20:17
ヘルプにヘルプが必要だったりするけどな

677:デフォルトの名無しさん
11/02/07 09:27:58
>>676
おまえMSDNは10年ぶりか、力抜けよ

678:デフォルトの名無しさん
11/02/07 10:07:20
あれって全部機械翻訳なんでしょ

679:デフォルトの名無しさん
11/02/07 10:55:58
よほど評判が悪かったのか、最近のは人間が翻訳してないところは英語のまま

680:デフォルトの名無しさん
11/02/07 20:15:45
昔からMSDNライブラリに機械翻訳なんかないってw
KBと勘違いしてるんじゃないの

681:デフォルトの名無しさん
11/02/07 20:18:44
ニッチなライブラリだと機械翻訳まんまなのはあるぞ

682:デフォルトの名無しさん
11/02/07 22:55:53
人間がやってるのか。
機械翻訳の割には普通の文書だなって思ってた。


683:デフォルトの名無しさん
11/02/08 01:18:56
>>671
そのサイト罠に見えるぞ


684:デフォルトの名無しさん
11/02/08 01:44:29
値型と参照型についてなら、普通にMSDNでそれなりに説明している
次ページも一緒に見とくといい
URLリンク(msdn.microsoft.com)

685:デフォルトの名無しさん
11/02/08 01:47:30
VB中学校は俺解釈と俺用語が多すぎ
書いてる人はそれなりにきちんと理解してはいるんだろうけど
いかにもVBしかわからないの丸出しな感じ

686:デフォルトの名無しさん
11/02/08 02:42:45
ボタンにフォーカスがある状態でリターンキーを押しても
ボタンが押されるアニメーション
が起こらないんだけど

687:デフォルトの名無しさん
11/02/08 05:21:11
>>685
それに気付けば「卒業」する場なんじゃないかな。「中学校」だし。
俺はdobonがまだ理解不能な頃にけっこうお世話になったんで悪く言いたくなかったり。

688:デフォルトの名無しさん
11/02/08 19:50:56
そんなに俺用語多かったっけあそこ。
あまり真面目に読んだことないけど、そこそこちゃんと分かってる人が書いてる印象だったが

689:デフォルトの名無しさん
11/02/08 21:03:25
オブジェクト指向が絡んでくると怪しくなる
クラスが消滅するまで とか意味不明な言葉が出てくる

690:デフォルトの名無しさん
11/02/08 21:27:38
vb.net2010expressです
form_main(スタートアップフォーム)にボタンが3つ有り
1つめはデータ入力フォームを、他の2つは検索用フォームを開く
ようにしてあります。form_a,form_b,form_c
ここで、入力フォームが開いているときは他のフォームは閉じておきたい
また、検索用フォームが開いているときは他のフォームを閉じておきたいですが、どうすればいいのでしょう?

Form_a_Loadプロシージャで
If Form_b.Visible=true then
Form_b.Close()
End if
としてみたんですが駄目でした

691:デフォルトの名無しさん
11/02/08 22:49:42
フォームはShowかShowDialogで制御するのが基本だからな

692:デフォルトの名無しさん
11/02/08 23:09:43
ShowDialogとHideな

693:デフォルトの名無しさん
11/02/08 23:12:58
しかしこたえるきになれないしつもんだな

694:デフォルトの名無しさん
11/02/08 23:18:21
と言っても、小難しい質問だと答えられないのが、このスレのクオリチー

695:デフォルトの名無しさん
11/02/08 23:22:53
単純にメインフォームから閉じるんじゃダメなの?
子フォームから閉じなきゃダメなの?

696:690
11/02/08 23:41:57
>>695

メインフォームの検索ボタンを押したときにでも勿論構いません。
検索フォームと入力フォームが同時に開いているのが嫌なだけですから。

697:デフォルトの名無しさん
11/02/08 23:43:56
開いたフォームはメインフォームのフィールドに入れとけ

698:デフォルトの名無しさん
11/02/09 00:50:08
>>690
インスタンスとかイベントとか、基本的な概念が分かってなさそうだから
手を動かす前に勉強した方がいい段階かもしれんね。

699:デフォルトの名無しさん
11/02/09 01:11:04
どうやればできるのかは知ってるけど、そんな糞設計をするようじゃ
迷惑でしかないから教えない


700:デフォルトの名無しさん
11/02/09 09:06:51
>>699
じゃぁこんな時はどんな風な遷移設計がいいのですか?せんせい!!

701:デフォルトの名無しさん
11/02/09 10:38:26
メールの送信時に
送信済みトレイに送信メールを残しておくために、
SmtpClientを使用せず
MAPIを利用してメール送信プログラムを作成しています。

メーラーはOutlookExpressを使用しており、
複数メールアドレスがアカウントとして設定されています。
①yahoomail(既定) ②hotmail

②のアドレスからメールを送信したい時に
MAPIにて
②のログインID,パスワードにてログインを行い、
メールの送信を行うと
送信元アドレスが①の既定のアドレスのほうに
なってしまいます。

既定のアカウントが①の状態で②でログインした場合に
送信元アドレスを②のアドレスををすることは
できないのでしょうか?

702:デフォルトの名無しさん
11/02/09 10:50:20
OutlookExpress ってMAPIはサポートしてないような。
OutlookはMAPI対応だけど。

703:デフォルトの名無しさん
11/02/09 10:58:25
expressでも簡易MAPIクライアントにはなれるみたい。>>702は忘れてね。

704:デフォルトの名無しさん
11/02/09 15:48:28
関数に静的クラスを渡すことってできないでしょうか?

sub hoge(kurasu as class)
end sub

call hoge(kurasu)

みたいに。

705:デフォルトの名無しさん
11/02/09 15:55:15
渡してどうすんのさ
静的メンバで多態したいとか言うの?

706:デフォルトの名無しさん
11/02/09 16:19:20
やめときます。

707:デフォルトの名無しさん
11/02/09 20:33:32
いいかげん、なんの行動もしてないくせにやたら高飛車な
キチガイでドボンだのの解説サイトに粘着してるカス(>>295
を何とかしてほしいわ


708:デフォルトの名無しさん
11/02/09 20:39:04
なんだ唐突に。
これがアスペ脳か。
まあ、>>295みたいな奴がカスなのだけは同意するけどね。

709:デフォルトの名無しさん
11/02/09 22:22:00
MSDNのチュートリアル入門やった後は何がおススメですか?

710:デフォルトの名無しさん
11/02/09 22:43:41
いちいち人に指示されなきゃならんのか?

711:デフォルトの名無しさん
11/02/09 23:12:40
指示されるつもりはないが、効率よく進みたいので、参考までに聞いてみただけだよ

712:デフォルトの名無しさん
11/02/09 23:32:47
じゃあ指示しない

713:デフォルトの名無しさん
11/02/10 00:09:01
答える気ないカスは黙っとけ

714:デフォルトの名無しさん
11/02/10 00:16:23
そのカスとやらに見下される気分ってさぞかし快感なんだろうね
理解できないけど

715:デフォルトの名無しさん
11/02/10 11:55:02
理解できないけどね

716:デフォルトの名無しさん
11/02/10 14:31:03
進みたい方向もゴールもわからん
必要なのは占い師か?だったらスレ違いだな


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