VB.NET質問スレ(Part35)at TECH
VB.NET質問スレ(Part35) - 暇つぶし2ch50:デフォルトの名無しさん
10/09/27 20:18:28
>>48
AutoResetEventでも使えば

51:デフォルトの名無しさん
10/09/28 08:13:52
byval/byrefについて、stringの場合はbyvalで渡す方が一般的でしょうか?

52:デフォルトの名無しさん
10/09/28 09:00:32
引数全般ByValが基本だよ

53:デフォルトの名無しさん
10/09/28 09:34:08
ありがとうございます!

54:デフォルトの名無しさん
10/09/28 15:56:47
URLリンク(support.microsoft.com)
VB4時代のこんなの見つけたけど、今は大丈夫だろうと思ったら

Sub Main(ByVal cmdargs() As String)
Dim sw As New Stopwatch
Dim a(50000000) As Integer

sw.Restart()
For Each i As Integer In a
a(i) = i
Next
sw.Stop()
p(sw.ElapsedMilliseconds)

sw.Restart()
For i As Integer = 0 To UBound(a)
a(i) = i
Next
sw.Stop()
p(sw.ElapsedMilliseconds)

Console.Read()
End Sub
何度試しても、キャッシュを気にして順番を変えてみても
for eachのほうが遅い
今でも配列にはforを使うべき?

55:デフォルトの名無しさん
10/09/28 16:17:10
C#だと最適化されて同じになるんだけどな
ちゃんと型指定されてるからVBだから最適化できないってことはないはず
コンパイラが馬鹿なんだろ

56:デフォルトの名無しさん
10/09/28 17:57:57
うちの環境だと差は出ないな。
VSのデバッグモードで動かしたりしてない?

XPSP3, .NET4.0でコマンドラインからoptimizeコンパイル、実行。
最初のループだけ早くなる傾向があるから、
foreachとforを3セット繰り返して、後ろ2セットで測定した。


57:デフォルトの名無しさん
10/09/28 18:24:12
for eachのnextは列挙の次の要素の取得だけど、
普通のforのnextはintegerのインクリメントだからなぁ
列挙よりインクリメントが早いって話なんじゃないだろうか

58:デフォルトの名無しさん
10/09/28 18:24:42
csvの1行目を除外してA列で昇順で並び替えるには、どうしたらいいですか?

59:デフォルトの名無しさん
10/09/28 19:04:36
>>56 デバッグモードで試してた。それをきいて一安心

ところでコマンドラインでコンパイルするのには何か意味があるの?
2010expressで最適化はデフォルトでOnになってるけど

>>57 csvを1行目を除外して読み込んでorder byとかでやればいいんじゃない?
しかしVB.netよりもVBAのほうがいいように思うけど
もしその作業が単発ならExcelのオートフィルタ

60:デフォルトの名無しさん
10/09/28 19:05:26
ずれた。後半は>>58

61:デフォルトの名無しさん
10/09/28 19:32:30
このサンプル・プログラムで最後の行から最初の行に読み込むようにするには?
URLリンク(www.atmarkit.co.jp)

62:デフォルトの名無しさん
10/09/28 19:49:01
どこまで出来て、どこが出来ないの

63:デフォルトの名無しさん
10/09/28 20:04:21
え?この部分を最初の行からじゃなくて最後の行から最初の行へ

Do While Not tr.EndOfData
oneLine = tr.ReadFields()
If oneLine(0) = txtNumber.Text Then
sw.WriteLine(oneLine(1))
End If
Loop


64:デフォルトの名無しさん
10/09/28 22:41:49
無理
全部List(Of String)にでも読み込んでからReverseしてFor Each

65:デフォルトの名無しさん
10/09/29 03:10:38
複数列あるcsvをList(Of String)とか配列に読み込む方法がわからない。

66:デフォルトの名無しさん
10/09/29 03:35:20
古本屋に行って投売りされてる初心者本片手にMSDNとにらめっこ一ヶ月ぐらいした方がいいぞそのレベルは

一行ずつ読み込んでも、全部いっぺんに読み込んで改行コードで分割するんでもいいだろ。

67:デフォルトの名無しさん
10/09/29 07:31:10
>>66
>>35

68:デフォルトの名無しさん
10/09/29 12:23:20
まとめて読み込むなら、これだな。
URLリンク(msdn.microsoft.com)


69:デフォルトの名無しさん
10/09/29 18:38:14
>>57
やってることは一緒なんだからコンパイラが最適化できる。バカ正直にIEnumerator操作する必要はない。
むしろ、for eachの列挙の方が形が決まってる(自由度が低い)分最適化の余地が大きい。

70:デフォルトの名無しさん
10/09/30 09:08:23
日付を2001001から2001/10/01へ変換するにはFormatはどうすれば?

71:デフォルトの名無しさん
10/09/30 10:39:35
2001年0月1日?

72:デフォルトの名無しさん
10/09/30 11:42:04
固定長だったら
Dim s As String = "20011001"
Dim y As String = s.Substring(0, 4)
Dim m As String = s.Substring(4, 2)
Dim d As String = s.Substring(6, 2)
でいいじゃん
あとで結合するときは、直接やらないでいったんそれぞれInt32.ParseでIntegerに変換して
DateTimeを作ってからToStringでフォーマット使って文字列にした方が応用が利く

73:デフォルトの名無しさん
10/09/30 11:46:17
>>61
Dim csvRecords As New ArrayList

While tr.EndOfData
 oneLine = tr.ReadFields()
 csvRecords.Add(oneLine)
End While

tr.Close()

'最後の行から最初の行へ その1
'csvRecords.Reverse() '要素の順序を反転

'最後の行から最初の行へ その2
For MyRow = csvRecords.Count - 1 To 1 Step -1

Next MyRow

74:デフォルトの名無しさん
10/09/30 12:44:52
そこもわかってないんだろうけど問題はそこじゃないだろ
結論から言うと>>61の方法は使えない
自分でTextReaderの派生クラス作ってうまく辻褄合わせしてやればできなくはないけど>>61には絶対無理
一行ごとにTextFieldParserを作るとか強引な方法は考えられるけど
ある程度フォーマットの決まったファイルを読むならTextFieldParserなんて使わずに自分で書くのも難しくない

75:デフォルトの名無しさん
10/09/30 13:04:49
>>73で出来たけど?

76:74
10/09/30 13:29:28
考えたら>>73はどうせメモリに全部読み込むの前提なんだから
全ての行を逆に結合して一つの文字列にしてしまえばTextFieldParser使えるね

77:デフォルトの名無しさん
10/09/30 14:10:24
サンプル・プログラムでTextFieldParser使ってるのに意味不明。

78:デフォルトの名無しさん
10/09/30 14:14:00
>>69
やってることは一緒じゃないんじゃね?
列挙は実際の要素(この場合配列に格納されてる実際のinteger値)取得する必要があるけど、
普通のループは要素関係ないぞ(取得/インクリメントするのはループ変数のinteger値)
integer値を取得するってとこだけ見れば同じかもしれんが
前者は配列中の要素を特定する必要があるが後者はその必要が無い
配列だからIEnumeratorすっとばす最適化するってなら差が出ない理由にはなるな

つか>>54の二つのループって同じ処理結果じゃないだろ、これ

79:デフォルトの名無しさん
10/09/30 15:56:17
C#ではfor (int i = 0; i < array.Length; i++) hoge(array[i]);
のような典型的な形の配列アクセスは最適化されるよ
配列専用の特別なIL命令が使われるらしい
VBはどうか知らないけどたぶん一緒

80:デフォルトの名無しさん
10/09/30 20:05:02
>>47
質問だけしてトンヅラって感じの悪い野郎だな

81:デフォルトの名無しさん
10/09/30 20:51:29
文字か数値か判別するのにChar.IsNumberとかInteger.TryParseだとうまくいかない。
「String "--" から型 'Double' への変換は無効です。」とエラーが出る

他に文字か数値か判別する方法はないのかな?

82:デフォルトの名無しさん
10/09/30 21:06:27
それ、IsNumberやTryParse以外の所でミスってないか?

どの行でエラー出してるか確認してみろ

83:デフォルトの名無しさん
10/09/30 21:09:01
VB初心者が書いてみたがこんなんでどう
Dim s As String
Do
Dim i As Integer
s = Console.ReadLine()
If s Is Nothing Then
Exit Do
End If
Try
i = CInt(s)
Console.WriteLine(i + 10)
Catch ex As Exception
Console.WriteLine(s)
End Try
Loop

84:デフォルトの名無しさん
10/09/30 22:27:35
「正常系の処理に例外を使うな」

85:デフォルトの名無しさん
10/09/30 22:29:19
うっせーよ

86:デフォルトの名無しさん
10/10/01 01:22:19
>>78
だよな。
列挙の方は要素からの読み取りで間接的な参照が挟まるlことになる。


87:デフォルトの名無しさん
10/10/01 08:56:41
VB2008使用です。
チェックボックスを出しているDateTimePickerで、
Checkedの変更タイミングで行いたい処理があります。

ValueChangedで実装してみたのですが、
DateTimePicker.Value=Today
DateTimePicker.Checked=True
とした後にチェックボックスを画面上で外すと
ValueChangedが行われません。
Checkedの変更タイミングはValueChangedではないのでしょうか?

88:デフォルトの名無しさん
10/10/01 13:21:13
恐れ入ります、分かる方がいらっしゃいましたらご教授ください。

●VB.NETにて、配列の先頭アドレスを数値に変換するにはどうすればよいのでしょうか?

