VB.NET質問スレ(Part35)at TECH
VB.NET質問スレ(Part35) - 暇つぶし2ch352:デフォルトの名無しさん
10/11/25 15:43:13
>>350
「チェックするIfブロック」も実行時にしか通らないだろ
この手のものは、コーディングミスってもコンパイルで引っかけるように考えてコーディングしないと

353:デフォルトの名無しさん
10/11/25 15:44:49
くだらない所に拘って生産性下げるのが一番最悪

354:デフォルトの名無しさん
10/11/25 15:48:07
後でTextBox5を追加したときに配列に追加するのを忘れても
コンパイル時には分からないし実行時のエラーすら出ないよ
>>345が良いとは全く思わないが>>347も万全とはいえない

355:デフォルトの名無しさん
10/11/25 15:52:00
R が何か分からないが

Dim A As New Arraylist   (個人的には Collection.Genelic ~ を使いたいが)
Dim TextBoxes() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}

For i As integer = TextBoxes.Lbound To TextBoxes.Ubound
  a.Add(i * 10)
  TextBoxes(i).Text = R.ToString
Next


くらいが最低限だろ

356:デフォルトの名無しさん
10/11/25 15:58:25
>>354の問題が解決できてないじゃん
多重管理するなというのは基本でしょ

357:デフォルトの名無しさん
10/11/25 16:02:01
コントロール名に依存するコーディングというのもなぁ

358:デフォルトの名無しさん
10/11/25 16:08:04
341=344です。

ご教授ありがとうございます。
配列化、できました。


実は配列化したいTextBoxが200個×3種あって
200ずつをTabで切り替えて見られるようにしようとしています。

TextBoxがTab内にあると、この処理がうまくいかないのですが
どういう理由なのでしょうか・・・

359:デフォルトの名無しさん
10/11/25 16:15:01
ちょフォームに TextBox 600個ってさ
新手の拷問かよ

360:デフォルトの名無しさん
10/11/25 16:15:13
さすがに200はありえない。コードから自動でTextBoxを作るようにするべき。
>>345を使ってるんだろうが、Tab内でうまくいかない理由は、テキストボックスは
フォームではなくてタブコントロールのControlsの中に含まれてるから。

361:デフォルトの名無しさん
10/11/25 16:21:02
とりあえずは
コンテナ(フォーム).Controls.Find ~ で子や孫階層まで Find できるが
そもそも Grid 系を検討すべきじゃないのか?


362:デフォルトの名無しさん
10/11/25 17:10:06
ここの人たちは文句言いつつもなんだかんだで優しいな
昔と変わってなくて安心した

363:デフォルトの名無しさん
10/11/25 18:44:51
だってVB.netってだけで他のスレじゃ風当たり強いんだもの

364:デフォルトの名無しさん
10/11/25 18:51:31
>360,361

358です。
やはりTextBox多すぎですよね・・・
200個の測定データを1画面(Form内)で見られるようにしたくて
その表示する場所としててTextBoxを用意しようとしました。

TextBoxよりも良い方法があればよいのですが・・・

たしかにここの住人の方々は皆さんいい方です。



365:デフォルトの名無しさん
10/11/25 19:13:01
TextBox200個置くぐらいなら、DataGridViewのセル200個を使うかなぁ。

366:デフォルトの名無しさん
10/11/26 00:35:56
あははは、今日ちょうどテキストボックスの自動生成をやったよ
改行判定するためにmodなんて演算子を初めて使ったぐらいだ

367:デフォルトの名無しさん
10/11/26 06:34:10
そもそも表示だけなのにテキストボックスって…
普通ラベルだろ
で多くなったらListbox(マルチカラム)
もっと増えたらListView
最後はDataGridView
だな、俺なら

368:デフォルトの名無しさん
10/11/27 13:16:29
同じようなことを得意満面に指摘して悦に入る半可通

369:デフォルトの名無しさん
10/11/27 13:22:55
保守は不要ですよ

370:デフォルトの名無しさん
10/11/28 14:33:59
コンボボックスのドロップダウンリストってどんな仕組み?
下に配置されたコントロールを隠すようにサイズ拡張されるでしょ
もしかしてFormだったりするのかな?
何となく気になっちゃって

371:デフォルトの名無しさん
10/11/29 15:42:36
DataGridViewを使って、配列を1行10列で折り返して表示していく方法は
どうやったら良いですか?

372:デフォルトの名無しさん
10/11/29 15:52:06
バインディング使わずにDataGridViewにデータを表示する方法がわかってるなら
行 = 配列のインデックス / 10
列 = 配列のインデックス Mod 10
で配列のインデックスから行と列を計算するだけ。
バインディングを使いたいならその妙なデータ構造を改めるのが一番簡単だと思います。

373:デフォルトの名無しさん
10/11/29 17:08:45
たとえば、これだと縦にAの数値が並んでしまいます。

Dim A As New ArrayList
Dim Table As New DataTable
Dim Row As DataRow

For i As Integer = 0 To 50
A.Add(i) '仮値を入力
      Table.Columns.Add(i, GetType(Single))
Table.Rows.Add(A(i))
Row = Table.NewRow
Row(i) = A(i)
Next
DataGridView1.DataSource = Table

何か間違ってるのでしょうか?
もうワケがわかりません。

374:デフォルトの名無しさん
10/11/29 17:37:12
突然ですが、Focus()の事で教えてください。
フォームにコンボボックス・ラジオボタンなどを貼り付けて、
Enterキーを押した時フォーカスの移動をするように
KeyPressイベントにコードを書きました。
実行時、フォーカスを示す点線の□枠が出てきません。
Tabによる移動は□枠が出ます。
どなたか対処方法を教えてください。


375:デフォルトの名無しさん
10/11/30 00:32:07
Select()だったらどう?

376:デフォルトの名無しさん
10/11/30 09:01:09
AMDのACMLのライブラリを.NETで使う方法無いですかね?
C++では使えるようなのですがDLLをインポートしようとしても無理でした

377:デフォルトの名無しさん
10/11/30 10:15:41
普通のC++でラッパーを書いてC向けの関数としてエクスポートしてネイティブdllとしてコンパイルして.NETからdllimport
もしくはC++/CLIでラッパーを書く
前者の方がお勧め

378:デフォルトの名無しさん
10/11/30 21:42:23
>>377
ありがとうございます
C++の勉強がてらチャレンジしてみようと思います

379:374
10/12/01 06:35:33
すみません。自己解決しました。
vista , 7 の仕様だったようです。

>375
返答すみませんでした。


