ふらっとC#,C♯,C#( ..
97:デフォルトの名無しさん
09/06/07 13:55:07
>>95
クラスライブラリプロジェクトを作って、アセンブリかプロジェクトを参照。
98:デフォルトの名無しさん
09/06/07 13:56:22
>>94
URLリンク(msdn.microsoft.com)(VS.80).aspx
99:デフォルトの名無しさん
09/06/07 13:58:17
>>96
なるほど、.NETが共通のライブラリなんですね。
ライブラリが共通なのに使える関数が言語ごとに違うのはなんとなく不思議な感じがします。
100:デフォルトの名無しさん
09/06/07 13:59:19
クラスライブラリにする
そこまでするほどではないと思うなら変なこと考えるよりソースコードをコピーしちゃったほうがいい
細かい依存が増えるとかえって煩雑になる
101:デフォルトの名無しさん
09/06/07 14:01:33
横レスすいません、>>90の方法を詳しく教えてもらえませんか?
それか開設してるサイトがあれば教えてください
VBからVCに移行したばかりなので、VBの関数を使えればすごく楽になりそうです
102:デフォルトの名無しさん
09/06/07 14:01:35
>>97
あ、なるほどわかりました。
「新しいプロジェクト」のテンプレートから「クラス ライブラリ」を選ぶんですね。
今まで一番先頭の「フォーム アプリ」しか選んだことがありませんでした。
103:デフォルトの名無しさん
09/06/07 14:03:42
>>94
こことか参考になるかな?
URLリンク(www.atmarkit.co.jp)
104:デフォルトの名無しさん
09/06/07 14:04:11
>>101
VC では無理。C++/CLI を除く。
105:デフォルトの名無しさん
09/06/07 14:08:24
最初の質問の内容なら、Formatを使えば十分なような気がするんだが……。
106:デフォルトの名無しさん
09/06/07 14:13:56
Microsoft.VisualBasic.dllを参照設定に入れるだけ
あんまりここでVBVB言わない方がいいよ
VB使いたくないから使う言語なんで
107:デフォルトの名無しさん
09/06/07 14:15:40
>>104
そうなのですか、ありがとうございました
>>106
分かりました、すいませんでした
108:デフォルトの名無しさん
09/06/07 14:31:18
>>105
始めたばかりなので、なんでもやってみたいんです。
それに、クラスライブラリの作り方も覚えておいて損はないと思うので。
で、とりあえずライブラリはできたんですが、ちょっとイメージと違っていたので
もうちょっと教えてください。参照設定にjisakuを入れて
先頭にusing jisaku; を足して、作った関数を使う場合、クラス名は省略できないんでしょうか。
今は、当然ですがClass1.chr()と書かないとエラーになります。
他の組み込み関数のように、いきなり関数名だけを書けるようにはできないでしょうか。
109:デフォルトの名無しさん
09/06/07 14:48:49
できない。
そもそも、C#に組み込み関数なんてないぞ。
110:デフォルトの名無しさん
09/06/07 15:11:13
意図的にできないようにしてる
型に厳しいのだって同じ
それはそれでメリットもあって、そういう「文化」なんだよ
111:デフォルトの名無しさん
09/06/07 15:15:30
その強制によって自動的にクラスごとにパッケージ化されるんだから、
決して悪くない方法だよな。名前の衝突がその分起こりにくくなる。
112:デフォルトの名無しさん
09/06/07 15:22:51
VS2010見てきたが、C++のインテリセンスは相変わらずなんだな。
未だに自動で変数の候補表示してくれねえし、予約語も認識しないし
いつになったらC#と同レベルになるのやら
113:デフォルトの名無しさん
09/06/07 15:25:26
>>91
暗黙の型変換ってバグの温床になるからなぁ。
114:デフォルトの名無しさん
09/06/07 15:26:33
>>112
だいぶ良くなってるよ。
C++はまず、インテリセンスが効かなくなるって状況がなくなっただけで感動しないと行けないレベル。
最初からツールアシストまで考えて設計されてる言語とC++比べたらかわいそう。
115:デフォルトの名無しさん
09/06/07 15:31:06
まー何でもアリのC++に比べたらC#はものすごい規則的で、
一度に覚えないといけないことが少ないからなぁ。
C++の諸悪の根源は、マクロと#includeとtypedefだな。
スレ違いだが。
116:デフォルトの名無しさん
09/06/07 15:38:35
VB→C#なら手で変換しなくてもいいやん
117:デフォルトの名無しさん
09/06/07 15:40:50
マクロはCから引き継いだ負債だな明らかに
118:デフォルトの名無しさん
09/06/07 15:42:03
>>115
最悪なのは define マクロだよ、これが全てのツールを全滅させる。
インテリセンスやドキュメント生成、果てはテストツールまで
文法も破壊してしまうし、理解できない深刻なバグも誘発する。
119:デフォルトの名無しさん
09/06/07 15:42:54
>>117
C#のdefineは、マクロじゃないぞ
120:デフォルトの名無しさん
09/06/07 15:47:59
>>119
流れ読めるならそんなツッコミは出ないはずなのだが…
121:デフォルトの名無しさん
09/06/07 15:49:19
つかC++の話題はC++スレでやれっちゅーの、おまえら何しに来てんだ?
122:デフォルトの名無しさん
09/06/07 17:27:25
異文化交流だよ
123:デフォルトの名無しさん
09/06/07 17:41:14
せめてC++マスターしてからこいよ
124:デフォルトの名無しさん
09/06/07 17:50:48
マスター(苦笑)
125:デフォルトの名無しさん
09/06/07 18:53:07
そこまで書いたんなら最後まで教えてあげようよ
>>107
参照設定でMicrosoft.VisualBasic.dllを入れると
Microsoft.VisualBasicという名前空間でVB固有のクラスが使えるようになる
C言語は文字列をcharの配列で代用するという文化があって、
今でもCharとChar[]とStringを厳密に区別するから
文字列の処理は微妙にややこしいんだよな。
一番VBを使いたくなるのは、たぶんこういう時。
126:デフォルトの名無しさん
09/06/07 19:48:21
> C言語は文字列をcharの配列で代用するという文化があって、
これ関係なくない?
むしろ、スクリプト言語の
どんどん暗黙の型変換を行いますよ
っていう文化の有無によるものだと思うんだけど
127:デフォルトの名無しさん
09/06/07 20:09:23
生のC言語は文字列の扱いもう少し何とかならんかったのかとは思う
128:デフォルトの名無しさん
09/06/07 20:22:27
文字列が扱えたら低級言語じゃなくなるだろ。
マクロだって微量のスタック領域しかない昔の処理系ではとくに有用なんだよ。
129:デフォルトの名無しさん
09/06/07 20:25:29
要するに時代遅れって事だな
130:デフォルトの名無しさん
09/06/07 20:29:33
それは違う。
ダイヤモンドの原石とダイヤモンドを比べて原石のほうを時代遅れと言ってるようなもの。
131:デフォルトの名無しさん
09/06/07 20:31:12
C++だってマクロがなければ価値が半減する。
マクロがなかったらMFCなんか使えたもんじゃないよ。
132:デフォルトの名無しさん
09/06/07 20:35:18
お前らC#以外の言語大好きだな
133:デフォルトの名無しさん
09/06/07 20:54:43
結局昨日から沸いてる変な人に釣られてるんだよ…
さぞほくそ笑んでるだろうよ
134:デフォルトの名無しさん
09/06/07 20:57:20
まったくC++に疲れ果ててC#に移り住んだのに、ここでC++の話題かよ
今後もC++使いたい奴は話し相手がいないからってここに来るなよw
135:デフォルトの名無しさん
09/06/07 21:03:00
>>134
ある意味、C++の愚痴大会w
136:デフォルトの名無しさん
09/06/07 21:16:12
C++のスレが最近やたらアゲられるが強烈に自演臭いんだよな、そんなに寂しいかwww
137:デフォルトの名無しさん
09/06/07 21:20:47
皆C++一度は経験してるの?
C#の前にC++やっといたほうがいい?
138:デフォルトの名無しさん
09/06/07 21:22:07
C++の勉強?必要ないかと
経験はあるよ、そりゃ当然、オレおっさんだし。
139:デフォルトの名無しさん
09/06/07 21:27:27
C++のコンパイルの遅さとデバッグの面倒さに嫌気がさしてC#に移ってきましたよ
C++の知識はいらんけど、Cのライブラリの呼び出し方とCOMの知識はあると便利
140:デフォルトの名無しさん
09/06/07 21:37:19
>>137
今から始めるなら別にC++要らない。
(参考程度に後から調べるとかはありだと思うけど)
今C++愚痴まくってるのは、俺含めみんな多分おっさん。
141:デフォルトの名無しさん
09/06/07 21:42:28
ありがとございます
そんなにC++って面倒なのですか?
C#の方がメリットがありそうな感じとwikiで読んだぐらいなので、実感はありませんが
そんなに面倒ならC++組もC#に乗り換えればいいと思うんですがねぇ
142:デフォルトの名無しさん
09/06/07 21:46:18
>>141
しつこい、C++スレに池
143:デフォルトの名無しさん
09/06/07 21:47:35
ただし向こうでC#の名前を出すなよ面倒だから
144:デフォルトの名無しさん
09/06/07 21:49:21
textbox1.Text = "1";
textbox2.Text = "1" + "あ";
これを
string s = "1";
textbox1.Text = s;
textbox2.Text = s + "あ";
って書く意味は何が有利なの?
145:デフォルトの名無しさん
09/06/07 21:50:21
C#使いの大半はC++からの移行組みのせいか
C++経験ない人は劣等感ありまくりだな。
146:デフォルトの名無しさん
09/06/07 21:50:53
業務上の都合というものが色々あってだな
147:デフォルトの名無しさん
09/06/07 21:50:58
"1" が別の文字列に変わったときに修正する箇所が1箇所で済む
148:デフォルトの名無しさん
09/06/07 21:51:09
うぜーな、自分で考えろ、sの定義行書き換えたら一斉に変更がきくってだけだろ。死ね。
149:デフォルトの名無しさん
09/06/07 21:51:53
初心者は保守性第一に書くのが吉。
150:デフォルトの名無しさん
09/06/07 21:52:37
C++荒らしの自演だろ、アホくさ
151:デフォルトの名無しさん
09/06/07 21:52:42
>>1-1000
スレ違い
152:デフォルトの名無しさん
09/06/07 21:52:58
>>148
それだけじゃねーだろ。コンパイル結果見ろ。見て分からなきゃ市ね。
153:デフォルトの名無しさん
09/06/07 21:53:32
>>150
どんだけ劣等感持ってんだよw
154:デフォルトの名無しさん
09/06/07 21:55:43
>>152
分からん
死ぬ前に教えてくれ
155:デフォルトの名無しさん
09/06/07 21:56:03
C++も極めればそれなりに使える、自演C++厨房は巣に帰ってガンバレ
156:デフォルトの名無しさん
09/06/07 21:57:34
C++に過剰反応する奴はもう寝ろ。疲れてるだろ。
157:デフォルトの名無しさん
09/06/07 21:57:35
コンパイル結果はJIT次第だ、ローレベルの話がしたくて仕方がないC++坊は無視
158:デフォルトの名無しさん
09/06/07 21:58:37
>>156
あのさぁ、過剰反応つーか、埋め尽くすなよって話だろ
ここなんのスレだよ?言ってみろ
159:デフォルトの名無しさん
09/06/07 21:58:52
>>157 ← JITがどういう処理をしてるか分かってない奴。
160:デフォルトの名無しさん
09/06/07 22:00:47
>>158
反応しないでスルーできないのか? スルーしたら埋め尽くされないの。2ch初心者?
おまえみたいのがいるから荒れるんだよ。
161:デフォルトの名無しさん
09/06/07 22:02:12
>>158
スルーしろっつってんだよ。馬鹿か?
162:デフォルトの名無しさん
09/06/07 22:02:15
ほっとていも、ほっとかないでも酷有様、つか埋め尽くし犯人お前だろ >> 160
163:デフォルトの名無しさん
09/06/07 22:02:41
だまんねえと改行で埋めるぞ
だまれ
164:デフォルトの名無しさん
09/06/07 22:03:02
>>158
【魔力】書き込むと願いが必ず叶うスレ【強力】409
だろが
165:デフォルトの名無しさん
09/06/07 22:04:11
C++の人アタマおかし過ぎ
166:デフォルトの名無しさん
09/06/07 22:04:58
それにしても >>142 一人で必死すぎだろw
167:デフォルトの名無しさん
09/06/07 22:05:08
>>164
VB スレに誤爆すんなよw
168:デフォルトの名無しさん
09/06/07 22:05:31
"1"が他に置き換わるような設計してる時点でミスですよ僕に言わせれば
169:デフォルトの名無しさん
09/06/07 22:06:03
心療内科へいって治療してもらえ
170:デフォルトの名無しさん
09/06/07 22:06:22
クラック対策だろjk
171:デフォルトの名無しさん
09/06/07 22:08:37
メソッド内部で書かれたsは定数として処理されて出てこないよ
上でも下でも出力は一緒ね、メンテの問題だけね、変なやついるから相手すんなよ
172:デフォルトの名無しさん
09/06/07 22:10:14
出力が違うと思ってた奴は一人もいないのに偉そうに説明すんな。
173:デフォルトの名無しさん
09/06/07 22:11:01
>>171
分かってないな。そんな話じゃないだろ。
174:デフォルトの名無しさん
09/06/07 22:11:39
つまらん話で発狂するなよ
175:デフォルトの名無しさん
09/06/07 22:12:31
よほどコンプレックスがあるのだろう。
176:デフォルトの名無しさん
09/06/07 22:12:43
もりあがってまいりました
177:デフォルトの名無しさん
09/06/07 22:14:07
向上心なければどの言語でも無駄って事を知れ C++ の人
178:デフォルトの名無しさん
09/06/07 22:16:17
おい黙れって言ってるだろ
179:デフォルトの名無しさん
09/06/07 22:21:59
黙ったぞ
180:デフォルトの名無しさん
09/06/07 22:23:52
>>178-179
お前変過ぎる、精神病院へいけ、今すぐ
181:デフォルトの名無しさん
09/06/07 22:28:46
>>157
ふつうに考えてC#のコンパイル結果ってILの話だと思うぞ。
182:デフォルトの名無しさん
09/06/07 22:30:27
>>157 >>171
スレが荒れているので聞き流されるかもしれないが、C#のコンパイラはあまり最適化などかけず、
かなり素直なコードを吐き出すんだが、それを知っているんだろうか。
public void SampleMethod1()
{
this.textBox1.Text = "1";
this.textBox2.Text = "1あ";
}
public void SampleMethod2()
{
string s = "1";
this.textBox1.Text = s;
this.textBox2.Text = s + "あ";
}
最初の質問の例を一旦コンパイルした後、ディスアセンブルするとこんな感じになる。
ほとんど最適化されてない。
183:デフォルトの名無しさん
09/06/07 22:35:40
ディスアセンブル? バイナリをアセンブラにすることなんだが。
184:デフォルトの名無しさん
09/06/07 22:39:25
メソッドのインライン展開が行われたりするのは実行時なんだが、それを知っているんだろうか。
185:デフォルトの名無しさん
09/06/07 22:42:36
>>182
ILやメタデータって string s のローカル変数名を保持してんの?
もしそうなら恥ずかしい名前つけれないんだが。
186:デフォルトの名無しさん
09/06/07 22:45:18
>>184
そんなことは当たり前のことだから省略した。長かったからな。
>>185
そう。だから.NET用の難読化ツールとかが出回ってたりする。
前のスレでも話題になった。
187:デフォルトの名無しさん
09/06/07 22:46:22
>>185
保持はしていないね、直接定数をロードしている。
ちなみに const string s = 1; としてしまえばどちらも一緒。
188:デフォルトの名無しさん
09/06/07 22:49:09
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_0006: ldstr "1"
IL_000b: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0010: ldarg.0
IL_0011: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_0016: ldstr "1a"
IL_001b: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0020: ret
ちなみにこんな感じだね、しかしこんなのチクチク詰めていっても関係無くないw
あほくさあほくさ
189:デフォルトの名無しさん
09/06/07 22:50:03
フィールドと違って最適化で消えることはあるけど基本的には保持される
190:デフォルトの名無しさん
09/06/07 22:50:38
じゃあディスコンパイルしたらどうやって >>182 の sって名前を特定したんだ?
>>182 はガセ?
191:デフォルトの名無しさん
09/06/07 22:51:29
いちいちツッコミどころかC++厨房うぜぇーって感じだな
192:デフォルトの名無しさん
09/06/07 22:52:50
ガセではない。IL表記ならこうだ。
.method public hidebysig instance void SampleMethod2() cil managed
{
.maxstack 3
.locals init (
[0] string s2)
L_0000: ldstr "1"
L_0005: stloc.0
L_0006: ldarg.0
L_0007: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox ImageComposer.Form1::textBox1
L_000c: ldloc.0
L_000d: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
L_0012: ldarg.0
L_0013: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox ImageComposer.Form1::textBox2
L_0018: ldloc.0
L_0019: ldstr "\u3042"
L_001e: call string [mscorlib]System.String::Concat(string, string)
L_0023: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
L_0028: ret
}
193:デフォルトの名無しさん
09/06/07 22:52:51
reflectorでぐぐれ
194:デフォルトの名無しさん
09/06/07 22:53:51
ああ、s2になっているのは、ローカル変数がたまたまsという
名前になっているのではないかと疑ったので変えてみた。
195:デフォルトの名無しさん
09/06/07 22:56:46
>>192
おや、おれのと結果違うね
.method private hidebysig instance void Test2() cil managed
{
// コード サイズ 41 (0x29)
.maxstack 3
.locals init (string V_0)
IL_0000: ldstr "1"
IL_0005: stloc.0
IL_0006: ldarg.0
IL_0007: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_000c: ldloc.0
IL_000d: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0012: ldarg.0
IL_0013: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_0018: ldloc.0
IL_0019: ldstr "a"
IL_001e: call string [mscorlib]System.String::Concat(string,
string)
IL_0023: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0028: ret
} // end of method Form1::Test2
まっ、こんなのはコンパイラのバージョン次第で何でてるくかなどコンパイラの作り手の勝手なわけですが。
196:デフォルトの名無しさん
09/06/07 22:59:04
/oの有無の違いに決まってるだろjk
197:デフォルトの名無しさん
09/06/07 23:01:27
pdbファイルが同じディレクトリにあったらildasmが読んでるみたいだ
アセンブリ自体には含まれない
198:デフォルトの名無しさん
09/06/07 23:04:17
しかしなんで string s 使うか直書きするかの違いがILDの話になるんだと……
おかしくね?
199:デフォルトの名無しさん
09/06/07 23:04:40
試したらアセンブリ自体には含まれないな。冷や汗かいたぜ。
200:デフォルトの名無しさん
09/06/07 23:05:45
アホのC++坊よけには丁度いいかもしれんけど
201:デフォルトの名無しさん
09/06/07 23:08:33
結論:string s 推奨。
202:デフォルトの名無しさん
09/06/07 23:18:48
あんだけ荒れてたのにスレ止まった・・
203:デフォルトの名無しさん
09/06/07 23:22:07
C#の話題、C++であってもC#と関連する話ならいくらでもレス付けますがな
C++サイコーっていいたいなら巣に帰れって事
204:デフォルトの名無しさん
09/06/07 23:25:41
C++サイコーなんて主旨の書き込みはどこにもないわけだが。
一人必死でC++叩いてる奴が荒らしてただけだよ。
205:デフォルトの名無しさん
09/06/07 23:30:09
まったくこれだけ書き込みまくっていけしゃぁしゃぁと、死んでしまえw
206:デフォルトの名無しさん
09/06/07 23:34:10
一人汚いレスばかりする人がいますな。
207:デフォルトの名無しさん
09/06/07 23:37:31
C++の人さ、努力って大事だよ、ちゃんと勉強してC++使えるようになろうな
そしたら、こんなスレッドで嫌がらせなどしなくても自信もって生活できるようになる。
208:デフォルトの名無しさん
09/06/07 23:48:10
>>141はC++が初心者装った嫌味に見え
>>142が反応した
という流れじゃなかろうか
209:デフォルトの名無しさん
09/06/07 23:50:46
ちょっと話変わるけど、Visual studio 2010でC#のインテリセンス変わったよな。
インクリメンタルサーチ式になったけど、あれはもう旧式に戻らないのか?オプションに設定項目はなかったが
進化だとしても旧式も用意して欲しいもんだ
210:デフォルトの名無しさん
09/06/08 00:03:54
え?
211:デフォルトの名無しさん
09/06/08 00:15:42
>>207
そうやって煽ってるのはおまえ一人だけなんだが。さっさと消えろカス。
212:デフォルトの名無しさん
09/06/08 04:04:23
C#勉強中です。
Google LABSのソースコード検索をマニュアルの補助に使っているのですが、
ちょっと疑問に思うコードがあったので教えてください。
リソースの解放を確実に行うため、usingを使ってスコープを定義すると
いう方法があると思うのですが、そのコードではこう書かれていました。
SQLiteDataReader reader;
using (reader = command.ExecuteReader())
{
何かの処理
}
この様にusingの外にDataReaderを定義して、usingの終わりで確実に
Dispose()されるのでしょうか?
213:デフォルトの名無しさん
09/06/08 04:12:07
>>212
SQLiteDataReader reader;
try
{
}
finally
のように宣言することが推奨されている。
URLリンク(msdn.microsoft.com)
214:デフォルトの名無しさん
09/06/08 04:14:03
すまん変なところで送信してしまった。
SQLiteDataReader reader;
{
try
{
// 何かの処理
}
finally
{
if (reader != null) ((IDisposable)reader).Dispose();
}
}
と同等だけど
using (SQLiteDataReader reader = command.ExecuteReader())
{
// 何かの処理
}
のように宣言することが推奨されている。
215:デフォルトの名無しさん
09/06/08 04:14:22
>>212
using が実は現状確実にDispose してくれないという話的には Dispose され
ないと答えるけど、その話を除けば普通に
using(SQLLiteDataReader reader...)
とした場合と同等レベルには Dispose される。
これとそれの違いはスコープぐらいかな、意図がそれだけだと正直わか
らんが。
216:212
09/06/08 04:38:37
>>213-215
ありがとうございました。
GCがいつ実行されるか分からないというのは一応承知してます。
安心してusing内に書くようにします。
217:デフォルトの名無しさん
09/06/08 05:08:35
>>216
あー。GC とかは関係ない。
説明すると、現状の using には Abort されたときの耐性がない
という話。
インスタンスが生成された直後とローカル変数に代入されるまでの
間にスレッドが Abort されれば Dispose は呼ばれない。それも
含めて Finalizer が必要な理由にもなっている。
と思って今確認したら try の外でやってるし…なら try に入るまで
かな。
めったに問題になることじゃないので記憶の片隅においておくだけで
いい知識だが。
218:212
09/06/08 05:59:16
>>217
ありがとうございます。
今の自分の知識ではお話の半分ほどしか分かりませんが、
滅多に問題になることはないということも含めてメモっておきます。
219:デフォルトの名無しさん
09/06/08 11:26:26
あるフォームに対して、サイズ変更枠が付いたままタイトルバー有り無しの
切り替えをしたいと思い、フォームのコンテキストメニューから「切り替え」を
選択した際に、タイトルバーをなくす場合はフォームのTextを空にして
ControlBoxをfalseにしています。しかしControlBox=falseかつText=""
という操作をすると、それ以降Application.Exitで終了したときに
FormClosingイベントが呼ばれなくなってしまいます。
フォームの終了時に設定を保存したいのですが、終了処理はどこで
行えばいいでしょうか。よろしくお願いします。
220:デフォルトの名無しさん
09/06/08 13:03:06
>>219
操作中に例外が発生してるんじゃないかな。
そうすると何も起こらず終了しているように見えることがある。
コントロールの存在・状態チェックはしっかりやろう。
221:219
09/06/08 13:39:01
>>220
ありがとうございます。存在していないコントロールに触っているのかと思い、
原因を調べるために怪しい所を省いた以下のソースを実行してみたんですが
やはりフォームのTextを空にしてControlBox=falseとすると、FormClosing
のところにブレークポイントを設定してもヒットしなくなりました
URLリンク(sakuratan.ddo.jp)
こういう場合にはFormClosingイベント等は使えないのでしょうか。。。
222:デフォルトの名無しさん
09/06/08 13:41:22
>>221
というか、Application.Exit()じゃなくてメインのフォームをクローズするのが普通じゃないの?
223:デフォルトの名無しさん
09/06/08 13:48:16
>>>222
そうですね、よく考えたらサブのフォームからでも
MainForm.Close()ってすればいいんですよね
Application.Exitの事は忘れます。ありがとうございました
224:デフォルトの名無しさん
09/06/08 14:31:59
二つの配列を一つにまとめるにはどうしたらいいでしょうか?
int[] a = {1,2,3};
int[] b = {4,5,6};
↓
int[] c = {1,2,3,4,5,6};
225:デフォルトの名無しさん
09/06/08 14:47:35
c = a.Concat(b).ToArray();
226:デフォルトの名無しさん
09/06/08 14:59:34
225> 出来ました。ありがとうございます(_ _)
227:デフォルトの名無しさん
09/06/08 19:56:13
Window Formの初期化のタイミングとして、
1.コントラクタのInitializeComponent();の後、
2.Loadイベントハンドラ内、
3.フォーム表示直後のShownイベントハンドラ内
の3つがあると思います。
1,2と3はフォームが表示される前か後ろかという違いがありますが、
1と2ではどういう違いがあるのでしょうか?
228:デフォルトの名無しさん
09/06/08 20:07:05
newしたときに呼び出されるか表示とかしようとしたときに呼び出されるか
229:デフォルトの名無しさん
09/06/08 20:08:23
C#ってASP開発できるんですか?
230:デフォルトの名無しさん
09/06/08 20:14:18
ASP.netなら出来る
231:デフォルトの名無しさん
09/06/08 20:20:21
>>228
なるほど、ということは、
コンストラクタ→New後、フォーム表示前に一度だけ実行
Loadイベントハンドラ→フォーム表示前に実行。リロードしたら再度実行される。
Shownイベントハンドラ→フォーム表示後一度だけ実行(リロードしても実行しない)
くらいに考えとけば良いですか。
232:デフォルトの名無しさん
09/06/08 20:30:49
普通、Windows Forms にリロードという概念はない。
233:デフォルトの名無しさん
09/06/08 20:35:35
〜Changedっていうイベントはオブザーバーパターンなんですか?
234:デフォルトの名無しさん
09/06/08 20:47:44
>>232
・・・もう一度マニュアル読んできます。
ありがとうございました。
235:デフォルトの名無しさん
09/06/08 20:50:26
イベントはイベントだろ
236:デフォルトの名無しさん
09/06/08 20:51:31
今日なんかあるの?
237:sage
09/06/08 21:28:25
VisualC#2008で、再表示がうまくできずに困っています。
fileSystemWatcher
でファイルを監視し、ファイルを読みこんで表示しようとしています。
string file = @"C:\tmp.txt";
public Form1()
{
InitializeComponent();
}
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
string[] lines = System.IO.File.ReadAllLines(file, Encoding.GetEncoding("Shift_JIS"));
//MessageBox.Show(lines[1]);
label1.Text = lines[1];
label2.Text = lines[2];
label3.Text = lines[3];
label4.Text = lines[4];
label5.Text = lines[5];
}
監視はできているようなのですが、2度めの表示が行われません。
どこがまずいんでしょうか。
238:デフォルトの名無しさん
09/06/08 21:38:16
public static List<T> a = new List<T>();
↑静的なListって可能なんですか?
どうやってメモリを確保しているんですか。
239:デフォルトの名無しさん
09/06/08 21:39:22
>>237
そのコードだけで判断しろってのも難しいが、ひょっとして
C# の Array(string[] とか) のインデックスは 0 から始まるぞ。
それはさすがにOK?
240:デフォルトの名無しさん
09/06/08 21:40:04
>>238
可能
起動時に自動で1度だけ呼ばれる
241:デフォルトの名無しさん
09/06/08 21:49:47
>>240
正確には、そのクラスが初めて使われるときね。
242:デフォルトの名無しさん
09/06/08 21:50:42
>>237
一応の確認だけど、そのFileSystemWatcherはVSでツールボックスからD&Dしたものだよね?
243:238
09/06/08 22:00:57
>>240-241
へー。
静的なのか動的なのか、分かったような分からないような…。
ありがとうございます。
244:デフォルトの名無しさん
09/06/08 22:01:22
初めに表示するメインフォームがアクティブにならずに起動することがある
ビルドして何もクリックしてないのにキャプションバーが灰色になってる
ウィンドウズのバグ?
245:デフォルトの名無しさん
09/06/08 22:11:04
すぐ Windows のバグ? とか聞く奴は、死んだ方がいいと思うよ。
246:デフォルトの名無しさん
09/06/08 22:13:14
2DMAPエディタを作ってみたいと思います。配列は必要というのはわかりました
どなたか知恵を貸してください。設計とか初めてなので><
247:デフォルトの名無しさん
09/06/08 22:17:57
アイコンエディタでも描いてろ
248:デフォルトの名無しさん
09/06/08 22:22:43
>>246
二次元配列使うとやりやすいと思う
int[,] ってやつ
後は
画像を分割して描画する(g.DrawImage)
バイナリ(orテキスト)でそのデータを保存する
保存したデータを読み込む
クリックした場所を取得する
等々
最低限上の機能は必要
そのほかマップの大きさだとかも必要だろうし
スクロールも必要
249:デフォルトの名無しさん
09/06/08 22:30:06
StreamReader(じゃ無くてもいいのですが)を利用して
単純にファイルを開くだけの処理を記述した場合、
1Kと100Mのファイルでは、オープンにかかる時間は違うものでしょうか?
挙動を見ると、単にファイルを開くだけ(Readしない)だと、
どちらも大して時間がかからないのですが、
大きなファイルは開くだけでも時間がかかるといわれまして。
試したところでは、大差ないので、読み込まずに開くだけであれば差は無いのかと
思ったのですが、違いがわかるかた教えていただけますか?
250:デフォルトの名無しさん
09/06/08 22:32:48
言われたんだろ?言った奴に根拠を聞けよ
251:デフォルトの名無しさん
09/06/08 22:34:39
>>243
static と言いつつ、静的(コンパイル時決定)じゃない。
あれにstaticって名前が付いてるのはC++を意識しすぎた結果。
実際にはクラス変数とでも呼ぶべきもの。
252:デフォルトの名無しさん
09/06/08 22:35:07
>>249
違わない
その人は何か既成のアプリと勘違いしてるんじゃない?
253:デフォルトの名無しさん
09/06/08 22:36:17
>>249
それはファイルシステム次第、ドライバ次第だな、StreamReaderの仕事はOSにリクエスト出すまで
OSの仕事はドライバにリクエストを出すまでだ。
254:デフォルトの名無しさん
09/06/08 22:39:25
ファイルを開いただけで読むことをしないんじゃ、
基本的にファイルサイズによる差は起こらないはずだよね。
ほかの人の言ってるようにデバイスによる差(ネットワーク上のファイルとかフロッピーディスクとか)による差は当然ある。
255:デフォルトの名無しさん
09/06/08 22:43:48
>>252-254
即レスありがとうございます
やはりそうですか。助かりました。
ファイルシステムやドライバをもっと勉強してみます。
256:sage
09/06/08 22:45:24
>>239
なるほど。
たしかにArrayのインデックスは0からで、
0(つまり1行目)ではなくて2行目から処理してますね。
それはそれでありがとうございますです。
しかし、やはりファイル更新の監視はうまくいかず、
該当するtmp.txtを2回更新すると、2回目には、例外が発生します。
別のプロセスで使用されているため、
プロセスはファイルtmp.txtにアクセスできません。
だそうです。
257:sage
09/06/08 22:46:50
>>242
YES。
ドラッグ&ドロップして、プロパティで、
NotifyFilterをLastWriteにしました。
いまの全コードはこれだけです。
public Form1()
{
InitializeComponent();
this.fileSystemWatcher1.Filter = "tmp.txt";
this.fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.LastWrite;
this.fileSystemWatcher1.Path = "C:\\";
}
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
//MessageBox.Show("changed");
string[] lines = System.IO.File.ReadAllLines(file, Encoding.GetEncoding("Shift_JIS"));
label1.Text = lines[1];
label2.Text = lines[2];
label3.Text = lines[3];
label4.Text = lines[4];
label5.Text = lines[5];
}
258:デフォルトの名無しさん
09/06/08 22:47:14
>>256
その例外が言ってる通りじゃないか。
ほかのプロセスが掴んでたらファイルが開けないことがある。
259:デフォルトの名無しさん
09/06/08 22:51:04
>>255
勉強する必要はないかと、当の本人に聞くなり、問題のブツで試してみればいい。
組み込み用のハードディスクに突然の電源断に耐えられるように設計された、書き込みバッファの無いHDが
そういう問題があって、スレッド使って対処したという苦労話は聞いたことがある、ただ.NETが取り扱うハードウェアというと、
通常のWindowsかモパイルCE系だと思われるが、そんなハードディスクなど聞いたことが無いね、
だからといって無いとは言いきれないので、問題のブツで確かめてみるしかないのでは。
260:sage
09/06/08 22:57:14
>>258
なるほど。
System.threading.Thread.Sleep(1000);
でとりあえず解決しました。
サンクスです。
261:デフォルトの名無しさん
09/06/08 23:09:11
すいません
C#で簡単なアニメーションさせたいので
bmp等の画像描画処理について詳しく書かれているサイトってわかりますか?
初心者なのでできるだけ詳しく書かれているところがいいんです。
よろしくお願いします。
262:デフォルトの名無しさん
09/06/08 23:14:29
他のクラスからprivateなメソッドを無理やり使う方法を教えてください
263:デフォルトの名無しさん
09/06/08 23:15:13
>>262
リフレクション
264:デフォルトの名無しさん
09/06/08 23:25:18
>>263
サンプルコードありますか?
265:デフォルトの名無しさん
09/06/08 23:28:08
いくらでもあるよ
266:デフォルトの名無しさん
09/06/08 23:28:28
くり返しのところをforで書き換えてみたところ、
2回目の表示で、1回目の表示が消えないのです。
どこかでdisposeとかする必要があるのでしょうか?
Label[] label;
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e){
System.Threading.Thread.Sleep(1000);
string[] lines = System.IO.File.ReadAllLines(file, Encoding.GetEncoding("Shift_JIS"));
label = new Label[5];
for (int i = 0; i < 5; i++){
this.label[i] = new System.Windows.Forms.Label();
this.label[i].AutoSize = true;
this.label[i].BackColor = System.Drawing.Color.Transparent;
this.label[i].Font = new System.Drawing.Font("メイリオ", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
this.label[i].Location = new System.Drawing.Point(23, 35 + i * 60);
this.label[i].Name = "label[i]";
this.label[i].Size = new System.Drawing.Size(62, 24);
this.label[i].Text = lines[i];
this.Controls.Add(this.label[i]);
}
}
267:デフォルトの名無しさん
09/06/08 23:28:52
取りあえず、ヒントもらったらググる位しようや
268:デフォルトの名無しさん
09/06/08 23:31:08
このスレには優しい人とそうでない人がいます。
269:デフォルトの名無しさん
09/06/08 23:31:20
>>264
何勝手に乗ってきてるわけ?
270:デフォルトの名無しさん
09/06/08 23:31:57
んなもん当たり前だろ
271:デフォルトの名無しさん
09/06/08 23:32:19
MSDN にもあるし、いろんなところにあるよ。
Reflection とか MethodInfo とかで探してみ。
272:デフォルトの名無しさん
09/06/08 23:32:47
ありがとう。
273:デフォルトの名無しさん
09/06/08 23:37:32
どんどんラベルを追加してるだけのような。
274:デフォルトの名無しさん
09/06/08 23:44:33
C#にはVBのWithに相当する機能はありますか?
クラス1.プロパティ1 = x;
クラス1.プロパティ2 = y;
というのを
With クラス1
.プロパティ1 = x;
.プロパティ2 = y;
End With
みたいに書いて入力の手間を省きたいのですが。
Withを使うとVBの場合は実行速度も少し上がるそうですが。
275:デフォルトの名無しさん
09/06/08 23:46:33
ありません。
276:デフォルトの名無しさん
09/06/08 23:46:40
>>248
ありがとうございます。やってみます!
277:デフォルトの名無しさん
09/06/08 23:54:22
>>274
インタプリタなら速くなるのは分かるがVB.NETでも速くなるのかな。
速くなるならC#でも深いところにあるクラスは一度ローカル変数に代入してからのほうが速い?
278:デフォルトの名無しさん
09/06/08 23:55:31
>>241
「そのクラスにアクセスするより前に一度だけ実行される」ことが
保障されているだけじゃなかったか?
>>274
全く同じ機能はない
初期化時限定のオブジェクト初期化子くらい
279:デフォルトの名無しさん
09/06/08 23:57:22
つーか、With って .NET ではシンタックスシュガーじゃなかった?
280:デフォルトの名無しさん
09/06/09 00:00:08
>>278
> 「そのクラスにアクセスするより前に一度だけ実行される」ことが
> 保障されている
規格上はそうなってた気がする。
実際は、たいてい直前。
281:デフォルトの名無しさん
09/06/09 00:11:39
>>277
多分JITコンパイルで最適化されるんじゃないかなその程度
282:デフォルトの名無しさん
09/06/09 00:35:09
ないんですか。残念です。
この程度なら、プリプロセッサあたりで処理してくれてもいいと思うのは私だけでしょうか。
コントロールの初期設定とか、同じ名前空間やクラス名がずらっと並んでるのを見ると、
もうちょっと楽にコーディングできる手段があってもよさそうに思うのですが。
283:デフォルトの名無しさん
09/06/09 00:42:23
インテリセンスがあるからコーディングの手間はさして変わらん。
コードが汚くなるからwithを採用しない言語は多い。
284:デフォルトの名無しさん
09/06/09 00:47:33
>>282
初期設定なら似たような事はできる
var tmp = new Hoge() { A = 10 , B = 30 };
A,B はHogeのプロパティーまたは変数
285:デフォルトの名無しさん
09/06/09 00:54:53
VBにあってC#に無い寂しい機能はLINQToXmlのXMLリテラルかな。
これがあったら、withどころか究極のデータセッティングができるんだけれど……
286:デフォルトの名無しさん
09/06/09 00:57:10
>>284
なるほど、そういう書き方もできるんですね。勉強になります。
287:デフォルトの名無しさん
09/06/09 01:00:41
>>277
そうみたいだよ。
URLリンク(www.atmarkit.co.jp)
288:デフォルトの名無しさん
09/06/09 01:06:22
>URLリンク(www.atmarkit.co.jp)
なるほどね、C#ならスコープ使えって事か
{
var a = hoge.member;
a.Prop1 = 10;
a.Prop2 = 10;
}
289:デフォルトの名無しさん
09/06/09 01:13:13
>>287
確かに、オブジェクトをいちいち作ってやれば同じことになりますね。
withほど簡略化はできませんが、多少は楽が出来そうです。
コード的にもメリットがあるみたいですし。
290:デフォルトの名無しさん
09/06/09 01:13:41
リンク先のような場合、
ds.Tables("Customers").Rows
がそれなりに処理重そうだから無意識に一度ローカルに代入してるな。
ただ >>288 のような軽いメンバアクセスはそのまま見ちゃってるなぁ。
291:デフォルトの名無しさん
09/06/09 01:21:50
イベントで this.xxxでアクセスするより senderをcastするほうがいいってことか。
292:デフォルトの名無しさん
09/06/09 01:25:30
キャストの方がコスト高いだろ
293:デフォルトの名無しさん
09/06/09 01:27:45
ますますはまってます。
label = new Label[5];
for (int i = 0; i < 5; i++)
{
this.label[i] = new System.Windows.Forms.Label();
this.label[i].Dispose();
}
for (int i = 0; i < 5; i++)
{
this.label[i] = new System.Windows.Forms.Label();
//this.label[i].Dispose();
//this.label[i].Text.Remove(1);
this.label[i].AutoSize = true;
this.label[i].BackColor = System.Drawing.Color.Transparent;
this.label[i].Font = new System.Drawing.Font("メイリオ", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
this.label[i].Location = new System.Drawing.Point(23, 35 + i * 60);
this.label[i].Name = "label[i]";
this.label[i].Size = new System.Drawing.Size(62, 24);
//this.label[i].Text = "";
this.label[i].Text = lines[i];
//this.label[i].Text = this.label[i].Text.Replace(this.label[i].Text,lines[i]);
this.Controls.Add(this.label[i]);
}
294:デフォルトの名無しさん
09/06/09 01:50:33
拡張プロパティってどう書くの?
295:デフォルトの名無しさん
09/06/09 01:55:27
書けない
296:デフォルトの名無しさん
09/06/09 02:14:52
ファック!ファック!ファック!!
297:デフォルトの名無しさん
09/06/09 03:09:25
クラスつくるとき
class testint{
private int a;
}
ってやって
testint test=new testint()
なんで
testint test
だけで実装できないんだ。わざわざ無駄な手間かけさせる意味は?
あと、なんでtestint()の最後、何もない括弧をつけなきゃいけんのだ。
298:デフォルトの名無しさん
09/06/09 03:17:10
>>297
CかC++から来た人?もしそうなら、
クラスは常にポインタ型(のようなもの、ポインタ演算はない)。newしなければnullが入っている。
という短い文章で分かってほしい。
testint test=new testint()と打つのは、Visual Studioとか入力支援が良くできたところで書けば案外大した手間でない。
クラス名を2度書くのが嫌ならvarがある、ローカル変数限定だけど。
()が要るのはなぜ?というのは俺も思うところだけど。
299:デフォルトの名無しさん
09/06/09 03:24:51
コンストラクタだから。引数のないメソッドの()も省力しないだろ。
300:298
09/06/09 03:27:50
>>299
ありがとう、納得した。
C++はnew hogeで通るし、引数があっても括弧を省略できる場合のある
VBとか使っていたからそこまで考えが及ばなかった。
301:デフォルトの名無しさん
09/06/09 03:41:29
>>298
c++を見てみました。
c++なら
class testint{
private:
int kazu;
}
testint test;
test.kazu=10;
これでいいのか・・・
newとかいうのはオブジェクト指向で必ずしも必須というわけじゃないんだね。
コンストラクタも自動的に呼び出されるのか。
c#とはずいぶん違うんだね。初心者にはc++のがいいのかな
302:デフォルトの名無しさん
09/06/09 03:44:14
c++のnewはヒープに作る場合
303:デフォルトの名無しさん
09/06/09 06:52:25
c#のnewはどこのメモリを使うん?
304:デフォルトの名無しさん
09/06/09 06:57:08
字は読めても話の流れが読めない人って誰?
305:デフォルトの名無しさん
09/06/09 08:46:14
>>303
C++ は new の有無でスタックはヒープかわかれるけど、
C# は class か struct かで分かれる。
class なら new したのはヒープに、
struct なら new は単なるコンストラクタ呼び出し、スタックに取られる。
struct でもわざわざ new しないと行けない理由は、
その方が構文解析が楽(後々他の構文追加しやすい)とか、
初期化し忘れを防ぐためにわざわざ面倒な構文にしてあるとか、
class とそろえるとか、そういう理由だと思う。
306:デフォルトの名無しさん
09/06/09 10:11:50
struct は new してもいいがしなくても構わないぞ、ただし全メンバーをセットしてからでしか使えないが
struct の new は引数無しなら、全フィールドに0入れるよという指示で、それ以外なら指定の定型初期化を処理するという事ではなかろうかと。
最近は default というキーワードができて、二重機能っぽくなってるいけれど、これはジェネリックの都合かなと。
307:デフォルトの名無しさん
09/06/09 10:16:51
それと、Cでいう所の自動変数を宣言する場所で構造体を宣言すると、スタックに乗りそうな予感がするものだが
たとえば
void Test()
{
int tmp;
Action a = () => { tmp = 3 ; };
}
このtmpは、スタックに取られているとはどうにも思えない
内部的には勝手JITの勝手というのが実態かと。
308:デフォルトの名無しさん
09/06/09 10:23:10
HttpWebRequestクラスでリクエストヘッダーを読み取ったりするとき
UserAgentとかkeep-aliveプロパティは取得できるのですが
(<HttpWebRequest.UserAgent>プロパティ,<HttpWeqRequest.KeepAlive>プロパティ)
Host,Accept-Language,Accept-Encoding,Accept-Charsetプロパティが読み取れません。
読み取り方をよろしくお願いします。また、ヘッダー情報を編集してリクエストストリーム
に流せるかどうかも教えていただきたいです。
309:デフォルトの名無しさん
09/06/09 10:34:54
Console.WriteLine( string.Format( "{0,4:f2}", 10.0 ) );
Console.WriteLine( string.Format( "{0,4:f2}", -10.0 ) );
こんな感じで作った文字列の桁を揃えたいんだけど、うまくいきません。
上の例だと
10.00
-10.00
となります。
マイナスの符号があるときになんとかしたいんだけど、
うまいことやる方法はあります?
310:デフォルトの名無しさん
09/06/09 10:51:23
>>308
Requestでヘッダを「読み取る」必要があるのかどうかって話はあるが
直接プロパティになってないヘッダはHeadersプロパティから取得設定できる
311:デフォルトの名無しさん
09/06/09 11:09:11
>>309
セクション区切り記号「;」を使ったカスタム書式指定かね
{0,5: 0.00;-0.00}
ところで小数点以下2桁有効だとフィールド幅4は意味がないと思うけど
312:デフォルトの名無しさん
09/06/09 11:12:44
>>307
それはラムダ式(クロージャ)が影響している。
() => { } を内包するクラスが暗黙に作られてそのメンバにtmpがあるはず。
313:デフォルトの名無しさん
09/06/09 11:17:12
>>311
ごめん実はそのあたりよくわからなくてテキトーに書いてました
もっと詳細を言うと、x,y,zを持つポイントクラスがあって
始点:( x1, y1, z1 )
終点:( x2, y2, z2 )
みたいな感じで小数点以下3桁で計6桁ぐらいで書き出したいときの
桁揃えという話でした。詳しく書かなくて申し訳ない。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4694日前に更新/222 KB
担当:undef