やりたいことは、waveOutPrepareHeader()に渡すWAVEHDR構造体のlpDataメンバに
波形バッファの先頭アドレスを代入したいのです。

例)
<StructLayout(LayoutKind.Sequential)> Structure WAVEHDR
 Dim lpData As Int32
 Dim dwBufferLength As Int32
 Dim dwBytesRecorded As Int32
 Dim dwUser As Int32
 Dim dwFlags As Int32
 Dim dwLoops As Int32
 Dim lpNext As Int32
 Dim reserved As Int32
End Structure

Declare Function waveOutPrepareHeader Lib "winmm.dll" Alias "waveOutPrepareHeader" (ByVal hWaveOut As Int32, ByRef lpWaveOutHdr As WAVEHDR, ByVal uSize As UInt32) As Int32

Dim waveBuffer As Byte(BUFFER_SIZE)
Dim waveHdr As WAVEHDR

waveHdr.lpData = waveBufferの先頭アドレス
waveHdr.他のメンバ = 適当に設定
waveOutPrepareHeader(..., waveHdr, ...)

C言語風に書けるなら waveHdr.lpData = (unsigned long)waveBuffer; とやりたいところですが・・・。
よろしくお願いいたします。

89:デフォルトの名無しさん
10/10/01 14:07:01
非同期なら
GCHandle.AllocでGCHandleType.PinnedしておいてAddrOfPinnedObject
その配列がアンマネージで使われなくなったらFreeを忘れずに
あとポインタとかハンドルはInt32じゃなくてIntPtrな

90:デフォルトの名無しさん
10/10/01 14:17:29
書き戻しがないなら単純にコレでいけると思う。
<StructLayout(LayoutKind.Sequential)> Structure WAVEHDR 
 Dim waveBuffer As Byte(BUFFER_SIZE) 
 Dim dwBufferLength As Int32 
   :
どうしてもリアルにアドレスを数値化したいなら
固定化なりマーシャリングを自前でやる必要がある。

91:デフォルトの名無しさん
10/10/02 15:33:06
下記のコードでnの中のresultに0.0000・・・の0の部分だけを取りたいのですが、
これだと0が代入されてしまいます。
n = 1.0000000015 だと result = "1.00000000"
となるので正規表現は間違っていないよですが、
0だけの文字列を取る方法を教えて頂きたいです。

Dim n As Double
n = 0.0000000015
Dim r As New Regex("(?<1>1\.?0*)\d+")
Dim m As Match
m = r.Match(n)

If (m.Success) Then
Dim result As String
result = m.Groups(1).Value
Console.WriteLine(result)
End If

92:デフォルトの名無しさん
10/10/02 15:48:30
1.0000000015にたいして
00000000がとれれば良いの?

93:デフォルトの名無しさん
10/10/02 15:55:13
1.0000000015の場合は
1.00000000が取りたいです。
実際には1.・・・・という値が対象になることはないです。いつも0.・・・・・nn・・・
0.00・・・・・nnnで0以外の数字が出るまでの0.000000の部分を取りたいです。


94:デフォルトの名無しさん
10/10/02 16:02:35
nをそのまま文字列にすると1.5E-09になるぞ。

nをはじめから文字列にしたらどうなる?
Dim n As String = "0.0000000015"


95:デフォルトの名無しさん
10/10/02 16:02:40
[1-9]\.0+
あとそういうのに浮動小数点使うな
Decimal使う

96:デフォルトの名無しさん
10/10/02 16:04:31
94みたいなことをしてないか気づけるので
Option Strict Onおすすめ

97:デフォルトの名無しさん
10/10/02 16:06:20
誤解されそうな表現だった。別に94に何か言いたいことがあるわけじゃなくて
勝手に暗黙的な変換がなされるのを防ぐって意味ね

98:デフォルトの名無しさん
10/10/02 16:09:42
レスありがとうございます。
Decimalでできました!正規表現もありがとうございます。
String変数に入れると"9E+15"みたいになってしまいました。
Option Strict Onをやったら何箇所か~~~が出ました;
どうもありがと!

99:デフォルトの名無しさん
10/10/02 16:13:02
>Option Strict Onをやったら何箇所か~~~が出ました
それは同様のバグがある可能性が極めて高い場所だから修正することをお勧めする

100:デフォルトの名無しさん
10/10/02 16:20:27
そのままのコードを生かしてみた
string.formatの部分はもっとましなやり方があるかもしれない
Dim n As Double = 0.0000000015
Dim reg As New System.Text.RegularExpressions.Regex("(?<1>.\.0*)\d+")
Dim s As String = String.Format("{0:0.################}", n)
Dim m As System.Text.RegularExpressions.Match = reg.Match(s)
If (m.Success) Then
System.Console.WriteLine(m.Groups("1").Value)
End If

101:デフォルトの名無しさん
10/10/02 16:32:36
>>98
誰の言うことが正しいのかの判断は君に任せるが、
Decimal使えっていうのは俺はちょっと論点ずれてると思うよ。

扱う値の範囲にもよるが、普通はDoubleで問題ないし、以下のようなコードを書くべき。
Private Function SomeFunc(ByVal value As Double) As String
  Dim regex As New Regex("^(\d*[.]+0*)\d*$")
  Dim m As Match = regex.Match(value.ToString("G"))
  If m.Success Then
    Return m.Groups(1).Value
  Else
    Return ""
  End If
End Function

102:デフォルトの名無しさん
10/10/02 16:41:48
それ正規表現間違ってます
何も考えたくないならDecimalの方がいいよ
浮動小数点はちゃんと理解して使わないと結構普通に予期しない動作するよ

103:デフォルトの名無しさん
10/10/02 16:46:49
WindowsフォームにWebBrowserがあります。
WebBrowser上のActiveXのコントロール(テキストボックスなど)にアクセス
できるでしょうか?



104:デフォルトの名無しさん
10/10/02 17:05:45
Document.DomDocumentでCOMのDOMのポインタが取れるから
その中から探してIHTMLObjectを取得すればいいんじゃないの
やったことないから細かいことは知らないしCOMはスレ違い

105:デフォルトの名無しさん
10/10/02 17:08:02
>>101
Dim m As Match = regex.Match(value.ToString("G"))

Dim m As Match = regex.Match(value.ToString("F20").TrimEnd("0"c))
とかにしないとダメだなw素で何か勘違いしてた。

>>102
>それ正規表現間違ってます
どこが?

>浮動小数点はちゃんと理解して使わないと
むしろちゃんと理解してない奴がやたらとDecimalなぞを使いたがる印象

106:デフォルトの名無しさん
10/10/02 17:24:08
[.]+はおかしい
?の間違い?

107:デフォルトの名無しさん
10/10/02 17:25:59
>>106
よくそんな知識で人にケチ付けられるな....

108:デフォルトの名無しさん
10/10/02 17:32:52
>>106
確かにその量指定子は不適切だったありがと

109:デフォルトの名無しさん
10/10/02 18:28:24
VBまともなの買うなら。
URLリンク(profiles.yahoo.co.jp)

110:デフォルトの名無しさん
10/10/02 18:43:23
GUIアプリを適当に作るとソースコードとGUI部品が密着してしまって再利用しにくくなりますよね。
特にマルチスレッドアプリを作ってると、自分の知識が足りない事もあって、改良しようとすると全面作り直しなど泥沼にはまってきます。
こういうのを解決する手法があると思いますが、教えてもらえますか。

111:デフォルトの名無しさん
10/10/02 18:47:32
他の言語やってみたら見方が変わるよ
VBできるならC#→Java→他がおすすめ

112:デフォルトの名無しさん
10/10/02 19:25:03
とにかくクラスを作るようにしてたらそのうち慣れるよ

113:デフォルトの名無しさん
10/10/02 19:33:12
やっぱ仕事単位でクラスにまとめるんですね。以前やってみたけどそれほど旨くいかなかったのはスキル不足のせいかあ。
オッサンなので他言語に移るのはつらいけど、C#はやってみる価値があるのかな・・・。

114:デフォルトの名無しさん
10/10/02 19:46:12
VBできるならC#は簡単
C#やればVBで「やるべきでないこと」がわかってくる

115:88
10/10/02 21:10:29
>>88です。

>>89 >>90
どうもありがとうございました。

まずは>>89の方法でうまく行きました。
次は>>90の方法で試してみたいと思います。


116:デフォルトの名無しさん
10/10/02 23:10:54
vb.netの質問ではないのですが、どうかご教授ください。

vs2003で.net1.1を参照し作成したexe(以降、hoge.exe)を、.net1.1がインストールされていない、
.net2.0以上がインストールされているPCで実行したところ、正常に動作します。
※「正常」と書いていますが、「ザックリと動く」と読み替えてもらってもかまいません。

そこで質問なのですが、hoge.exeはが参照している.netは1.1なのに、
gacに入っている2.0以降の.netライブラリ上で動作するのでしょうか?

もしかして、.net2.0のmachine.configにsidebyside的なことがかいてあるのでしょうか?

117:デフォルトの名無しさん
10/10/02 23:27:50
.NET2.0上で.NET1.1アセンブリの扱いのポリシーは「取り敢えず2.0で動かしてみる」だったはず
.NET4だとapp.configに記述されてない限り起動させないだったはずだけど

.NET1.0/1.1の記述だけどこの辺参考に
URLリンク(www.atmarkit.co.jp)

118:デフォルトの名無しさん
10/10/03 09:39:17
.NET4でポリシーが変わったのは、100%の互換性は保証できないから必ずテストしろという意味
1.1→2.0時の問題を踏まえての変更だからその意味を考えて慎重に
ほかの会社なら100%の互換性と言い切っちゃうところだけどそこはMSらしいというか