380:デフォルトの名無しさん
10/12/02 05:49:32
>>345の方法を始めて知った
コントロール名を変数使って指定できないかと前から思ってたんだ

で、プロパティーはそれで変更できるけど
イベントでそういう記述はなんとか出来ないかな?
イメージとしては
Private Sub Control("Label" & i )_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Control("Label" & i ).Click
こんな感じの何かない?

381:デフォルトの名無しさん
10/12/02 05:53:14
あ、前半はどうでもいいか
Handles Control("Label" & i ).Click の部分です

382:デフォルトの名無しさん
10/12/02 06:34:08
AddHandler

383:デフォルトの名無しさん
10/12/02 08:41:22
普通にデザイナからそのメソッド選択すれば?

384:デフォルトの名無しさん
10/12/02 12:15:50
AddHandlerだな
AddHandler使うならHandles以下はいらん

385:デフォルトの名無しさん
10/12/02 18:12:18
ImmGetCompositionString()を使って入力された漢字のフリガナを取得しています。
普通はフリガナがカタカナで返ってくるはずなのですが、あるときから特定のマシン
でだけ全角ひらがなで返ってくるようになってしまいました。

このサンプルを実行しても同じようになってしまいます。
URLリンク(www.atmarkit.co.jp)

環境の問題なのですが、どんな原因が考えられるでしょうか?

386:デフォルトの名無しさん
10/12/02 18:42:41
IMEが変わった

387:デフォルトの名無しさん
10/12/02 18:51:42
KB436842

388:デフォルトの名無しさん
10/12/02 23:34:46
ちょっと前にVB.NETの開発に参加して思ったんだけど、1ソースファイル(*.vb)に
複数のクラスを記述するのって、可読性が極度に下がって俺は嫌なんだけど、
これって他の開発現場では当たり前?
インターフェース定義クラスみたいな使い方なら納得も出来るんだけど、、、

389:デフォルトの名無しさん
10/12/03 08:56:34
セットで使うクラスなら
同一ソースの中に書くかな

390:デフォルトの名無しさん
10/12/03 09:51:25
>>387 ありがとうございます。

391:デフォルトの名無しさん
10/12/03 11:54:57
このようなエラーが出るのですがどのような原因が考えられますでしょうか?
System.Configuration.ConfigurationException: 構成セクション system.data を認識できません。 (c:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config line 4047)

出るPCと出ないPCがあってどうしたものかと。

392:デフォルトの名無しさん
10/12/03 14:43:11
.net framework 1.1を再インスコしたら出なくなりました。

393:デフォルトの名無しさん
10/12/11 17:42:28
小数点第一位を二捨三入・七捨八入して整数と0.5単位の数値にしたいのですが、関数がわかりません

394:デフォルトの名無しさん
10/12/11 17:48:09
ありません
自分で作りましょう

395:デフォルトの名無しさん
10/12/11 18:06:43
>>394thx

ないのかよ
使えねえな

396:デフォルトの名無しさん
10/12/11 18:14:32
必要なもの全部用意されてたら君の仕事無くなるよ?

397:デフォルトの名無しさん
10/12/11 18:22:30
そんな使いようのない関数がわざわざ用意してあっても無駄なだけだしな。
互換性のために残してあるとかなら仕方ねーなと思うが

398:デフォルトの名無しさん
10/12/11 18:25:37
Int(n * 2.0 + 0.5) / 2.0 で計算できるか。

399:デフォルトの名無しさん
10/12/12 15:11:12
Boolean型の二次元配列をtrueで初期化したいんですがどうすればできますか?

400:デフォルトの名無しさん
10/12/12 15:17:20
すべての要素にtrueを代入します

401:デフォルトの名無しさん
10/12/12 15:27:15
>>400
ループさせるんですか?

402:デフォルトの名無しさん
10/12/12 16:28:41
配列の変数名を逆転させてもいいけどね。

403:デフォルトの名無しさん
10/12/12 17:58:03
>>402
もう少し詳しく教えてくれると助かります

404:デフォルトの名無しさん
10/12/12 19:39:44
縦方向にリサイズ出来ないように
Me.MinimumSize = New System.Drawing.Size(200, 28)
Me.MaximumSize = New System.Drawing.Size(2000, 28)とやっても
何故か縦方向にリサイズ出来るんだけどどうすれば縦方向にリサイズさせないように出来るの

405:デフォルトの名無しさん
10/12/12 20:36:32
イメージを256色PNGで保存するにはどうすればいいんでしょうか

406:デフォルトの名無しさん
10/12/13 10:13:39
>>403
Dim IsFirst() As Boolean

をやめて

Dim IsNotFirst() As Boolean

にする

407:デフォルトの名無しさん
10/12/13 12:07:35
DisabledとかUnlockedとか、たまに使っててイラっとするときがある。
オレだけか?

408:デフォルトの名無しさん
10/12/13 23:46:56
>>405
簡単にやるならたとえば以下

Dim img1 As Bitmap = New Bitmap("in.jpg")
Dim st As IO.Stream = New IO.MemoryStream()
img1.Save(st, Imaging.ImageFormat.Gif)
st.Seek(0, IO.SeekOrigin.Begin)
Dim img2 As Bitmap = New Bitmap(st)
img2.Save("out.png", Imaging.ImageFormat.Png)

ただし、この例はハーフトーンパレットのディザ描画になるため、あまりきれいではない

きれいに減色処理するためには色の量子化などの特殊なテクニックを使って頑張る必要があるが、
これに対する .NET の便利なクラスはない
減色、量子化などのキーワードで検索して、参考になりそうなサンプルを探すしかないと思う

また、減色だけでなく、そもそも256色のパレット付き画像の処理自体、.NETではまともなサポートが
ないので、細かなピクセル処理を行うには LockBits/UnlockBits などを使ってピクセルをバッファとして
読みだして処理する必要があるが、これも簡単には説明できないので、いろいろ検索して調べてみて欲しい

409:408
10/12/14 00:48:59
きれいな減色に対する.NETのサポートはないと思いこんでたけど、
.NET3.0以降だと、

System.Windows.Media.Imaging.GifBitmapEncoder

というクラスが追加されてて、簡単にそれなりの減色結果が得られるようです
一応修正版

Dim src As New System.IO.MemoryStream(System.IO.File.ReadAllBytes("in.jpg"))
Dim enc As New System.Windows.Media.Imaging.GifBitmapEncoder()
enc.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(src))
Dim mem As IO.Stream = New IO.MemoryStream()
enc.Save(mem)
mem.Seek(0, IO.SeekOrigin.Begin)
Dim img As System.Drawing.Bitmap = New System.Drawing.Bitmap(mem)
img.Save("out.png", System.Drawing.Imaging.ImageFormat.Png)

410:デフォルトの名無しさん
10/12/14 02:11:07
WPF/WICありならわざわざGifBitmapEncoder使わなくてもFormatConvertedBitmap挟むだけで良いよ

411:デフォルトの名無しさん
10/12/15 12:58:43
起動中のブラウザの取得がうまくいきません。
IEの取得はできたのですが、Firefoxのウインドウがうまくいかず、原因がわかりません。

Dim ObjShell As Object
Dim ObjFF As Object
Dim n As Integer

Set ObjShell = CreateObject("Shell.Application")
Set ObjFF = Nothing
Set ObjFF = ObjShell.Windows(0)
Set ObjShell = Nothing

IEをひとつだけ起動させると、Set ObjFF = ObjShell.Windows(0)がうまくいくのですが、
Firefoxの場合、ObjFFがNothingのままになってしまいます。

解決方法等、わかる方がいたら教えて下さい。
宜しくお願い致します。


412:デフォルトの名無しさん
10/12/15 13:02:08
Set ObjShell = CreateObject("Firefox.Application")


413:デフォルトの名無しさん
10/12/15 13:07:31
そもそもFirefoxはCOM用の口なんか用意してないっしょ

414:デフォルトの名無しさん
10/12/15 21:36:40
【C#, C♯, C#】 MonoMac 【MonoDevelop】  
スレリンク(mac板)

詳しい奴、ちょっと↑きてくれ

415:デフォルトの名無しさん
10/12/16 19:16:06
ビルドはつかわずにいつもリビルドしかつかわないけどこれでいいの?

416:デフォルトの名無しさん
10/12/16 19:27:37
小規模のプログラムならどっちも一緒だろ

417:デフォルトの名無しさん
10/12/16 20:03:58
修正されたソース、アセンブリのみ対象とするのがビルドだっけ

418:デフォルトの名無しさん
10/12/18 01:19:39
Color.ToArgbメソッドを使ってcolor型のデータを数値化
しているのですが法則がわかりません。
RGB値で(0.0.255)の場合16776961と変換され≒256^3に
なってしまいます。AARRGGBBと並べるのであれば
青の変換値は255になると思うのですが違うのですか?

419:デフォルトの名無しさん
10/12/18 09:11:26
16776961じゃないだろよく見ろ
16進で表示すればもっとわかりやすい

420:デフォルトの名無しさん
10/12/18 09:36:15
>>419 256^3だと16777216になるのかな?
16進ならFF0000FFなので4278190335になってしまうんでしょうか?


421:デフォルトの名無しさん
10/12/18 11:04:13
配列が0からはじまるように
RGBも0からはじまるので
(0.0.255)も実は
0~254なので
254を変化すればよろしい

422:デフォルトの名無しさん
10/12/18 17:27:58
>>418
16776961じゃなくて-16776961だろ?
アルファ値が255なら符号ビットが1で負になる
直感的にわかりやすい値が欲しければConvert.ToUInt32で直接変換してみればいい

423:デフォルトの名無しさん
10/12/20 17:22:48
vb.netを勉強しとけと言われたのですが
おすすめのマニュアルをご存知ないでしょうか?

424:デフォルトの名無しさん
10/12/20 20:26:42
.net tipsでググる

425:デフォルトの名無しさん
10/12/20 20:35:37
VB6のコードが一緒に載せてあるサイトは絶対に見ない

426:デフォルトの名無しさん
10/12/21 13:43:49
一緒にのってるとなにか問題あるの?


427:デフォルトの名無しさん
10/12/21 18:43:15
VB6と同じように書く=.NET的には悪い書き方

428:デフォルトの名無しさん
10/12/22 01:18:19
なんちって

429:デフォルトの名無しさん
10/12/22 04:06:45
Form1に
Public i as integer
と書いても
Form2でiを使えないんだけど

430:デフォルトの名無しさん
10/12/22 13:17:55
Form1はNewしたのか
Sharedはいらないのか
どんなエラーが出てんのか

431:デフォルトの名無しさん
10/12/22 18:32:48
Form2は
Form1からForm2.Show
したもの

432:デフォルトの名無しさん
10/12/22 23:17:17
Form2にForm1インスタンスの参照でも渡してなきゃ無理

433:デフォルトの名無しさん
10/12/23 03:22:08
むずかしす

434:デフォルトの名無しさん
10/12/23 10:25:30
>>429
Form1.iで参照できる かもしれない

>>432
バージョンとかにもよるが、VBには既定のインスタンスってのがあってな
ユーザがインスタンス作成しなくても、勝手に作成されて参照できるインスタンスがあるんだ

本来なら>>432の言うようにForm1のインスタンスへの参照もってないとダメなんだが
Form1だけでForm1の既定のインスタンスを参照できたりするんだ

まあ、既定のインスタンス使うようなコードは書くべきではないと思う

435:デフォルトの名無しさん
10/12/23 10:50:13
VBで使うべきではないとか良くない機能とか言い出したらVBの存在意義って…
VBにあってC#に無い機能のほとんど全部じゃん

436:デフォルトの名無しさん
10/12/23 11:17:51
>>434
既定のインスタンス使ってたら >>429 は発生してないと思う

437:デフォルトの名無しさん
10/12/23 12:10:50
>>435
規定のインスタンスはVB6時代から悪者扱いされてたと思うけど。

438:デフォルトの名無しさん
10/12/23 14:35:09
>>436
>>429が何をどうして使えないっていってるかわからんからな
だからForm1.iで参照って書いてある

>>437
.netで1回廃止しようとしたんだけどな
いきなり廃止するんじゃなくて、使うか使わないか選べるようにしといて
その次ぐらいで廃止すればよかったのにな


439:デフォルトの名無しさん
10/12/23 15:18:28
>>438
ルールを逐次変更するなんて最悪のやり方。

440:デフォルトの名無しさん
10/12/23 15:22:27
2005以降の方針転換は間違ってないと思うよ
オブジェクト指向的に良くないというような考えを持ち込むんだったらそもそもVBなんかいらん

441:デフォルトの名無しさん
10/12/23 23:42:53
はじめてVB.NETやろうと思うんだけどとりあえず何を買えばいいの?
URLリンク(www.amazon.co.jp)
これ買っておけば一応問題ない?

442:デフォルトの名無しさん
10/12/23 23:47:20
買わなくてもフリーのがある。