119:デフォルトの名無しさん
10/10/03 10:31:09
.NET4でコードセキュリティモデルから透過セキュリティモデルに変わったのがでかい。


120:デフォルトの名無しさん
10/10/03 16:41:55
CASがなくなったわけじゃないよ。軒並みObsoleteになっただけ。
どっかの公式ドキュメントで読んだけど、.NET Frameworkのコンポーネントの
インストールパスが変わったら問題が出るアプリケーションが存在する可能性は0ではないとかそんなレベルの話らしい

121:デフォルトの名無しさん
10/10/04 11:35:15
質問させてください。

今情報表示するだけのアプリを作っているのですが、
いろんな機種で表示させたいと思っています。
そこで問題になるのが解像度の問題です。
常に最大化して使いたいのですが、小さな機種(800x480に)あわせて作っているので大きな画面だと右と下に大きな余白が出来てしまいます。
全てのラベルや画像を画面いっぱいに広げる方法はないでしょうか?
anchorは使ったのですが、これはラベルの文字が大きくならないため使えませんでした。

何かよい対処がわかる方がおられましたら、アドバイスいただけると助かります。

122:デフォルトの名無しさん
10/10/04 11:40:47
>>121
WPFで作れば拡大縮小が自由自在なはず
知らないけど

123:デフォルトの名無しさん
10/10/04 11:45:15
>>122
つまりFormだと絶望的だと・・・?

124:デフォルトの名無しさん
10/10/04 12:02:58
折角でかい画面使ってるのにそれに合わせて文字が大きくなるとか超がっかり
そんなのOSのDPI設定でするもんだろ

125:デフォルトの名無しさん
10/10/04 12:26:06
解像度取得して
それにあわせて描画すればいいだけちゃうんけ?


126:デフォルトの名無しさん
10/10/04 12:28:38
常に最大で使うっていうのが
そのPCでは、そのアプリしか動かさないってことなら

PCの解像度のほうを変えろ



127:121
10/10/04 12:51:19
>>124
そんなもんですか
どんな画面でも表示できるのを目指しているんですが

>>125
いろんな設定に対して行うのは結構作業工数がバカみたいになるので・・・

>>126
やっぱりそれがいいんですかね。
ワイド画面で設定しているから4:3の画面で少しおかしくなるのは目を瞑りますかね

128:デフォルトの名無しさん
10/10/04 13:01:09
Direct3Dで作るのもいいかも
解像度なんて関係なく作れるし

129:デフォルトの名無しさん
10/10/04 13:14:35
>>128
WPFとかDirect3Dとか根本的に修正しないと無理っぽいみたいですね

130:デフォルトの名無しさん
10/10/04 13:49:58
>>127
>>いろんな設定に対して行うのは結構作業工数がバカみたいになるので・・・

ん~と・・・・、そんなに工数多くなるかな?、やろうとしてることがわからんので、ちょとイメージ沸きません

anchorで文字のサイズ以外がうまく言ってるなら
文字サイズだけ自力で変えてやれないの?、それなら工数いらなくない?


131:デフォルトの名無しさん
10/10/04 14:05:37
>>130
レスありがとうございます。
元が800x480でアプリ開発してて、それを最大化等で拡大したときに文字を含めた全てを均等に大きくしたいのです。
anchorで大きくできると言っても均等ではなく、とりあえず端からの距離を保ったまま大きくなってる状態で、やりたいこととは違うのです。

それにどんな解像度のマシンで使われるか不明なので、どのくらいのフォントサイズで、どの位置~というのが明確に決めづらいです。

132:デフォルトの名無しさん
10/10/04 14:14:17
まあ比率で計算するしかないわな
Direct3Dも座標は絶対値じゃなくて比率で指定するし


133:デフォルトの名無しさん
10/10/04 14:18:04
>>131
文字は自前でコントロールの大きさ調べてそれに対して何%
みたいな感じでやれば?
もちろん間歇的になるけど
それと両アンカーでやっても違うってこと?
どうしたいのか分かんね

134:デフォルトの名無しさん
10/10/04 14:18:28
>>132
まぁ自動計算はしてくれないと・・・
.Netと言えどもなんでもあるわけじゃないんですねw

135:デフォルトの名無しさん
10/10/04 14:22:52
macなら自由に拡大できるのにね

136:デフォルトの名無しさん
10/10/04 14:24:23
>>133
アンカーって余白の設定ですよね?
相対的に大きくしたいので、余白が絶対的に設定されるだけなので今回やりたいこととは違うんですよ。

要はフォームサイズが大きくなった分、全てのコントロールを相対的に大きくしたいのです。

137:デフォルトの名無しさん
10/10/04 14:27:07
エロいな

138:デフォルトの名無しさん
10/10/04 14:32:19
>>135
マックうらやましいれす(^q^)
.NETは透過もままならないですからねorz

139:デフォルトの名無しさん
10/10/04 14:32:53
>>136
だから両アンカーにすればいいと言ってるのだが…
アンカー勘違いしてないか?
余白はpaddingだぞ?

140:デフォルトの名無しさん
10/10/04 14:42:12
それとラベルのautosizeがtrueだったってオチじゃないよね?

141:デフォルトの名無しさん
10/10/04 14:47:33
>>139
いやいやいや、ちゃんと読めよ。どう見てもそれじゃ不足でしょうに
クライアント領域の幅をW、コントロールの幅をwとすると、136がやりたいのは W/w=const で、139だと W-w=const

で、答えはテーブルレイアウト。フォントは知らん

142:デフォルトの名無しさん
10/10/04 14:51:16
>>139
両アンカーにしても画像部分しか拡大されないんですが・・・もちろんラベルはautosizeをfalseにしてます

>>140
autosizeはfalseにしてもanchorで両端にくっつけるとラベルだけ大きくなって、フォントまでは大きくならないんです。

>>141
テーブルレイアウト・・・ググってみます!

143:デフォルトの名無しさん
10/10/04 14:51:47
>>141
アホか
両アンカーと何度も書いとろうが

144:デフォルトの名無しさん
10/10/04 14:58:31
>>142
だからラベルサイズは自動可変するから後はsizechangegedイベントで
フォントを変更すればいいという話

もちろんコントロールによってはアンカーだけではうまくサイズ変更
されないものもあるけど(CheckBoxとかRadioButtonとか)

145:デフォルトの名無しさん
10/10/04 14:59:39
SizeChangedね

146:デフォルトの名無しさん
10/10/04 15:00:19
anchorすげー
初めて知った

147:デフォルトの名無しさん
10/10/04 15:11:09
一枚絵を画面サイズにストレッチしたみたいな表示にしたいってことだよね

画面全部まとめて1枚絵にしちゃえば?w


148:デフォルトの名無しさん
10/10/04 15:13:13
>>147
要はそういうことです。
> 画面全部まとめて1枚絵にしちゃえば?w
それも考えたんですがちょっと無理やりすぎるのでw
他に自分の知らない方法があるのではと思って相談したまでです。

149:デフォルトの名無しさん
10/10/04 15:13:40
>>147
textboxどーすんの?って話になるw

150:デフォルトの名無しさん
10/10/04 15:14:16
前後逆になった

>>144
それならいけるかもしれませんね。
ちょっと試してみます

151:デフォルトの名無しさん
10/10/04 15:14:56
>>149
今回に関してもラベルとグラフコントロールとピクチャボックスくらいなんで大丈夫ですw

152:デフォルトの名無しさん
10/10/04 15:18:09
>>149
それも絵として描画するんだよ、縦横比も自由自在だぜ

153:デフォルトの名無しさん
10/10/04 15:19:37
>>152
あ、すまん、textboxは、たしかに面倒だw

154:デフォルトの名無しさん
10/10/04 17:59:32
いちいちコメントにレスつけて自分の意見を主張している様子から察するに、
手を動かして、実際に何かを学ぼうと思っていないだろう。
2chで適当な返答返しながら、どんぴしゃな答え、誰かがコード書いて貼ってくれるの待ってるんでしょ。

2chに来る割合をもう少し減らして、開発に時間割けば?

155:デフォルトの名無しさん
10/10/04 18:03:40
154は忘れて

156:デフォルトの名無しさん
10/10/04 18:03:56
また訳分からん因縁つける奴が
少なくとも言われたことは試してると思うが?