443:デフォルトの名無しさん
10/12/23 23:59:26
ありがとう、いろいろあるんだね

444:デフォルトの名無しさん
10/12/24 06:35:35
vb5
vb6
2002
2003
2005
2008
2010
と何回も買わなければならないのでそろそろ考えねば

445:デフォルトの名無しさん
10/12/24 07:49:07
QuickBasic 世代から買ってるんだが・・・

446:デフォルトの名無しさん
10/12/24 11:10:13
VB6→2005→2010(予定)

447:デフォルトの名無しさん
10/12/24 11:18:58
N-BASICから

448:デフォルトの名無しさん
10/12/24 11:44:45
>>429
> Form1に
> Public i as integer
> と書いても
> Form2でiを使えないんだけど

手抜きしとらんでプロパティでやりとりしろよ

449:デフォルトの名無しさん
10/12/24 12:45:58
そんなことVBで言ってもしょうがないでしょ
それを言い出すと、フォームのインスタンスをそのまま子フォームに渡すのも、結合が強くなるので悪い手抜きだし
フォームに貼ってあるテキストボックスをむやみに他のクラスに渡したりプロパティで公開したりするのも
フォームの実装をさらけ出してて良くないよ

450:デフォルトの名無しさん
10/12/24 13:01:54
>>448
手抜きはいいとしても・・・
インスタンス化してない可能性のが高くないか?

451:デフォルトの名無しさん
10/12/24 14:26:38
>>449
VBだからとか、お前アホだろ


452:デフォルトの名無しさん
10/12/24 14:29:35
VB も C# も基本的には一緒だが
ここでクダ巻いてるのは VC++ 使いか?

453:デフォルトの名無しさん
10/12/24 14:29:54
プログラミングごときにあんまり真剣になるなよ
気楽に行こうぜ

454:デフォルトの名無しさん
10/12/24 14:37:19
VBだからとか関係なく>>429で悩んでるような段階で善いとか悪いとか気にしてもな
どうせ今練習で書いてるものなんて慣れた後で必ず全部捨てて書き直すことになるんだから

455:デフォルトの名無しさん
10/12/24 20:34:51
me.rry=ch(r is math)

456:デフォルトの名無しさん
10/12/24 21:11:26
LINQって便利だな
ちょっとしたCSVのデータを加工する案件があったんだけど
まさにうってつけの機能だと感じたよ

457:デフォルトの名無しさん
10/12/24 21:22:23
>>453
生活がかかってるんだぜ

458:デフォルトの名無しさん
10/12/24 21:31:47
>>455
スペルが全然違うのは何か理由が?

459:デフォルトの名無しさん
10/12/24 21:54:29
mathのほうがソースコードに出てきそうな感じだから。それだけ

460:デフォルトの名無しさん
10/12/25 19:46:17
SetWindowPosを使用して、Form1を最前面に表示したいんですが、
以下のコードを実行して、Button1をクリックすると、
画面の左上にタイトルバーの未表示されるんですが、
何か間違ってるんでしょうか?
user32.dllはデフォルトで用意されているんですよね?
OSはWindowsXP、
開発環境はMicrosoft Visual Basic 2008 Express Edition SP1 です。
詳しい方よろしくお願いします。

Public Class Form1
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
SetWindowPos(Me.Handle, -1, 100, 100, 500, 500, &H40)
End Sub
End Class


461:デフォルトの名無しさん
10/12/25 21:20:08
「タイトルバーの未表示」意味不明

462:デフォルトの名無しさん
10/12/25 21:25:59
Form.TopMost=Trureじゃダメなん?

463:デフォルトの名無しさん
10/12/25 21:59:11
>>461
タイトルバーのみ表示の間違いです。

>>462
最終的には、別exeで表示されているウィンドウを常に最前面に表示させたいんです。
こんな感じで
Dim hWnd As IntPtr = FindWindow(Nothing, "別ウインドウのタイトル")
If Not hWnd.Equals(IntPtr.Zero) Then
SetWindowPos(hWnd , -1, 100, 100, 500, 500, &H40)
End If
それで、まず自分自身のフォームで試したら、
TopMostにもならずタイトルバーしか表示されない状態で左上に描画されてしまうんです。

どなたか助言お願いします




464:デフォルトの名無しさん
10/12/25 22:03:07
情報の小出しする奴に助言しても、また条件を追加されるからめんどくさい

465:デフォルトの名無しさん
10/12/25 22:48:41
PC98用BasicでPC98ゲーム作るのはどうすれば

466:デフォルトの名無しさん
10/12/26 00:33:07
スレチ

467:デフォルトの名無しさん
10/12/26 02:40:32
>>460
引数LongってVB6のやつでしょw

468:デフォルトの名無しさん
10/12/26 09:11:21
SetWindowPos使わなくてもAppActivate使えばいいんじゃないの
別の実行ファイルを常に最前面にしたいなら、そっちに制御任せりゃいいんだよ

469:デフォルトの名無しさん
10/12/26 09:42:56
これで動いたよ

Public Class Form1
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, _
ByVal X As Integer, ByVal Y As Integer, _
ByVal cx As Integer, ByVal cy As Integer, _
ByVal wFlags As UInteger) As Boolean


Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SetWindowPos(Me.Handle, -1, 100, 100, 500, 500, &H40)
End Sub
End Class

470:デフォルトの名無しさん
10/12/26 10:21:56
VB2010EEで、インスタンス変数のインテリセンスでSharedメソッドを表示しなくする方法と
フォームデザイナが生成するコントロールのアクセス修飾子デフォルトでPrivateにする方法を教えて欲しいです

ウザ過ぎて死にそう

471:デフォルトの名無しさん
10/12/26 10:41:23
Modifiresは駄目そうだなあ
全部選択してPrivate指定するしかないと3年前のこのスレの質問が出てきた

誰に合わせた仕様なんだよこれ
まぁ分かってるけど

472:デフォルトの名無しさん
10/12/26 13:02:11
>>467
>>469
ありがとうございます!
VB6の構文を使っていたんですね、引数の型を直したらうまく動きました。

>>468
AppActivateの存在を知りませんでした。
調べてみます。

473:デフォルトの名無しさん
10/12/26 13:18:25
>>471
気持ちは分かるけど、Formで外から呼ぶパブリックメンバなんてせいぜいShowかShowModalぐらいなんだから
インテリセンスに余計なものが表示されても普通は事実上そう困らないはずだと思うけど。>Modifierの件

474:デフォルトの名無しさん
10/12/26 14:55:29
>>472
469の場合、HandleはIntPtr型を返すから変換するか宣言のhwndをIntPtr型にした方がいい
それとOption StrictはOnにするクセ付けたほうがいい

475:デフォルトの名無しさん
10/12/26 18:08:38
For i = 0 to 100
intSum = intSum + i
i = i +1
Next
0~100までの足し算の結果がバグってるけどなぜ

476:デフォルトの名無しさん
10/12/26 18:14:35
>>475
i = i +1がいらないんじゃ。
それかintSumの初期値が0以外とか。

477:デフォルトの名無しさん
10/12/26 18:21:14
intSumの初期値が合っててもi = i + 1の行があったらだめだろ

478:デフォルトの名無しさん
10/12/26 20:31:53
0~100の偶数を足すにしてもそんな摩訶不思議なコードは書かない

479:デフォルトの名無しさん
10/12/26 20:37:12
すごくC言語っぽいコードだなあ、と思ったのでした

480:デフォルトの名無しさん
10/12/26 20:37:21
Dim i As Integer, intSum As Integer

intSum = 0

For i = 0 To 100
intSum += i
Next


481:デフォルトの名無しさん
10/12/26 20:39:45
intSum = Enumerable.Range(0, 101).Sum()

482:デフォルトの名無しさん
10/12/28 18:08:04
右クリックや左クリックをしても、奥にあるウィンドウの操作をできるようにする方法ってありますか?
クリックした瞬間に最小化や移動→マウスの位置を取得→その位置のウィンドウを左(右)クリック→またウィンドウを元に戻す
ということはAPIというものでできるようなのですが、他に簡単な方法は無いでしょうか

具体的にやりたい事は、デスクトップに時計や画像を少し透過で表示させるけど、
作業の邪魔にはならない・・そんな物を考えています
よろしくお願いします。

483:デフォルトの名無しさん
10/12/28 19:36:29
簡単なやり方はありません
C++でWin32API使ってやってるサンプルを見つけたのなら
それを移植しましょう

484:デフォルトの名無しさん
10/12/28 20:40:12
>>482
マウスが乗った時点で裏に回るとか移動して逃げるってのならどう?


485:デフォルトの名無しさん
10/12/28 20:45:06
マウスが乗ったらポインタの周り10ドット位完全透明の穴を開ければ?

486:デフォルトの名無しさん
10/12/29 02:50:10
なんとかなりそうです。ありがとうございました
>>483
考えついたものを調べたらAPIであったというレベルなので・・C++も面白そうですね。やってみようかな
>>484
おー、なるほど、そんなてもあるんですね
URLリンク(www.gizcollabo.jp)
でイケそうですね
>>485
こんなことができるんですね!DeleteObjectですか、知りませんでした。ありがとうございます

487:デフォルトの名無しさん
10/12/29 14:34:53
>>486
これで実現できるんじゃない?
URLリンク(msdn.microsoft.com)
>ヒット テスト
>レイヤード ウィンドウのヒット テストは、ウィンドウの形状と透明度に基づいています。これは、色分けされているウィンドウの領域やアルファ値がゼロの領域は、マウス メッセージが透過することを意味します。
>レイヤード ウィンドウが WS_EX_TRANSPARENT 拡張ウィンドウ スタイルを持つ場合、レイヤード ウィンドウの形状は無視され、マウス イベントはレイヤード ウィンドウの下の他のウィンドウに渡されます。

488:デフォルトの名無しさん
10/12/29 14:45:08
それをAPIと言ってるんだろ

489:デフォルトの名無しさん
10/12/29 18:03:00
あーでもあれか。透明にしちゃうとポインタの位置分からなくなるから
グローバルフックせんといかんのか

490:デフォルトの名無しさん
10/12/29 19:56:04
グローバルフックでポインタ位置を取得
ポインタがフォームの範囲内ならその座標を中心に
適当な色でFillEllipse
その色をMakeTransparent
そのビットマップを表示

で出来たよ

あ、ただそれを抑制する手段作っておかないと一切操作
出来なくなるからねw

491:デフォルトの名無しさん
10/12/29 19:57:41
グローバルフックはググれば適当なdllがあるから

492:デフォルトの名無しさん
10/12/29 20:49:00
言葉でなく
ソースコードください

493:デフォルトの名無しさん
10/12/29 20:52:41
ソースコードくださいじゃなくて
調べて試せよ

494:デフォルトの名無しさん
10/12/29 21:55:24
ポインタは写って無いけどこんな感じね
青いトコは壁紙
URLリンク(www.gazo.cc)

495:デフォルトの名無しさん
11/01/01 12:47:46
>>429
今更だけど、下記で参照できる。

My.Forms.form1.i (iがpublic宣言)
もちろん、iはコントロールのオブジェクト名でも参照できる。
たとえば、
My.Forms.Form1.TextBox1.Text というような感じです。





496:デフォルトの名無しさん
11/01/01 20:02:08
Select Case って If があれば存在いぎっがないの?

497:デフォルトの名無しさん
11/01/01 20:07:49
そうです。

498:デフォルトの名無しさん
11/01/01 20:10:31
列挙体を使った振り分けとかはselect caseの方がずっと便利。caseを自動生成してくれる。
そんなに気にすることじゃないが、select caseの方が一般に処理が速くなる(可能性がある)

499:デフォルトの名無しさん
11/01/01 20:24:17
else if ~を何度も書くのが面倒じゃなければね

500:デフォルトの名無しさん
11/01/01 22:50:27
>>498
>select caseの方が一般に処理が速くなる(可能性がある)
どういう意味?
IfもSelect Caseも全く同じパフォーマンスになると思うけど
VB6ならまだしも、VB.NETからは短絡評価できるようになったわけだし
全く変わらなくなったと思うけど、ILだと結果が異なってたりするの?
具体的な例を挙げて欲しいんだけど

501:デフォルトの名無しさん
11/01/01 22:53:10
select caseの場合、テーブルで評価してたりするのかな?
だとしたら分岐が多い場合は単純ifより速くなると思うけど

502:デフォルトの名無しさん
11/01/01 23:25:53
最適化されないなら、Ifの方が微妙に遅いだろうな

503:デフォルトの名無しさん
11/01/01 23:37:54
ILにswitch命令(ジャンプテーブル)は存在するよ

504:デフォルトの名無しさん
11/01/01 23:40:39
select caseのほうが可読性高いだろ。

505:デフォルトの名無しさん
11/01/02 07:47:43
vb2010Express  SQLServer2008 でデータのやりとりがしたいのですが、
URLリンク(homepage1.nifty.com)