157:デフォルトの名無しさん
10/10/04 18:04:46
156も忘れて(^^;

158:デフォルトの名無しさん
10/10/04 20:15:26
既に誰か指摘してると思うけど、そもそもウィンドウの全ての要素の大きさを
クライアント領域のサイズに比例させる必然性が何もないし、苦労してやっても
気持ちの悪いUIになるだけだよなあ。

昔のネオジオの格闘ゲームじゃないんだからさあ。

VS2010のエディタ部分なんかデバッグ時微妙にフォントサイズが変わるけど、
あれってちょっと気持ち悪いでしょ?

159:デフォルトの名無しさん
10/10/04 21:31:21
こんなコード書いて、
やるで
おわったで
と出力されるにもかかわらずディレクトリが出来ません
どうやって調査すれば良いのでしょうか

System.Console.WriteLine("やるで")
Try
System.IO.Directory.CreateDirectory("d:\temp\トップ")
Catch ex As Exception
System.Console.WriteLine(ex.ToString())
System.Console.WriteLine("いきなりディレクトリつくれんです")
End Try
System.Console.WriteLine("おわったで")

160:159
10/10/04 21:45:33
自己解決。ウィンドウが更新されてなかっただけでした
別プロジェクトでコードを作り直しても同じ結果になり悩んでたんですが
ウィンドウを閉じて再度表示させると治りました

エクスプローラのwindowが更新されないとか、
今まで経験したことがなかったのでちょっと驚き
ウィンドウを再表示後は、上の減少は再現しなくなりました・・

161:デフォルトの名無しさん
10/10/05 14:10:02
URLリンク(ideone.com)

のようなコードで
1秒間にどれだけ処理(ループ)できるか書いているのですが
妥当ですかね?

162:デフォルトの名無しさん
10/10/05 14:59:05
何を測りたいのかはっきりさせてくれ
そのコードだと、ループ内で行ってる処理の中ではたぶん
Console.WriteLineが一番重いので、Console.WriteLineの処理時間を計測してるだけ。
測りたい処理よりもコストのかかる処理をループ内に入れてしまうと何の意味もなくなる。
文字列連結や文字列比較の速度を調べたいのでなければ、
同じ理由で文字列の操作も避ける。GC.Collectも同様。
パフォーマンス計測にはStopwatchクラスを使う。
ループ開始前にStartして終了後にStop。最後に経過時間を出力。
一秒間にどれだけ処理できるか調べたいんだったら最後に一秒当たりに換算すればいい。

163:デフォルトの名無しさん
10/10/05 15:26:36
>>162
そのものズバリ Stopwatch クラスですかありがとうございます。

何を計りたいかですが…
1~15桁の文字列(パス)の生成に掛かる時間を、
調べたいと思っています。

164:デフォルトの名無しさん
10/10/05 21:26:04
一文字づつ文字列を連結するのは典型的な非効率糞コード
StringBuilderを使う

165:デフォルトの名無しさん
10/10/05 23:58:01
HttpWebRequestとHttpWebResponseで末尾が.のURLリクエストしてるのに
実際は末尾の.がないURLに代わってリクエストされるんだけど
対処法おしえてください

166:デフォルトの名無しさん
10/10/06 00:40:09
URLリンク(connect.microsoft.com)
現状、TcpClientとかSocketとか使うしかないんじゃないかな

167:デフォルトの名無しさん
10/10/06 22:22:47
CrLf区切りのテキストファイルから
何行目と指定してテキストを取り出したり、
同じように指定してその部分を置き換えたりしたいのですが、
できるとしたらどんな方法で出来るでしょうか?

168:デフォルトの名無しさん
10/10/06 22:32:28
簡単なのはFile.ReadAllLines
ファイルの行を置き換えたかったら全部消して書き直せばいい

169:デフォルトの名無しさん
10/10/06 23:03:49
レスありがとうございます。
行数が多くて一行あたりの処理が簡単なため一気に何千行の処理を行うことになるのですが
そうなると1行ごとに全部を書き換えるというのは避けた方が良いですよね?
変数に読み込んで処理すれば良いのですが、メモリの占有が大きくなるのと
プログラムが予期しない終了の仕方をした時にせっかく途中まで処理したものが
どこにも記録が残っていないという状態になってしまうので、
ファイルをピンポイントで修正していきたいと思ったのですがそういうアクセスはあまり一般的ではないでしょうか?

170:デフォルトの名無しさん
10/10/06 23:12:24
>行数が多くて一行あたりの処理が簡単なため一気に何千行の処理を行うことになるのですが
これ、他人が読んで意味が通じると思う?

171:デフォルトの名無しさん
10/10/06 23:26:35
高々何千行程度のテキスト読み込んでおくのにどんぐらいのメモリ食うと思ってんだ?

172:デフォルトの名無しさん
10/10/07 04:43:55
9Gくらい?

173:デフォルトの名無しさん
10/10/07 04:49:23
1 行につき 1 MB 使えば 1000 行で 1 GB だから、だいたいそのくらい・・・
ってばかあっー!


174:デフォルトの名無しさん
10/10/07 07:49:52
>>169
>ファイルをピンポイントで修正していきたいと思ったのですが
>そういうアクセスはあまり一般的ではないでしょうか?
一般的うんぬん以前に、ファイルの任意の位置にデータを挿入する事は出来ないので無理。
元々の一行の長さと、書き込もうとする一行の長さが同じなら、その場所だけ上書きすればよい。

一気に何千行も書きかえるなら、一行ずつランダムアクセスするとかえって遅くなるかもよ。


175:デフォルトの名無しさん
10/10/07 15:16:12
いったん別の一時ファイルに書き出せばいいんじゃね
StreamReaderで一行ずつ読みながらStreamWriterで平行して書き出せばいい

176:デフォルトの名無しさん
10/10/07 15:53:02
本当に困っています。
OKWaveのほうにも質問していますが、TransparencyKeyでフォーム中身を透過させて、そのフォームを最大化、そしてまた元のサイズに戻すなど、
一定のサイズ変更操作をすると、フォームのタイトルバーなどがつかめなくなってしまいます。
サイズ変更もできなくなります。
本当に困っています。何か回避方法などをご存じの方がいましたら教えてください。お願いします。
URLリンク(okwave.jp)

(マルチみたいで申し訳ないです)

177:デフォルトの名無しさん
10/10/07 17:59:50
とりあえずそのソースうpして

178:デフォルトの名無しさん
10/10/07 18:06:11
みたいってマルチそのものでしょw

179:176
10/10/07 18:24:20
>>177
ソースも何も、フォームデザイナで、BackColoerとTransparencyKeyを同一にしただけです。
他の設定は一切いじらずとも、百発百中でなります、
VS2008でも、VB2010 Expressでも。

180:176
10/10/07 19:03:33
URLリンク(www.youtube.com)
こんな感じです。
最大化したっきり、上にあるフォームのタイトルバーがつかめない・・・。

181:デフォルトの名無しさん
10/10/07 20:04:57
うちは問題ないなー

182:デフォルトの名無しさん
10/10/07 20:19:18
自分で使うわけじゃないので、環境依存ならいいんですけどね。。。
ちなみにWinXPじゃ問題は起きません。Vista以降で、aero有効時にのみ起きるようです。

183:デフォルトの名無しさん
10/10/07 20:21:50
うちはVistaSP2だけど問題ないなー

184:デフォルトの名無しさん
10/10/07 20:58:57
ディスプレイドライバの相性とか

185:デフォルトの名無しさん
10/10/07 21:12:23
自分のフォームだけaeroオフで起動とかできないですか?
aeroがなければ上手くいくのになぁ。。。

186:デフォルトの名無しさん
10/10/07 21:25:35
>>185
プロジェクトのプロパティニXPの視覚効果の有効、無効の設定があったと思うけどそれじゃだめ?
うちはvista無いから試せん


187:デフォルトの名無しさん
10/10/07 21:28:25
>>186
そのチェック外しても、なんにも変わりませんでした。。。

188:デフォルトの名無しさん
10/10/07 21:32:13
うちでも再現したよ。
でも下記のコードにしたら固まらなくなったよ
private void Form1_Load(object sender, EventArgs e)
{
//大きさを適当に変更
this.Size = new Size(300, 300);
Bitmap bmp = new Bitmap(1, 1);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.WhiteSmoke, g.VisibleClipBounds);

//透明にする色
Color transColor = bmp.GetPixel(0, 0);
//画像を透明にする
bmp.MakeTransparent(transColor);
//背景画像を指定する
this.BackgroundImage = bmp;
//背景色を指定する
this.BackColor = transColor;
//透明を指定する
this.TransparencyKey = transColor;

this.TopMost = true;

}


189:デフォルトの名無しさん
10/10/07 21:33:20
タイトルバーはつかめるがウィンドウ境界が透明扱いになってるな
OnSizeChangedで前回のWindowStateと違ってればRecreateHandleとか乱暴なことでもする?

190:デフォルトの名無しさん
10/10/07 21:57:55
>>189
タイトルバーも境界もどっちも掴めません。。。

>>188
つまり画像を挟むってことですかね?
いまdsiから書き込んでるので、明日VB的文法に翻訳してみたいとおもいます。

191:デフォルトの名無しさん
10/10/07 22:58:27
得意気にC#でw

192:デフォルトの名無しさん
10/10/07 23:30:45
C#にコンプレックス持ってんのかw
仕事はVB.NETで趣味アプリはC#でやってて
今、家だからPCにはC#しか入ってないんだよw

193:デフォルトの名無しさん
10/10/08 05:47:58
バカ?
ここは何スレだっつの

194:デフォルトの名無しさん
10/10/08 11:59:10
じゃあ、わざわざC#スレでレスしろってかw
めんどいだろJK


195:デフォルトの名無しさん
10/10/08 13:45:25
質問です。
VB2010でVBの勉強をしているのですが、
ボタンを押すことによってテキストボックスに入力されている文字をテキストファイルに出力したいのですが
以下のコードではうまくいきません

Dim Writer As New IO.StreamWriter("C:\vb.txt")
Writer.WriteLine(TextBox1.Text)

Writer.Close()

デバッグしてもエラーは出ないし、ボタンを押しても何も起きない状況です
どなたかご教示お願いします


196:デフォルトの名無しさん
10/10/08 14:02:16
2010は知らないけど
URLリンク(dobon.net)
じゃだめなの?

197:デフォルトの名無しさん
10/10/08 14:21:48
>>188
だめです。
GUIデザイナのプロパティからTranceparecyなどの設定を削除して、フォームリロード時にお示しのコードを実行するようにしましたが、
やはりタイトルバーなどがつかめない状態になりました・・・。

198:デフォルトの名無しさん
10/10/08 14:29:13
>>197
>>189じゃダメ?

199:デフォルトの名無しさん
10/10/08 14:41:21
>>198
>>189をやると、正常になりますが、最大化したときだけじゃなく、
普通にサイズ変更しただけでもなる場合があるので、いくらかは問題は軽減しますが、全解決とはなりません・・・。