に書かれているようにやっても
ステップ イン: 非ユーザー コード 'WindowsApplication1.My.MyApplication.New' をステップ オーバーしています
のようなエラーがたくさん出てできません。
これはどういう意味でしょうか?
どのようにすればよいですか?

現在 VBでデータソースとして接続はできました。
その際ユーザーインターフェースとマルチアクティブリザルトセットを
変更したのですが、関係ありますでしょうか?

長文で申し訳ないですがよろしくお願いいたします。

506:デフォルトの名無しさん
11/01/02 09:48:55
do loop
do loop
exit do
loop
A
loop
B
はAとBのどこえジャンプかしら

507:デフォルトの名無しさん
11/01/02 11:45:33
Elseif function()= xx
Else if function()=yy
と羅列していくとpgm上は分岐の数だけ演算を行うのでしょうか?


508:デフォルトの名無しさん
11/01/02 15:26:57
function()が何度も呼ばれるかどうかということかな?
ILにコンパイルする段階では何度も呼ばれる状態のまま。
ILからJITされる段階で関数にI/Oやその他の作用がないかどうか、
毎回同じ値を単純に返すだけの関数かどうかを検査して、
まとめても問題ないようなら最適化される。

509:507
11/01/02 15:42:23
>>508
thx
関数が毎回演算されるか不確定ならelseif文に羅列すべきではないね。
ありがとう。

510:デフォルトの名無しさん
11/01/02 15:43:51
>>508
話が噛み合ってない気がする....
>>507はたぶんそんな高尚なことは聞いてない。

511:デフォルトの名無しさん
11/01/02 15:45:44
>>509
いや、当たり前だがElseまたはElseIf以降の式は対応するIfで評価された値が
Falseの時しか実行されないって。

そうでなきゃ怖くて使えるか。

512:507
11/01/03 15:28:15
分かり難い文章でしたか?本当に知りたかった事は、
If a=100
else if functionA(a,b,c)=100
else if functionA(a,b,c)=50
Else
Endif
(functionは値渡しで他の変数の数値を変える事はないものとする)
という文をかいて、functionA()が1回につき計算が10秒かかった時に
最後のelseに到達するまで10+a秒かかるのか20+a秒かかるのか知りたかったのですが、
回答はJITcompilerで決定されるとのことでした。
最適化されるならどの様に書いても問題はないのでしょうが、
Functionが1回実行か2回実行されるかをプログラマが制御できない様な文章は
書くべきではないなと思っただけです。

直前にif文だけの為に dim a as integer, a=functionA(a,b,c)としてaをif文で評価するのって
あまり美しくない気がしていまして、、、。

513:デフォルトの名無しさん
11/01/03 16:59:21
>>512
なんでやってみないんだ。
Visual Basic 2010 Express もインストール出来ないのか?

514:デフォルトの名無しさん
11/01/03 20:32:21
>直前にif文だけの為に dim a as integer, a=functionA(a,b,c)としてaをif文で評価するのって
>あまり美しくない気がしていまして、、、。

>else if functionA(a,b,c)=100
>else if functionA(a,b,c)=50
俺から見りゃ、こんな書き方する方がよっぽど美しくないし無駄にしか思えないわ。

515:デフォルトの名無しさん
11/01/03 20:33:28
If a=100
Else
 Dim aa as integer = functionA(a,b,c)
 if aa=100
 else if aa=50
 EndIf
Endif

これじゃダメなのか

516:デフォルトの名無しさん
11/01/03 21:13:38
同じメソッドの戻り値を複数評価するなんて気持ち悪すぎだろ
SelectCaseならまだしも、ElseIfで逐次実行して連続評価とか
センスなさすぎ

517:デフォルトの名無しさん
11/01/04 01:57:23
それよりもJITの段階で最適化されるってのはホントなのか?
その段階で最適化されるなら、最適化オンオフ制御できない気がするんだが
もし最適化されることによる弊害がでたらどうするんだ?コード修正しかないのか

最適化するかどうかはコンパイルオプションとかで制御できるのが普通だと思うんだが
>>508のあたり詳しく説明してるところとかあったら教えてくれ

518:デフォルトの名無しさん
11/01/04 02:03:35
ILDASM使って解析(確認)してみればいいんじゃない

519:デフォルトの名無しさん
11/01/04 11:06:44
基本的に最適化はJITだよ
インライン展開なんかもJIT
JITの最適化のONOFFは実行時のオプションや属性などで決まる

520:デフォルトの名無しさん
11/01/04 14:46:15
wshスレにも書き込んでしまったのですが、よく見たら過疎っていたし、VB.NETもインストールされているのでこちらでと思います。
URLリンク(www.miraiz.bz)
にあるテンプレートを一括してダウンロードしたいのですが、可能でしょうか?可能なら誰か作ってくれませんか?

521:デフォルトの名無しさん
11/01/04 15:23:41
>>520

>可能かどうか
出来る

>可能なら誰か作ってくれませんか?
スレ違い つうかベンチャーやる気か知らんが甘えるな

ページのリンク抽出して拡張子を条件にしてファイルダウンロードするようなやついくらでもあるだろ
それくらい探してみれば?

522:デフォルトの名無しさん
11/01/04 15:27:58
>>521
> ページのリンク抽出して拡張子を条件にしてファイルダウンロードするようなやついくらでもあるだろ
> それくらい探してみれば?
それでは無理なので、相談させて頂いています。
尚、ベンチャーやる気はありません。
今後の様々な応用の為のプログラミングの勉強にもなるとも思っての相談です。
だいぶ前にwshで単純なwebページダウンロードを行うプログラムを組んだ事があったのですが、それもどこかに失ってしまいました。

523:デフォルトの名無しさん
11/01/04 15:50:42
>>522
貴方の相談は作ってもらうことですか?

524:デフォルトの名無しさん
11/01/04 16:41:41
>>523
1つずつ質問したり調べたりするよりも合理的に、最も勉強にもなると私は思っていますが。

525:デフォルトの名無しさん
11/01/04 17:09:29
へー

526:デフォルトの名無しさん
11/01/04 23:49:22
>>520
何の会社かしらんけど、減価償却費シュミレーションとか恥ずかしすぎるw

527:デフォルトの名無しさん
11/01/04 23:59:23
プログラムに限らず、1つずつ調べてコツコツ作ったほうが勉強になるに決まってんだろ
いきなり参考書の答えみて勉強になるとでも重ってんのかよ

528:デフォルトの名無しさん
11/01/05 13:34:32
>>526
あまり程度は良く無いという事でしょうか?

>>527
教師有り学習ではそうなりますが、私の様な教師無し学習ではそうとは限りません。
学生時代から他の人のソースで勉強してきましたので。
> いきなり参考書の答えみて勉強になるとでも重ってんのかよ
なりますよ。
15秒わからなければ答えを見ろという和田秀樹さんの数学の学習法の書籍なんかも参考にどうぞ。
教師無し学習で仮説実験的思考回路を養うとすごい勢いで学習できる脳になります。。。という話はスレチなのでおいときますが、
自分の思っている事が全てだと思わないことです。

529:デフォルトの名無しさん
11/01/05 15:09:11
答えがない問題のほうが世の中には多いよ。
そうした場合どうするんだろね。この手の人は?
「くれ!!!」って大声で叫ぶエネルギーがあったら、自分で調べたらいいのに。。。

530:デフォルトの名無しさん
11/01/05 15:39:09
>>529
> 答えがない問題のほうが世の中には多いよ。
本題と無関係の仮定を出して逃げる、、、どこぞのガイドラインのまんまだな

531:デフォルトの名無しさん
11/01/05 15:42:03
能力のない人間の逃げだろ

調べる能力にしろ、作る能力にしろ


532:デフォルトの名無しさん
11/01/05 15:49:27
>>520
どうぞ。
この情報の組み合わせだけで十分可能です。
どうぞ組み合わせておつくりください。

URLリンク(www.google.co.jp)

URLリンク(www.google.co.jp)

URLリンク(www.google.co.jp)



533:デフォルトの名無しさん
11/01/05 15:53:56
>>532
間にユーザ名とパスを入力するフォームがある

534:デフォルトの名無しさん
11/01/05 16:02:16
>>533
そうですか
ではこれでどうぞ

URLリンク(www.google.co.jp)


535:デフォルトの名無しさん
11/01/05 16:12:44
回答できないとgoogleにリンク張るっていうのお決まりパターンだな

536:デフォルトの名無しさん
11/01/05 16:48:25
質問です。
開発環境:VB2008 Express
OS:XP pro SP3

フォームアプリで他のWindowにフォーカスを移さない、という制御は可能でしょうか。

FormイベントのLostFocusの中で、Me.Activate() しても上手く行きません。
MSではあまりLostFocus使うなみたいな記述もあり、
別な方法があるのかと思いましたが見つかりませんでした。

何かヒントだけでも教えて頂けるとありがたいです。
よろしくお願いします。


537:デフォルトの名無しさん
11/01/05 17:46:30
>>535
まんま答えがあるじゃねぇかwww
わざわざ答えるようなもんでもない

ログインして
WEBページのリンク抽出して
ダウンロードする
たったこれだけだろ?


538:デフォルトの名無しさん
11/01/05 18:40:18
ほっとけよ。煽って回答得るって性格の方なんだから。

539:デフォルトの名無しさん
11/01/05 19:23:05
VB.NETでASP.NETを書いてサーバーにaspxファイル置いとけばボーダフォンとかドコモ用のページに自動でなるの?

540:デフォルトの名無しさん
11/01/05 20:30:34
ASP.NETでA、Bという機能があって双方の*.aspxはほとんど同じなので画面だけ共用して処理を書く*.vbは別にする事ってできるの?

541:デフォルトの名無しさん
11/01/05 22:14:00
できるよ

542:デフォルトの名無しさん
11/01/06 09:05:28
>>539
無理じゃないか?
ユーザーエージェントとかその辺使うんだと思うけど

543:デフォルトの名無しさん
11/01/06 10:22:05
イベントハンドラと処理の解決タイミング?について質問です。

①Form1.Load の後に Form1.Shown が発生するように
 同一フォーム内の特定の関数が終了したことを条件として関数を起動させる方法は存在するのでしょうか?

 現在 Hide で隠したフォームを
 AddHandler 【別フォームが閉じた時】, AddressOf 【フォーム表示関数】
 という記述で表記し、【フォーム表示関数】内でフォームの更新と表示を行っています。
 この更新が非常に遅いので、先にフォーム表示のみを行い、その後更新が出来ないものかと考えています。

②また、更新に際してループ処理を行っているのですが、 「X件完了しました」 というアナウンスを
 【Xを示すテキストボックス】.Text = 【現在処理した項目数(=ループカウンタ)】(処理Xとする)
 という形で行おうとした所、処理が完了するまでフォームが表示されないため、途中経過が見れずに
 アナウンスの体を成しませんでした。

フォームの先表示とともに、処理Xに関しては更新処理中も即表示させることで
『フォームはすぐ表示され、更新中も現在の更新件数が随時表示される』
という機能が実現できるのかなぁ、と考えています。

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

544:デフォルトの名無しさん
11/01/06 10:25:01
非常に遅い処理なんぞはBackgroundWorkerでも使ってろ

545:デフォルトの名無しさん
11/01/06 10:43:50
マルチスレッドがいいよ

546:デフォルトの名無しさん
11/01/06 11:09:07
質問から察するに
純粋なマルチスレッドよりも
>>544がウヌヌメ

547:sage
11/01/06 11:18:54
アドバイスありがとうございます。

>544 さん
早速ぐぐってみましたが、非常にそれっぽい文章が見つかり大喜びです。
現在、必死に内容を解読中です。
最後に DataGridView の表示を更新しようとすると有効でないスレッド間操作って怒られる・・・。

>555 さん
544さんのように、表の処理と BackgroundWorker の裏処理でマルチって事ですかね?
理解に誤りがあったらごめんなさい。

多分②の進捗アナウンスも検索時に出てきた ProgressChanged あたり調べれば対応できそうなので、
DataGridView の更新手段と BackgroundWorker の理解に取り組んでいます。

取り急ぎお礼のみ

548:デフォルトの名無しさん
11/01/06 11:20:51
>>546 さん
入れ違いですがアドバイスありがとうございます。
やりたい事はこれっぽいので、苦戦中です。

・・・sageさんとか>とかなにこれはずかしい。

549:デフォルトの名無しさん
11/01/06 12:01:21
>DataGridView の更新手段
これはどういうこっちゃ?

察するに

1.データを取得
2.データをDataGridViewに表示
3.編集させる
4.なんか登録ボタンみたいなものを押すとデータを保存
(この処理が重くて時間がかかるので、画面が固まらないように
バックグラウンド処理で行い、進捗だけプログレスバーかなんかで表示したい)

こんな感じ?