200:デフォルトの名無しさん
10/10/08 14:43:48
resizeendイベントでもやればいいんじゃないの?

201:デフォルトの名無しさん
10/10/08 14:44:46
なるほど。。。
瞬間にチカチカするのは代償と考えてあきらめるしかないですかね。

202:デフォルトの名無しさん
10/10/08 14:46:51
フォームが透明になるだけでもありがたく思わないと

203:デフォルトの名無しさん
10/10/08 14:49:13
でもまぁ、そうですけど、何も問題がない人との違いは何なのかと・・・。
まぁ、設定で、おかしくなる人ようの設定かなんかをもうけてもいいですし、その辺は臨機応変にやろうと思います。

204:デフォルトの名無しさん
10/10/08 14:50:17
問題ないって書いたのは全部俺だけど
全部うそだよw

205:デフォルトの名無しさん
10/10/08 14:50:35
>>195
ファイル名にコロンや垂直タブって無理じゃね?

206:デフォルトの名無しさん
10/10/08 14:51:31
>>196さん
これでできました。ありがとうございました!

207:デフォルトの名無しさん
10/10/08 14:57:08
>>204も嘘かもしれないので、信じないとしても、
何とか例の現象は解決(?)いたしました。
リサイズができなくなったときのために一応つけておいたステータスバーも取り払うことができ、
当初意図していたとおりのソフトができそうです。
皆様、アドバイス等ありがとうございました。

208:デフォルトの名無しさん
10/10/09 23:22:31
For i As Integer = 1 To 100
Next

の中でiを1から100の間で戻したり進めたりするのは何も問題ないでしょうか?

209:デフォルトの名無しさん
10/10/09 23:25:12
気になるんだったら別の書き方すればいいのに

210:デフォルトの名無しさん
10/10/09 23:49:26
問題ないけどそういう使いかたするならあえてfor nextを
使わないのがいいと思う

211:デフォルトの名無しさん
10/10/10 22:41:57
>>209-210
トンクス

212:デフォルトの名無しさん
10/10/14 11:32:35
宇宙語を話す皆さんに質問です
プログラミング用語の『スロー』ってどういう意味?(”投げる”とか答える人はまだ地球人)

なんか、こう、イメージの掴める解説ってないのかね

213:デフォルトの名無しさん
10/10/14 12:34:30
マルチ乙

214:デフォルトの名無しさん
10/10/14 13:07:36
異常系世界へgotoするってこと
その際のスペースカプセルが例外

215:デフォルトの名無しさん
10/10/14 15:43:35
linux上でunixを使いCUIの環境で、日の丸の国旗の画像を作るプログラミング、教えてください

216:デフォルトの名無しさん
10/10/14 16:20:31
スレチ

217:デフォルトの名無しさん
10/10/14 22:36:51
URLリンク(www.mediafire.com)

↑こんな感じでどう?
即席で作ってみたけど

218:デフォルトの名無しさん
10/10/15 01:19:03
プリンタドライバをインストールしたいのですが、「プリンタ名が無効です」と表示されて上手くいきません。
どこがまずいかご教授お願いします。

必要なファイルは事前に C:\Windows\system32\spool\DRIVERS\W32X86 にコピー済みで、
ファイルをフルパスで指定しても同じ結果になります。

Public Shared Function DriverInstall(ByVal strDriverName As String) As Boolean
Dim di As New DRIVER_INFO_3
With di
.cVersion = 3
.pConfigFile = "ps5ui.dll"
.pDataFile = strDriverName & ".ppd"
.pDependentFiles = "pscript.ntf" & vbNullChar _
& "pscript.hlp" & vbNullChar _
& "ps5ui.dll" & vbNullChar _
& strDriverName & ".ppd" & vbNullChar _
& "pscript5.dll"
.pDriverPath = "pscript5.dll"
.pEnvironment = "Windows NT x86"
.pHelpFile = "pscript5.hlp"
.pMonitorName = String.Empty
.pName = strDriverName
.pDefaultDataType = "RAW"
End With

If AddPrinterDriver(String.Empty, 3, di) = 0 Then
Dim ExcptWin32 As New Win32Exception(Marshal.GetLastWin32Error())
MessageBox.Show(ExcptWin32.Message, "Win32Err", MessageBoxButtons.OK)
Return False
End If
Return True
End Function

219:デフォルトの名無しさん
10/10/15 01:26:27
一応、APIの宣言部分も貼っておきます。
AddPrinterDriverW を AddPrinterDriverA に変えると、エラーメッセージは「パラメータが間違っています」になります。

Private Declare Function AddPrinterDriver Lib "winspool.drv" Alias "AddPrinterDriverW" _
(ByVal pName As String, _
ByVal Level As Integer, _
ByRef pDriverInfo As DRIVER_INFO_3) As Integer

Public Structure DRIVER_INFO_3
Public cVersion As Long
Public pName As String
Public pEnvironment As String
Public pDriverPath As String
Public pDataFile As String
Public pConfigFile As String
Public pHelpFile As String
Public pDependentFiles As String
Public pMonitorName As String
Public pDefaultDataType As String
End Structure

220:デフォルトの名無しさん
10/10/17 00:05:45
あげとく

221:デフォルトの名無しさん
10/10/20 16:20:40
じゃ、俺は下げとく。

222:デフォルトの名無しさん
10/10/21 01:16:55
C#だと拡張メソッドでenumを拡張できるけど、VBはできるん?

223:デフォルトの名無しさん
10/10/21 11:05:07
VBでは拡張メソッド専用の構文を準備していないため次のように属性を直接指定する。
Imports System.Runtime.CompilerServices
Module StringExtensions
    <Extension()> _
    Public Sub Print(ByVal aString As String)
        Console.WriteLine(aString)
    End Sub
End Module

同じ要領でenumでも出来るはず、やってみて。

224:デフォルトの名無しさん
10/10/21 23:34:28
>>223
なるほど、試してみる

225:デフォルトの名無しさん
10/10/26 20:28:20
DLL改ざん出来ないように厳密名付けたんだけど、
この場合バージョン管理ももれなく付いてくるの?
アセンブリバージョン上げたら呼び出し側でエラーが出るんだけど…
対処法としてはバージョン固定にするか、GACに登録してバージョンリダイレクトさせるかって事でOK?

226:デフォルトの名無しさん
10/10/26 21:57:25
基本的には厳密名つける=バージョン管理を行う。

>対処法としてはバージョン固定にするか、GACに登録してバージョンリダイレクトさせるかって事でOK?
もしくはconfigファイルでバージョンリダイレクト。
もしくは全ビルド。


227:デフォルトの名無しさん
10/10/26 21:58:25
>DLL改ざん出来ないように厳密名付けたんだけど、
実はあんまり意味ないよね。


228:デフォルトの名無しさん
10/10/27 00:18:19
>もしくはconfigファイルでバージョンリダイレクト。
これは"呼び出し側exe.config"にバージョンポリシーを記述して配置するイメージですよね?

>実はあんまり意味ないよね。
えw

229:デフォルトの名無しさん
10/10/27 18:23:08
すみません、初歩的で申し訳無いのですが
横2列のcsvを二次配列に入れるプログラムが作れません。

field()でテキストをReadlineして
field-Aに二次配列で入れるループを書いてます。
untilのループ内に変数Xを利用すると下記のエラーが出ます
「Exception.InnerException を参照してください。エラー: オブジェクト参照がオブジェクト インスタンスに設定されていません。」

Dim field() As String
Dim field-A(,) As String
Dim reader As New System.IO.StreamReader("field.csv", System.Text.Encoding.Default)
Dim X As Integer

X = 0

Do Until reader.EndOfStream

line = reader.ReadLine()
field = line.Split(",")

field-A = Nothing
field-A(X, 0) = field(0)
field-A(X, 1) = field(1)

X = X + 1

Loop

csvの中身
フィールドA-01,フィールドB-01
フィールドA-02,フィールドB-02
フィールドA-03,フィールドB-03

230:デフォルトの名無しさん
10/10/27 18:25:30
field-A(X,0)の行でどうもエラーが出るようです。

・他にもっと簡単な方法があると思うが浮かばない
・変数Xのuntil内での使い方がおかしいorスコープがおかしいが、原因がわからない
(UNTIL内でX=0とするとエラーが起きないんですがループでリセットするわけにはいかない)

上記2点、わかる方いらっしゃいますでしょうか?
宜しくお願いします。

231:デフォルトの名無しさん
10/10/27 19:05:03
>>230
>field-A(X,0)の行でどうもエラーが出るようです。
field-Aを使用する前(Do Loopの前)にあらかじめ2次元配列を作成する
field-A = New String(2, 1) {}

>他にもっと簡単な方法
2次元配列使わないでいいのならListとか使ったほうが楽

>変数Xのuntil内での使い方がおかしいorスコープがおかしい
どうおかしいのか分からない

232:デフォルトの名無しさん
10/10/27 19:10:21
>>231
オブジェクト参照がオブジェクト インスタンスに設定されていません。

というエラーが出てフォームも立ち上がらない状態です。
untilの外側で宣言したXがインスタンスオブジェクトと認識されてるとかなんとか

そこまでしか情報がわかりませんでした。
Nothingで解決かと思ったら解決せず。

233:デフォルトの名無しさん
10/10/27 20:33:20
配列っていうのは事前にメモリを確保してから使うんだよ?
確保するコードを追加しよう。

だけど、行数わかる?ファイル読み込まないと分からないよな?
つまりこの処理に配列は合わない。
随時メモリを拡張してくれるListの方が適切

234:デフォルトの名無しさん
10/10/27 21:14:07
太古の時代では一行目にデータ数書いたりしてたな

235:デフォルトの名無しさん
10/10/27 21:22:19
>>実はあんまり意味ないよね。
>えw
あんまり役に立つ場面てないよね、に言いかえよう。


236:デフォルトの名無しさん
10/10/27 21:43:46
>>233
ありがとうございます!
配列の最大数を宣言しないとだめなんですね。

Dim field-A(10,2) As String

と数値を入れて宣言したら思い通り動作しました。
それからListが良いということですので使ってみます。

全て解決です。皆さんありがとうございました。

237:デフォルトの名無しさん
10/10/28 01:54:46
>>233-234
配列が向かないのはまあ同意するが
たまには ReDim Preserve の事も...いや、思い出さなくてもいいか

238:デフォルトの名無しさん
10/10/28 08:22:50
>>237
msdnによると
URLリンク(msdn.microsoft.com)(VS.80).aspx
>Preserve を使った初期化。Preserve 修飾子を指定した場合、Visual Basic では、
>既存の配列から新しい配列に要素がコピーされます。
とあるから、結局はコピー、つまり遅いんでしょ?


239:デフォルトの名無しさん
10/10/28 10:38:43
一要素ずつ拡張してたら糞遅いわな
List(Of T)は容量があふれるたびに内部の配列のサイズが2倍になる
同じことを自分でやってもいいけど時間の無駄

240:デフォルトの名無しさん
10/10/28 12:49:22
拡張と見せかけた再割り当てってのが嫌なんだよ。
VB6では桁違いに速い。

241:デフォルトの名無しさん
10/10/28 19:46:52
いや再割り当てはどっちみち必要だろ
VB6は内部でListみたいなことをやってるだけ

242:デフォルトの名無しさん
10/10/28 20:48:49
そうなの?
実はその辺自信無くて試したんだけど、10倍ぐらい違ったからそうだろって…


243:デフォルトの名無しさん
10/10/28 20:52:08
>>239-240
なんか物凄く馬鹿っぽいご意見ですいこと....

244:デフォルトの名無しさん
10/10/28 21:09:43
>>239は間違ってないよ
List(Of T)は再割り当て時には現在の倍の容量を確保して新しい領域に現在の要素をすべてコピーする
要素が追加されるたびに再割り当てというような馬鹿なことはしない

245:デフォルトの名無しさん
10/10/28 22:17:26
一般的なListの伝統ですな

246:242
10/10/28 23:27:06
もう一度やってみたら、
確かに要素数の増加に伴って拡張に必要な時間が増えますね・・・

にしても.net遅すぎる気が・・・
.netはinteger、VBA(VBが手元に無い為)はlongの一次元配列で、
要素数を0から350000まで1づつ増やすコードをそれぞれで実行した結果、
書くのも恥ずかしいぐらいの差がついちゃいました。

コード間違えたかなぁ・・・

247:デフォルトの名無しさん
10/10/28 23:45:54
.NETでは確実に額面通りの動作をするから不自然なのはVBAの方だろう
ループの中でRedim Preserveしたりするバカが多いから変な最適化してるんじゃないの

248:デフォルトの名無しさん
10/10/30 00:48:22
たまたま空きが後ろにあればそのまま拡張できる実装になってるんじゃない?
.NETの場合はメモリ管理上確実に再確保とコピーが必要。


249:デフォルトの名無しさん
10/10/31 01:26:31
VB2010、.Net Framework4.0で、Byte型変数の値を、10進数に変換し、Integer型の
変数に代入したいと思っています

Dim BBB As Byte
Dim III As Integer

という宣言で、BBBに「10」と入っている時に、IIIにどうにかして「16」と、10進数に
変換した結果を代入させたいと思っているのですが、どうしたらよいのでしょう?

III = CInt(BBB)とかIII = ToInt16(BBB)とかやってみたのですが、うまくいかず…

ToInt16とかを実行するために、2バイトのバイト列とかにしないとダメなのでしょうか?

250:デフォルトの名無しさん
10/10/31 01:38:32
>>249
III=BBB

251:デフォルトの名無しさん
10/10/31 01:46:55
>>250
それは何度も試しててムリぽ…と思ってもう一度やってみたら、できました…

ありがとうございました

何でできないって思ったんだろ?
もう寝ます…

252:デフォルトの名無しさん
10/10/31 07:39:59
>>251
できなくね?
何か勘違いしてると思われ
16進数というのは16進数表記の事で、中身の数値じゃないよ。
5という数値を表す場合、"5"、"Ⅴ"、"五"、"○○○○○"、
といろいろあるが、そのひとつが16進数で、どれもStringで表現される。
III = Convert.ToInt32("10", 16)
が正解。
>III = CInt(BBB)とかIII = ToInt16(BBB)とかやってみたのですが、うまくいかず…
ToInt16の16は16bit整数型(Short)で16進数という意味は無いよ。

253:デフォルトの名無しさん
10/10/31 10:49:33
>>249
>10進数に変換し
人間が見えるように出力するときにやるもんだろ

>BBBに「10」と入っている時に
まずここは何進数で「10」のつもりなんだ?
BBBに値を代入したコードはどうなってるんだ

254:デフォルトの名無しさん
10/10/31 14:57:34
>>251で解決したって言ってるんだから
単にバイト変数の中身を整数変数に代入したかっただけの話だろ?



255:デフォルトの名無しさん
10/10/31 20:24:40
どうして、VB.NET ってあまり流行らないんですか?
どの案件みても、C++とかJavaとかC#とかPHPとか

256:デフォルトの名無しさん
10/10/31 20:28:42
C#でいいならVBをわざわざ選ぶ意味はないよ
どっちかというとVB6上がりでC触れないとかネガティブな理由で使う言語だからね

257:デフォルトの名無しさん
10/10/31 21:36:47
VB.netも楽しいけど、C#の方が強力だし、VBの文法って汚いし…
やたら融通の効く所はいいと思うんだけど。

258:デフォルトの名無しさん
10/10/31 22:45:44
>>255
Microsoft的には非IT系のGeekなプロフェッショナル向けの言語。
要は会計士とか医師でプログラミングもしちゃうぜ的な人向け。

259:デフォルトの名無しさん
10/10/31 22:52:28
いつの時代のVBのコンセプトだよそれ。

260:デフォルトの名無しさん
10/10/31 22:57:06
システム部門が独立してできたようなところだとVBが主戦力多いよ
往々に.net移行が遅れてたりする

261:デフォルトの名無しさん
10/10/31 23:08:41
非情報系の人にはC系は難しいからVBっていうのはもう古いよ。
実際JavaやC#ならVBと変わらん。MSの囲い込みイメージ戦略に騙されてるだけ。

262:デフォルトの名無しさん
10/11/03 17:01:16
ASP.NETを使うことになったのですが、おすすめの本などありましたら教えてください

263:デフォルトの名無しさん
10/11/04 00:28:54
>>262
スレリンク(tech板:137番)

264:デフォルトの名無しさん
10/11/04 03:23:01
マルチごめんなさい。
急にプログラマーに仕事が決まり、ASP.NETが必要になったのですが、
適当なスレがなかったようなのでマルチになってしまいました。
謝罪をさせていただいた上でまた質問させてください。
みなさんはASP.NETの勉強はどうしてるんですか?
おしえてください。使ってない人もいるかもしれませんが・・

265:デフォルトの名無しさん
10/11/04 11:05:31
ASP.NETなんて勉強しなくても使えるからなぁ。

266:デフォルトの名無しさん
10/11/04 11:06:54
RequestオブジェクトとResponseオブジェクトがあれば
なんでもできるし。

267:デフォルトの名無しさん
10/11/04 13:30:28
プログラムできない奴はプログラマとしての仕事をするな
時間と金の無駄だ

268:デフォルトの名無しさん
10/11/04 13:56:28
誰にでもできる簡単な仕事です。

269:デフォルトの名無しさん
10/11/04 16:22:03
文系理系関係ありません
ただ学歴高い方が発注元に単金を高く請求できるので

270:デフォルトの名無しさん
10/11/04 16:48:57
高卒でプログラマやってます

271:デフォルトの名無しさん
10/11/04 17:20:45
その場合は資格をいっぱい取ればおk

272:デフォルトの名無しさん
10/11/04 18:17:44
オラクルマスターを取りなさい

273:デフォルトの名無しさん
10/11/04 18:27:34
テクデとテクネなら持ってます。

274:デフォルトの名無しさん
10/11/04 20:51:45
知恵袋でも質問したけど回答がつかなのでここでも聞かせてください


自分のサイトを読み込んでリンクさせるてリンクをクリックすると規定のブラウザで開く方法ってありますか?
要はリファラを残したい。。。

275:デフォルトの名無しさん
10/11/04 21:00:44
日本語でおk

276:デフォルトの名無しさん
10/11/04 21:04:49
リファラを残す方法はありますか?

277:デフォルトの名無しさん
10/11/04 21:10:54
リファラが何かわかっているのかい?
HTTPヘッダだよ
それがわかればどうとでもできることがわかるよ

278:デフォルトの名無しさん
10/11/04 21:32:25
リンク元のページのことじゃないの??





279:デフォルトの名無しさん
10/11/05 11:19:49
環境はVB.NET 2008 Express Edition + Windows XPです。
Visual Studioエディタ内で子ウインドウをキーボードで切り替えるとき、
Ctrl+Tabキーで一覧が表示されますが、ここで
Enterキーまたはマウスでクリックしなくても切り替えられますか?