釣りじゃないとすれば・・・
2ch sage
2ch アンカー
で調べれば幸せになれると思う

550:デフォルトの名無しさん
11/01/06 12:03:45
バックグラウンド処理の最後や途中でDataGridViewにアクセスしたらエラーになったんだろ
ProgressChangedやCompletedイベントハンドラはUIスレッドで呼び出されるのでそっちでやる

551:543
11/01/06 16:15:29
やっていること

【処理X】
1.メインフォームを隠し、別フォームを開く。
2.別フォームでCSVを指定し、別フォームを閉じる。
3.別フォームが閉じた事にハンドルして、メインフォームを表示し、処理Xを起動。
【処理Y】
1.処理Xで指定したCSVを開き、データを DataTable に取得
2.DataTable のデータを一行ずつ編集し、内容を修正(結合や計算など)
3.2で修正したDataTable の行を DataSet.【テーブル名】DataTable に代入
(2と3をFor文で行数回ループ)
4.DataGridView.DataSource = 4のテーブル と指定してDataGridView を表示(大量データ)

①の目的は、処理Yを行う前に処理Xを完了させ画面を表示。その後で処理Yを走らせること
だったので、>>544 さんの指摘通り処理Yを BackgroundWorker で行うことで解決しました。

552:543
11/01/06 16:16:27
>>549 >>550 さんアドバイスありがとうございます!

参考資料:下記URLのVB版コード
URLリンク(www.atmarkit.co.jp)

DataGridView については、 >>550 さんの指摘通り手順4に対し発生しました。
これについては

’Invoke を利用するためのおまじない?程度の理解です
Delegate Sub SetDelegate()

’関数をフォーム側で実行させる
Invoke(New SetDelegate(AddressOf 【関数名】))

’処理内容を関数として作成
Sub 【関数名】()
処理内容
End Sub

このような関数を作成し
Invoke(New SetDelegate(AddressOf 【DataGridViewへの書き込み(手順4)】))
という形で対応できました。(この行には下記の致命的な問題あり)

また、プログラムの開始時に
Invoke(New SetDelegate(AddressOf 【Formのロック/プログレスバーなどの表示】))
終了時に
Invoke(New SetDelegate(AddressOf 【Formの開放/プログレスバーなどの非表示】))
を加え『フォームはすぐ表示され、処理は裏で行われる』部分については対応できました。

(・・・Formをロックすると処理中のメッセージもロックされ見えにくくなってしまいますし、
 【処理中表示ラベル.Enabled = True】 では駄目なようなので、 Form はロックせず、ボタン
 などを個別ロックするしかないのかな?と考えています)

553:543
11/01/06 16:17:16
②進捗表示については、サンプルページの方法で動いたことは動きました。
 ただ、問題が数点あり、現在それに取り組んでいる所です。

A:参考資料の System.Threading.Thread.Sleep(100) 部分に処理Yを全て入れると
  参考資料のFor i As Integer = 1 To bgWorkerArg の部分で bgWorkerArg = 0 となり抜けてしまう。

B:そもそも資料の方法では、処理Yの手順3はFor文の『連続した細かい作業』なので対応できるが、
  手順4のような『一つの大きな作業』の進捗を表示できない。(と、私が思っているだけかも)

C:二度目以降 Invoke(New SetDelegate(AddressOf 【DataGridViewへの書き込み(手順4)】))
  を通る際に、フリーズすることが頻繁にあります。

  特徴として
   ・該当行にブレークポイントを挟むと発生しなくなる。
   ・進捗表示部分をコメントアウトすると、発生しなくなる。
    (現在は手順2・3のFor文部分のみ参考資料の方法で進捗を表示している)
   ・データ量が小さいCSV読み込み時は、発生しない。

  このような症状と見受けられるので、現在はこれの原因を探っています。

凄まじい長さになってしまいましたが、ご意見などいただけるとありがたいです。
なお、未熟なもので内容に誤りがあったらごめんなさい。

554:543
11/01/06 16:22:00
あああ誤記が・・・。
処理Xの手順3は『処理Yを起動』です。

AddHandler 【別フォーム】, AddressOf Me.Show
AddHandler 【別フォーム】, AddressOf 【処理Y】

この形だと処理Yが走っている間はフォームが表示されなかったので・・・。

555:デフォルトの名無しさん
11/01/06 16:36:02
1セルごとにデータをセットしていけばいい

556:543
11/01/06 20:03:47
>>555 さんアドバイスありがとうございます

DataGridView.DataSource = DataSet1.TblAddrListDataTable

DataGridView.DataSource = DataSet1.【テーブル名】DataTable
という形にし、Dataset側を毎回初期化することで1行ずつ渡す事は成功しました。

しかし、DataSorce 側に行を追加する機能が見つからず、現状では最後に渡した
行だけが表示されてしまいます。

DataGridView.DataSource『.Rows.Add』
のような機能を探しましたが見つからず、ここで引っかかっています。

もしかして、そもそも方向性が間違っていますか?

557:デフォルトの名無しさん
11/01/06 20:29:39
以前、VB2008でアプリを作ったんですが、その時はDPI設定が100%だったんですけど
今のPCはDPI設定が115%で、文字や画像の表示がずれてしまいます。
自動スケーリングの機能があるみたいなんですが、どこを操作すればよいのでしょうか?

558:デフォルトの名無しさん
11/01/07 09:12:02
>>556
もしそうしたいのならDataGridView.DataSource をDataTableにキャストしてやらにゃぁ…

'データソースがテーブルと決め打ちされているんであれば
dim temp as datatable = directcast(DataGridView.DataSource)

こんな感じだった気がするけど・・・ 今IDEないから構文忘れたが
 

559:デフォルトの名無しさん
11/01/07 10:19:30
環境 OS:XP SP2 VB:2010express(無料ver) SQLServer2008
PC1 にDBのmdfファイルがある。
PC1とPC2は同じLAN内にあり、PC1の共有ファイルに、VBで発行した
windowsアプリケーションがある。

質問
PC2から PC1で発行したアプリケーションを実行すると
DBのデータを参照できませんでした。

コードで c:\programfile\~~ と書いた場合、
PC1の cドライブを参照するのか PC2のcドライブを参照するのか
どちらでしょうか?

560:デフォルトの名無しさん
11/01/07 10:33:56
そりゃローカルだろ・・・・・

\\pc名~

で書かないといけないと思うんだけど・・・

それ以前にSQLSERVER使うんだったらそういう使い方よりは普通にDBにつないだ方が早いんじゃ?

561:デフォルトの名無しさん
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)

みたいに。


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