280:デフォルトの名無しさん
10/11/05 19:45:34
スペースキーでもOK(たぶん)
念力でもOK(エスパーなら)
っていうか、何が聞きたいんだ

281:デフォルトの名無しさん
10/11/05 20:50:48
質問です。
VisualStudio2003proとSqlserver2005developerを持っているのですが、
この組み合わせではADO.NET2.0の機能を使うことはできませんか?

282:test.vb
10/11/05 21:44:14
>>274

意味わからないけど
既定のブラウザでURLを開くだけなら
Process.Start("URLリンク(example.com)")

283:デフォルトの名無しさん
10/11/05 23:39:21
私はJAVAしかやったことなくて今度VBもやらないといけないことになったのですが、
今までは、オブジェクトというのは変数とメソッドが一緒になった固まりだと思ってました。
しかし、VBのサンプルコードを読むと、

Dim fm As Object

fm = 2.73

という構文が出てきたんですが、どうやらこれはVBでは間違っていないようなんです
fmをオブジェクト宣言したのなら、まずはそこからインスタンスを作って、さらに
インスタンスの変数。つまりfm.hensuu =2.73 みたいな形ならわかるのですが、
いきなりオブジェクトとして数値が宣言されて、いきなり数字が代入されるなんて・・
VBではオブジェクトの意味がJAVAと違うんでしょうか・・おしえてください

284:デフォルトの名無しさん
10/11/05 23:45:07
ほんとにJavaやってんの?
それJavaでもできるよ(Java5以降)。オートボクシングという。
.NETではボクシングは実行エンジン自体に組み込まれてて、Javaのオートボクシングよりももっと柔軟。

285:デフォルトの名無しさん
10/11/06 00:07:27
>>284
JAVAにもあるん・・・なんだかわからない・・
まずはインスタンス化しないと変数は代入できないんじゃなかったけ?
ましてオブジェクトは固有だから、変数がいくつあるかわからないし・・

286:デフォルトの名無しさん
10/11/06 00:12:25
>>283
VB(というか.net)にはobject型という型があるんだよもん

つーか入門書ぐらいけちらず買えよ
それかMSDN読むか
Javaと違ってMSDNの日本語化はわりと深い所までちゃんとされてるからいいぞ

287:デフォルトの名無しさん
10/11/06 00:13:58
Javaでもこう書ける
Object fm;
fm = 2.73;
2行目は省略形で書かれていて、省略せずに書けば次のようになる。
fm = Double.valueOf(2.73);
Double.valueOf(2.73)の処理はボクシングと呼ばれる。
.NETでもこれと同じような処理が自動的に行われている。
これでわかんないならVBと比べる以前にJavaを入門書からやり直すべき。

288:デフォルトの名無しさん
10/11/06 00:15:33
何が言いたいのかよーわからんけど、
Object型のインスタンスなんて、スレッドの同期オブジェクトが欲しいときぐらいしか作らないよw

289:デフォルトの名無しさん
10/11/06 00:31:43
普通は、intやdoubleなどの単一の値も、
全てオブジェクトとして扱うのがオブジェクト指向的には自然なんだよ
Javaは設計が古いのでそうなってないが.NETは実際に全部オブジェクトとして扱えるということ

290:デフォルトの名無しさん
10/11/06 00:36:52
javaもまともにできてたとは思えんな。

291:デフォルトの名無しさん
10/11/06 13:37:13
.net前のMSDNとかは、変な翻訳とかも混ざって非常に分かり難かったが
最近のは割とまともにローカライズされて見やすくなったよな
新しく使うクラスとかはとりあえずF1押して概要とかメンバーとか見るのが癖になってる

292:デフォルトの名無しさん
10/11/06 15:26:46
>>286
>>287
>>288
>>291
ありがご当皆さん・・勉強してみます・・・

293:デフォルトの名無しさん
10/11/07 01:58:54
・注文テーブル
注文番号(PK) 都道府県コード 市区町村コード 以下、注文日時とか商品IDとか諸々

・都道府県マスター
都道府県コード(PK) 都道府県名

・市区町村マスター
都道府県コード(PK1) 市区町村コード(PK2) 市区町村名

とこんなテーブルがあったとして、DataGridViewにBindingSourceを設定して、都道府県を
表示させるまでは良いのですが、市区町村に複合キーを投げる方法が分からず。
仕方がないのでテーブルアダプタにWHERE 都道府県コード=@都道府県コードみたいなメソッドを用意して、
データテーブルを取得するようにコードを書いたのですが、もっとスマートなやり方ってないもんですか?





294:デフォルトの名無しさん
10/11/09 00:22:51
javascriptを含むhtmlのソースをダウンロードして表示したいです。
URLリンク(dobon.net)
ここの方法でダウンロードは出来たのですが、javascriptがソースコードのままになってしまいます。
javascriptによってhtmlが生成された後のhtmlをダウンロードするにはどうすればいいでしょうか?

295:デフォルトの名無しさん
10/11/09 01:57:19
またドボン!か・・・。
いい加減、ドボンはもういいよ。

俺なんか、7年前に買ったものを大事に使うあまり、
流行から取り残されていってるんだぞ?
7年以上も続けているドボンを見てるとイライラしてくる。
そろそろ身を引いたらどうなのよ、って。

ドボンはアーカイブ(過去ログ)だけ残して、
後は若い奴らに譲ろうぜ?
若い奴らに新しいVBサイトを構築させていこうぜ。


296:デフォルトの名無しさん
10/11/09 07:15:46
そうは言っても若い奴らが好き好んでVBなんか使うと思うか?

297:デフォルトの名無しさん
10/11/09 09:04:25
こんにちは。スレチでこちらに飛んできました。

ディスプレイが省電力モードに移行をしたかを知るために、下記のように作ってみました。

<System.Runtime.InteropServices.DllImport("user32.dll")> Shared Function MonitorFromPoint(ByVal x As Integer, ByVal y As Integer, ByVal dwFlags As Integer) As IntPtr
End Function

<System.Runtime.InteropServices.DllImport("kernel32.dll")> Shared Function GetDevicePowerState(ByVal hDevice As IntPtr, ByVal pfOn As Integer) As Integer
End Function

Public Shared Sub PowerState()

Dim hWnd As IntPtr
Dim Ret As Integer
Dim Pw As Integer

hWnd = MonitorFromPoint(&H0, &H0, &H2)
Ret = GetDevicePowerState(hWnd, Pw)

MsgBox(Pw)

End Sub

こんな感じにやりましたが、ダメでした。
そもそも、ハンドルが取得できない。

何かよい方法はないでしょうか??


298:デフォルトの名無しさん
10/11/09 10:30:53
MonitorFromPointの引数は2つになってるね。
URLリンク(msdn.microsoft.com)


299:デフォルトの名無しさん
10/11/09 11:40:35
>>294
そんなの無理じゃね?

300:デフォルトの名無しさん
10/11/09 11:54:15
>>294
javascriptのdocument.writeなどで書き出すhtmlを展開したいと言ってるの?
WebBrowserコントロールにいったん読み込んで、
それのdomから取得すればできるかもしれないな。

301:デフォルトの名無しさん
10/11/11 10:28:36
データベース接続で質問です。

こんなやり方と
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "接続文字列";

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sqlStr;

こっちのやりかた
何が違うのでしょうか。

SqlConnection conn = new SqlConnection("接続文字列");

SqlCommand cmd = conn.CreateCommand();
cmd.CommandText =sqlStr;



302:301
10/11/11 10:31:21
>>301 なぜこんな質問したかというと、
efreedom.com/Question/1-442465/InvalidOperationException-Executing-SqlCommand-Transaction
にスレッド処理でエラーが発生したんだよって報告があったので。


303:デフォルトの名無しさん
10/11/11 11:50:46
同じです。

304:デフォルトの名無しさん
10/11/13 09:22:42
しょぼいPCで開発してる奴は死ね

305:デフォルトの名無しさん
10/11/13 21:58:19
LabelのBorderColorを変更出来るようにする
初歩的なことですみません。
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim aPen As New Pen(m_BorderColor, 1)
Dim aRect As Rectangle() = {New Rectangle(0, 0, Width - 1, Height - 1)}
e.Graphics.DrawRectangles(m_Pen, m_Rect)
MyBase.OnPaint(e)
End Sub

見た目には実装されているのですが、BorderStyleとは無関係に四角を描いてるだけです。
本来のBorderStyleを拡張するにはどうしたら良いのでしょうか?


306:デフォルトの名無しさん
10/11/13 22:46:29
BorderStyleをNoneにする

307:デフォルトの名無しさん
10/11/13 23:38:53
NoneにしてPaddingを全部1とかにするのがやっぱり簡単ですかね

308:デフォルトの名無しさん
10/11/13 23:44:18
「本来のBorderStyleを拡張」ってどういう意味なんだ。

小学生じゃないんだから相手にエスパー能力を期待しているとしか思えないような
質問するなよと。

309:デフォルトの名無しさん
10/11/14 00:13:24
>>305
ControlPaint.DrawBorder/DrawBorder3D

310:デフォルトの名無しさん
10/11/15 01:35:26
Part20にあった質問なんだけど、この答えを知りたいです。

BindingSourceとTextBoxをバインドしています。
BindingSourceのカレントレコードが変更される際に入力をチェックして、
入力のキャンセルや、レコード移動のキャンセルを行いたいのですが、
どうしたらいいでしょうか。

PositionChangedやCurrentChangedイベントで出来るかと思ったのですが、
これらは移動後に発生するみたいですし。

よろしくお願いします。

311:デフォルトの名無しさん
10/11/15 13:19:24
ハゲ以外で。

312:デフォルトの名無しさん
10/11/15 22:51:39
>入力のキャンセルや、レコード移動のキャンセル

意味が分からん


313:デフォルトの名無しさん
10/11/15 23:13:58
Gridのセル編集を開始したら保存ボタンを押すまで他の行の編集が出来ないようにしたいって話なんだけど…

314:デフォルトの名無しさん
10/11/16 00:25:02
自己解決しました
URLリンク(www.eggheadcafe.com)

315:デフォルトの名無しさん
10/11/17 02:34:48
ユーザコントロールをコンボボックス風にドロップダウンで表示させたいんですが、やり方が全く分かりません。
どなたか参考になりそうな日本語サイトをご存じないですか?

316:デフォルトの名無しさん
10/11/17 09:06:22
そういうのはWPFだろ
WPFで作ったコンボをVBに読み込むとか。
正攻法は大変だと思う

317:デフォルトの名無しさん
10/11/17 09:07:20
もうどうでもいいからリストボックスでも表示してやれよ


318:デフォルトの名無しさん
10/11/17 21:44:07
初心者スレに行くべきか悩んだんですが、型変換に関して
とあるAPIの関数を呼び出しているんですが

Public Declare Function ADC_SetConfig Lib "AIOUSB" Alias "VBADC_SetConfig" (ByVal DeviceIndex As UInteger, ByRef pConfigBuf As Byte, ByRef ConfigBufSize As UInteger ) As UInteger

これの第2引数、pConfigBuf。ヘルプには以下のような構造体が書かれていました。
' Config 構造体
<SerializableAttribute()> <ComVisibleAttribute(True)> _
Public Structure TUSBAI1616Config
Dim ChannelRange() As Byte
Public Sub Initialize()
ReDim ChannelRange(0 To &HF)
End Sub
Dim CalibMode As Byte
Dim TrigMode As Byte
Dim StartStopCH As Byte
Dim Oversample As Byte
End Structure

この構造体を第2引数のとおり、Byteとして渡したいんですがどう変換したらいいんでしょうか?
AllocHGlobal→StructureToPtrで取得したポインタを渡したら0除算云々と怒られました
3日3晩悩んで試行して解決できず、エロい人知識を貸してください


319:デフォルトの名無しさん
10/11/17 22:00:14
そのDeclare宣言は変えられんの?
ByRef As TUSBAI1616Config
って定義するだけなんだけど

320:デフォルトの名無しさん
10/11/17 22:23:02
>>319
Declareの宣言は勝手に変えるな馬鹿と言われて来たせいもあってか、その発想には至りませんでした。
明日試してみます。

オンラインマニュアル無いと思ってたらありましたので一応
URLリンク(accesio.com)


※サンプルプログラム(VB6)で使用されていた例
Private Type TUSBAI1616Config
ChannelRange(0 To &HF) As Byte
CalibMode As Byte
TrigMode As Byte
StartStopCH As Byte
Oversample As Byte
End Type

ADC_SetConfig DeviceIndex, Config, ConfigBufSize

これを、.net向けに>>318のように私が構造体を定義しなおしました。

321:デフォルトの名無しさん
10/11/17 22:49:57
VB6サンプルじゃなぁ…

322:デフォルトの名無しさん
10/11/19 01:09:46
テーブルの数だけテーブルアダプタが作成されてコーディングが非常に面倒なんですけど、
テーブルアダプタの共通化についてサンプルがあるWebサイトかなんかありますか?

323:デフォルトの名無しさん
10/11/19 20:41:50
俺はデザイナーからコードを引っこ抜いて、簡易的な汎用テーブルアダプタを作った
どうせUpdateメソッドしか使わないからねぇ

324:デフォルトの名無しさん
10/11/21 21:31:09
VB.netでコマンドライン引数を扱いたいのですが
取得する方法がいまいち分りません
どのようにすれば良いのでしょうか?

325:デフォルトの名無しさん
10/11/21 21:35:41
Environment.GetCommandLineArgsとか、My.Application.Startupイベントの引数とか

326:デフォルトの名無しさん
10/11/21 21:48:11
自己解決しました
以下の方法で取得できました
お騒がせしました

Dim returnValue As String()

returnValue = Environment.GetCommandLineArgs

327:デフォルトの名無しさん
10/11/21 21:50:47
skshggrksg

起動時のコマンドライン引数を取得する
URLリンク(dobon.net)

@IT:.NET TIPS コマンドライン引数を取得するには?
URLリンク(www.atmarkit.co.jp)

【VB.NET】外部から引数を受け取るプログラムを作成する
URLリンク(blog.livedoor.jp)

コマンドライン引数の取得
URLリンク(go2vb.cocolog-nifty.com)

.NET 入門 VB.NET - コマンドライン引数を扱うには... (2)
URLリンク(itnandemolab.blog70.fc2.com)

328:デフォルトの名無しさん
10/11/21 23:22:35
もう解決してるのに嬉しそうに貼らなくていいです

329:デフォルトの名無しさん
10/11/21 23:38:35
なにそれひどい。

330:デフォルトの名無しさん
10/11/22 09:43:01
vb.net コマンドライン
でぐぐれば出てくるのにマジでぐぐる前にここで
質問してるのか
いい加減にしとけよ

331:デフォルトの名無しさん
10/11/22 12:43:48
加減は見たつもり

332:デフォルトの名無しさん
10/11/23 17:40:40
Form1の起動時に(チェック処理に引っ掛かった場合には)
Form2を起動するコードを次の様に記述したのですが
なぜか、Form1が消えません。

※*_Loadイベントだけでは無く*_Shownイベントでも
試したのですが駄目でした。

どうすればForm1を非表示にした状態で、
Form2を起動する事が出来ますでしょうか?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  ' ~ チェック処理 ~
  Dim ins As New Form2
   Me.Hide()
   ins.Show()
   Me.Show()
End Sub


333:デフォルトの名無しさん
10/11/23 18:00:05
ins.ShowDialog(Me)

334:デフォルトの名無しさん
10/11/23 18:00:25
ハライテw

335:デフォルトの名無しさん
10/11/23 18:24:41
RitchTextboxの内容を印刷したいんだけど
VB2010でもまだそのまま印刷ってのは実装されてないんだっけ?
サンプル探してもシルバーライトの物しか出てこないから
なにか良いサンプル有ったら教えて欲しい

336:デフォルトの名無しさん
10/11/23 18:33:20
開発環境のバージョンとは何の関係もない話だと思うが
WinFormの話ならEM_FORMATRANGEとか使えば

337:デフォルトの名無しさん
10/11/23 18:45:54
>>333
ありがとうございます!!解決しました!!

338:デフォルトの名無しさん
10/11/23 19:11:24
>>336
ありがとう
調べてみます

339:デフォルトの名無しさん
10/11/23 19:35:12
>>335
Visual Basic .NET または Visual Basic 2005 を使用して RichTextBox コントロールの内容を印刷する方法
URLリンク(support.microsoft.com)

340:デフォルトの名無しさん
10/11/23 20:10:27
>>339
ありがとう
まるまるコピペしてつかってみます

341:デフォルトの名無しさん
10/11/25 12:43:06
VB2010expressでTextboxを配列化して順に配列の文字を入れたいが
どうやってもできない。
NULL扱いされる。

誰か助けて。

342:デフォルトの名無しさん
10/11/25 13:00:22
エスパーすると、配列をNewした後、TextBoxをNewしてないから。

343:デフォルトの名無しさん
10/11/25 14:13:11
Controls.OfType(Of TextBox)().ToArray()
とかでいいよ

344:デフォルトの名無しさん
10/11/25 15:06:27
341です。

すみません。補足説明します。

たとえば
Dim A as New Arraylist

For i As integer = 0 To 4
a.Add(i * 10)
TextBox(i).Text = R.ToString  ←ここがNull(Nothing)らしい
Next

簡単に配列にできないものでしょうか?
ネットで色々見ましたが、なぜかうまくできません。
初心者だから・・・?


345:デフォルトの名無しさん
10/11/25 15:15:02
テキストボックスの名前をTextBox1, TextBox2, …と連番にしておいて
Controls("TextBox" & i).Text = R.ToString()
のようにすれば配列にしなくても同じことができる
配列にするには一つずつ配列の要素に自分で代入する必要がある
あとArrayListなんか捨ててList(Of T)使いましょう

346:デフォルトの名無しさん
10/11/25 15:22:38
どうせ R が Nothing なんだろ

347:デフォルトの名無しさん
10/11/25 15:24:04
>>345
それやるくらいなら

Dim TextBoxes() As TextBox = {TextBox1, TextBox2, TextBox3 ...} だろ

348:デフォルトの名無しさん
10/11/25 15:28:37
どうでもいいよ
パフォーマンス的にはTextプロパティの設定に比べれば誤差だしVBでコードの良し悪し議論しても仕方ない

349:デフォルトの名無しさん
10/11/25 15:33:17
おいおい、職業プログラマで >>345 を許しちゃダメだろ
パフォーマンスの問題じゃなくてバグの出やすさ

>>345 は「"TextBox" & i)」が実在するかどうか実行時にしか評価されない最悪なコーディングだ。

350:デフォルトの名無しさん
10/11/25 15:36:17
なあに、その行が 「"TextBox" & i)」が実在するかどうか チェックするIfブロックの中に入っていれば問題ない

351:デフォルトの名無しさん
10/11/25 15:39:30
>>349
そんなこと言い出したらArrayList使うのも間違いだし4決め打ちもまずいし
ToStringの()省略も気になる

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


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