ふらっとC#,C♯,C#(初心者用) Part41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part40
http://pc12.2ch.net/test/read.cgi/tech/1239599317/
乙
4 :
デフォルトの名無しさん :2009/06/06(土) 17:09:29
>
>>997 > で,言いたいことは?
VB.NET >>>> C#
君にとってはそうかもしれんね
>.NET構想における中心的な開発言語であり、XML WebサービスやASP.NETの記述にも使用される。 >他の.NET系の言語でも記述可能だが、生産性・機能においてC#が最も優れるとされる。 Wikipediaだけどこんなこと誰が言ったんだろ
作ったはずのUIが見えなくなったのですけど、どこを押せば復活するか教えてください
とうごうしっちょうしょう
>>10 VS2005かそれ以前ならVS2008を買う、デザイナがバグっとる、結局治らんかった。
>>前997
>C++を使えて、C#を高く評価する輩には、VB.NETも使える輩はいないと仮定する。
何言いたいのか訳わからんがあり得ない仮定だな、.NetのサンプルにVBが多い以上読めないわけにはいかない、特にDB周り。
つか知らなくてもカンで読めるだろ
しょうもない釣りなんて放っておきなよ
スレの伸びからしてvbよりc#のほうが普及してる気がする。
その根拠は?
検索のヒット件数からしてvbよりc#のほうが普及してる気がする。
現在の北米のプログラミング書籍の売り上げを比べると、 C#がJavaを追い抜いて一番売れているそうだぞ(大体40%くらい) オレはVB.NET自体がC#の糖衣表現のように感じてるなぁ。
気がする。 気がする。 感じてるなぁ。
スレの伸びはC#の方が速い 検索件数はC#の方が多い これでいいのかな?VB大敗北だな
スレの伸びと普及の関係の根拠はなに?
VBとJavaはできませんときっぱり言っておくとデスマーチに呼ばれないように感じるなぁ。
>>17 じゃあ、日本でその状態になるのは5年後じゃね?<日米の流行の時間差
ウザイから一回埋めてやる
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
再開
>>21 選べる状況ならそうするけど
今は何でもいいから仕事がほしい
c#スレが伸びるのはvb厨が荒らすから。
おれ最近規制報告に凝ってるんだ しつこいようだとやっちゃうぞ?
Objective-Cって絶滅したかと思ってたよ。
C++にしないなら、何で中途半端なC#なのか。 素直にVB.NETにすればいいのに。 VBなら馬鹿にされると思って、見栄でC#やってるだけだろ。
君には中途半端なのかも知れないね、C#
まあ少なくとも、オレの居た会社では.NETの案件でVB.NETなんてのは聞いたことなかったな。 言語としてできることにそれほど差があるわけではないが、 まあ全体的な生産性からみてC#を選択するのが無難だろ。
VB.netはC#のおまけだろ。 実際、最新の機能はC#へが先だしな
IShellFolder とかいじるプログラムを作ってて、 SafeHandle や HandleRef の使い方がわからなくて 全部、IntPtr にしてるんだけどやっぱりまずいよね? ぐぐってみたが使いどころがよくわからないんだけど 誰か教えてくれないか?
プロパティにするかパラメータにするかの判断基準が分からない
private 以外は無条件でプロパティで。
VB.NETをまともに使いこなせるレベルなら
C#なんて構文ちょろっと覚えるだけで使えるようになるのに何故騒いでるんだ?
>>37 何?お前VBに劣等感とか持っちゃってるの?wwアホくさ
>>42 getterだけあればいいばあい。
もしくはgetterとsetterが必要で、setterに特に追加の引数を必要としない場合はプロパティでよい。
結局はクラスライブラリを知ってるかどうか、でしょ。 それを呼び出す手段は別になんだってできることは同じ。 VBでもC#でも、もっと別の言語でも。
>>46 開発の歴史を知らない感じの発言だな。
それを実現するまでにどれぐらい時間がかかってるか理解してる?
ゲームを作る目的なら、C++よりC#を覚えた方がいいんでしょうか? サイトで色々調べてみたのですが、C#の方が向いていると言うのと、 ライブラリ(これがどれほどの役に立つものかは理解していませんが)が充実しているという点でC++でやったほうがいいという意見で別れています
>>48 商用でゲームプログラムを作っている立場のものだが、
実際にどちらにするか迷う。
従来はC++の一点張りだったが、C#は圧倒的に開発効率がいいし、
DirectXのサポートも問題ない。
問題は外部ライブラリの使用と特にスクリプトをどうするかで、
.NETには使い勝手の良いライトウェイト言語がまだ実用化されていないように思える。
(IronPythonなどがあるが、あんなにコンパイルに時間がかかって実用になるのか?)
だが、C#でゲームを作るというのは十分ありだと思うよ。起動は遅くなるけど。
>>49 プロの方でも迷う問題ですか
とりあえず製作がまだ簡単そうな、C#でやってみることにします。ありがとうございました
>>49 IronPythonは.NETアセンブリに事前コンパイルできたように記憶している。
他のDLR言語は知らない。
GCどうすんのよ。 諦めて自分で管理か
>C#なんて構文ちょろっと覚えるだけで使えるようになる そんなわけない 50ページ以下で出版されてるC#の本などない。 何百ページもの学習量がある。
何百ページのC#解説書なんかちょろっとマスターしてしまえるわ
>VB.NETをまともに使いこなせるレベルなら 前提抜かすな
まあ、プログラミングやりたい初心者がいたら、間違いなくC#奨めるよ RubyやPythonみたいなスクリプト系は癖が強すぎるので絶対奨めない 基本学ぶならC#が取っつきやすくていい
C++がそうであるように、C#のすべての言語仕様なんぞ知る必要がない。
荒らしてんのは本当にVB厨なのか? どうにも、実はCすらできないC++厨臭いんだがw
C#を、というより、「データ構造とアルゴリズム」の概念を身体に染み込ませれば、 あとはどの言語もリファレンス引きながら何とかなる。 プログラミング的「センス」ってのはあるけど、多少ださいソースでも 昨今の「ハイパワー」が補ってくれる。 ツールへの習熟度は軽視できないけど、 それよりも作る物の目的やその結果が全てでがしょ?
>>56 私はそうは思わない(癖が強い)けど、
まあ動的型言語と静的型付け言語とどちらを先に覚えるべきかと言えば、
静的型付けかもしれないなぁ。
でも動的型言語は最初にプログラムを作るのに覚えることが少ないから初心者向きともいえる。
教える側のスキルによっても結論は変わってきそうだ。
そして、自信過剰になる傾向のある奴だな。 自分の弱点等には気付かないタイプだな。
ごめんね C#がちょろっとできるようになっちゃったもんでつい調子に乗っちまった
そうか、ちょろっとしかできないくせに、調子に乗ってるのか
>>59 C++ って結局落とし穴やら最低必要な予備知識が多すぎてその
一般論すら通用しないんだよなぁとふと思った。
それでも標準的な言語ではあるわけで
標準的? これまた曖昧な概念を持ち出したな
c#とjavaどちらが将来性があるかというと結局はMSとOracleどっちか将来性があるかということだ。
それは硬貨と紙幣どっちが将来性があるかと言いってるようなもんだ。
既に将来性うんぬんとかいうようなレベルじゃなくて十分に普及しているから、 自分の作るものがどちらで作るのが向いているのかで考えればいいんじゃないかな。
たいていどっちでも作れる
マルチスレッドって処理速度が早くなるの?
どうやって使ったら速くなるの?
解説サイト見ながら簡単なプログラムを作ってみたんですが、動作がおかしいんです。 どっかにプロジェクトをアップロードしたら、このスレで添削してもらえますか?
ほい
C#でDirectXのD3DXの関数は使えますか?
79 :
76 :2009/06/07(日) 07:26:17
80 :
76 :2009/06/07(日) 07:29:03
ついでにもう一つお願いします。 禁則処理(?)をなくして、単語の途中で改行するのを許可して、右端にスペースが あかないようにする設定はありますでしょうか。
>>47 これから作るソフトにC#とVB.Netのどちらを選ぶか、って話には歴史関係ないじゃん
>>79 カーソル位置を設定していないと、フォーカス来たときに全選択になるんじゃないかな。
文字列設定した後に、textBox1.Select(0, 0);でカーソル位置先頭にするとか。
ワードラップは、、、、EM_SETWORDBREAKPROCを直接設定するしかないかも。
83 :
デフォルトの名無しさん :2009/06/07(日) 10:32:20
>>78 質問の仕方が怪しいな
DirectX使うっていうのは関数一つ二つでちょこっとできるようなものじゃないよ
使うとなるとプログラム全体がDirectXに染まる
ManagedDirectXとかSlimDXとか
VBからC#への移植で悩んでいます。 VBで数値(文字コード)を文字列に変換する部分で s = Chr(x) + Chr(y) をC#になおしたいのですが、自力で書き換えてみたらこんなに長くなってしまいました。 もうちょっと短く書く方法はないでしょうか? とくにToString()を1文字ごとに呼び出すのが無駄っぽく思えるのですが。 s = ((char)x).ToString() + ((char)y).ToString();
>>84 C#で1文字ごとに処理すること自体あまりやらないことなので、
敢えて1文字ずつ処理してしまう場合にはそうなるのも仕方ないんじゃね?
追加。数値を文字列に変換するというなら、formatを使ってご覧。
>>84 2文字だったら、別に書き換える必要はないと思うけど。
どうしても、ToStringが嫌なら
s = new string(new[] { (char)x, (char)y });
88 :
デフォルトの名無しさん :2009/06/07(日) 13:31:43
string.Concat 中でToStringされるから意味も実際の動作も全く同じだけどどっちにしてもChrよりは速いよ
>>85 わかりました。
今回はchr関数を自作して置き換えることにします。
VBのアセンブリを参照設定して Chr() 関数使えばいいじゃん。
あ、考えてる間にレスが… 色々ありがとうございます。実際はもうちょっと式が長いんです。 とりあえず、一通り試してみます。 ちなみに単純なプログラムなので処理速度は問いません。 あくまでもVBからの移植性とか可読性(式の単純さ)の方を重視したいと思っています。 CharからStringへの暗黙の変換がないのはどうしてなんでしょうね。 ずっとVBばかりやってきたので不思議でしょうがありません。
>>90 すいません。その方法をもうちょっと詳しく教えてください。
そのexeはVB(のランタイム)の入ってないマシンでも実行できますか?
93 :
デフォルトの名無しさん :2009/06/07(日) 13:42:37
いやChrの戻り値もcharだから無意味
94 :
76 :2009/06/07(日) 13:45:17
>>82 Select(0, 0)で全選択は解消できました。
右端で折り返すのはまだできません。むむむ
ついでにお願いします。 今回のchrとか、自作の関数をどこかにまとめていつでも使えるようにしておきたいのですが、 C#2008の流儀ではどうするのが推奨されているのでしょうか。 昔覚えたC言語ではlibフォルダにソースを入れておいて、<#include jisaku_lib.c>みたいにして 使ってた覚えがあるんですが。
>>92 VBのランタイムって、今のバージョンなら .NET Framework だよ。
なので、.NET Framework が入ってれば使える。
>>95 クラスライブラリプロジェクトを作って、アセンブリかプロジェクトを参照。
>>96 なるほど、.NETが共通のライブラリなんですね。
ライブラリが共通なのに使える関数が言語ごとに違うのはなんとなく不思議な感じがします。
100 :
デフォルトの名無しさん :2009/06/07(日) 13:59:19
クラスライブラリにする そこまでするほどではないと思うなら変なこと考えるよりソースコードをコピーしちゃったほうがいい 細かい依存が増えるとかえって煩雑になる
横レスすいません、
>>90 の方法を詳しく教えてもらえませんか?
それか開設してるサイトがあれば教えてください
VBからVCに移行したばかりなので、VBの関数を使えればすごく楽になりそうです
>>97 あ、なるほどわかりました。
「新しいプロジェクト」のテンプレートから「クラス ライブラリ」を選ぶんですね。
今まで一番先頭の「フォーム アプリ」しか選んだことがありませんでした。
>>101 VC では無理。C++/CLI を除く。
最初の質問の内容なら、Formatを使えば十分なような気がするんだが……。
106 :
デフォルトの名無しさん :2009/06/07(日) 14:13:56
Microsoft.VisualBasic.dllを参照設定に入れるだけ あんまりここでVBVB言わない方がいいよ VB使いたくないから使う言語なんで
>>105 始めたばかりなので、なんでもやってみたいんです。
それに、クラスライブラリの作り方も覚えておいて損はないと思うので。
で、とりあえずライブラリはできたんですが、ちょっとイメージと違っていたので
もうちょっと教えてください。参照設定にjisakuを入れて
先頭にusing jisaku; を足して、作った関数を使う場合、クラス名は省略できないんでしょうか。
今は、当然ですがClass1.chr()と書かないとエラーになります。
他の組み込み関数のように、いきなり関数名だけを書けるようにはできないでしょうか。
できない。 そもそも、C#に組み込み関数なんてないぞ。
110 :
デフォルトの名無しさん :2009/06/07(日) 15:11:13
意図的にできないようにしてる 型に厳しいのだって同じ それはそれでメリットもあって、そういう「文化」なんだよ
その強制によって自動的にクラスごとにパッケージ化されるんだから、 決して悪くない方法だよな。名前の衝突がその分起こりにくくなる。
VS2010見てきたが、C++のインテリセンスは相変わらずなんだな。 未だに自動で変数の候補表示してくれねえし、予約語も認識しないし いつになったらC#と同レベルになるのやら
>>91 暗黙の型変換ってバグの温床になるからなぁ。
>>112 だいぶ良くなってるよ。
C++はまず、インテリセンスが効かなくなるって状況がなくなっただけで感動しないと行けないレベル。
最初からツールアシストまで考えて設計されてる言語とC++比べたらかわいそう。
まー何でもアリのC++に比べたらC#はものすごい規則的で、 一度に覚えないといけないことが少ないからなぁ。 C++の諸悪の根源は、マクロと#includeとtypedefだな。 スレ違いだが。
VB→C#なら手で変換しなくてもいいやん
マクロはCから引き継いだ負債だな明らかに
>>115 最悪なのは define マクロだよ、これが全てのツールを全滅させる。
インテリセンスやドキュメント生成、果てはテストツールまで
文法も破壊してしまうし、理解できない深刻なバグも誘発する。
>>117 C#のdefineは、マクロじゃないぞ
>>119 流れ読めるならそんなツッコミは出ないはずなのだが…
121 :
デフォルトの名無しさん :2009/06/07(日) 15:49:19
つかC++の話題はC++スレでやれっちゅーの、おまえら何しに来てんだ?
異文化交流だよ
せめてC++マスターしてからこいよ
マスター(苦笑)
そこまで書いたんなら最後まで教えてあげようよ
>>107 参照設定でMicrosoft.VisualBasic.dllを入れると
Microsoft.VisualBasicという名前空間でVB固有のクラスが使えるようになる
C言語は文字列をcharの配列で代用するという文化があって、
今でもCharとChar[]とStringを厳密に区別するから
文字列の処理は微妙にややこしいんだよな。
一番VBを使いたくなるのは、たぶんこういう時。
> C言語は文字列をcharの配列で代用するという文化があって、 これ関係なくない? むしろ、スクリプト言語の どんどん暗黙の型変換を行いますよ っていう文化の有無によるものだと思うんだけど
生のC言語は文字列の扱いもう少し何とかならんかったのかとは思う
文字列が扱えたら低級言語じゃなくなるだろ。 マクロだって微量のスタック領域しかない昔の処理系ではとくに有用なんだよ。
要するに時代遅れって事だな
それは違う。 ダイヤモンドの原石とダイヤモンドを比べて原石のほうを時代遅れと言ってるようなもの。
C++だってマクロがなければ価値が半減する。 マクロがなかったらMFCなんか使えたもんじゃないよ。
お前らC#以外の言語大好きだな
結局昨日から沸いてる変な人に釣られてるんだよ… さぞほくそ笑んでるだろうよ
まったくC++に疲れ果ててC#に移り住んだのに、ここでC++の話題かよ 今後もC++使いたい奴は話し相手がいないからってここに来るなよw
C++のスレが最近やたらアゲられるが強烈に自演臭いんだよな、そんなに寂しいかwww
皆C++一度は経験してるの? C#の前にC++やっといたほうがいい?
C++の勉強?必要ないかと 経験はあるよ、そりゃ当然、オレおっさんだし。
C++のコンパイルの遅さとデバッグの面倒さに嫌気がさしてC#に移ってきましたよ C++の知識はいらんけど、Cのライブラリの呼び出し方とCOMの知識はあると便利
>>137 今から始めるなら別にC++要らない。
(参考程度に後から調べるとかはありだと思うけど)
今C++愚痴まくってるのは、俺含めみんな多分おっさん。
ありがとございます そんなにC++って面倒なのですか? C#の方がメリットがありそうな感じとwikiで読んだぐらいなので、実感はありませんが そんなに面倒ならC++組もC#に乗り換えればいいと思うんですがねぇ
142 :
デフォルトの名無しさん :2009/06/07(日) 21:46:18
ただし向こうでC#の名前を出すなよ面倒だから
textbox1.Text = "1"; textbox2.Text = "1" + "あ"; これを string s = "1"; textbox1.Text = s; textbox2.Text = s + "あ"; って書く意味は何が有利なの?
C#使いの大半はC++からの移行組みのせいか C++経験ない人は劣等感ありまくりだな。
業務上の都合というものが色々あってだな
"1" が別の文字列に変わったときに修正する箇所が1箇所で済む
148 :
デフォルトの名無しさん :2009/06/07(日) 21:51:09
うぜーな、自分で考えろ、sの定義行書き換えたら一斉に変更がきくってだけだろ。死ね。
初心者は保守性第一に書くのが吉。
150 :
デフォルトの名無しさん :2009/06/07(日) 21:52:37
C++荒らしの自演だろ、アホくさ
>>148 それだけじゃねーだろ。コンパイル結果見ろ。見て分からなきゃ市ね。
155 :
デフォルトの名無しさん :2009/06/07(日) 21:56:03
C++も極めればそれなりに使える、自演C++厨房は巣に帰ってガンバレ
C++に過剰反応する奴はもう寝ろ。疲れてるだろ。
コンパイル結果はJIT次第だ、ローレベルの話がしたくて仕方がないC++坊は無視
158 :
デフォルトの名無しさん :2009/06/07(日) 21:58:37
>>156 あのさぁ、過剰反応つーか、埋め尽くすなよって話だろ
ここなんのスレだよ?言ってみろ
>>157 ← JITがどういう処理をしてるか分かってない奴。
>>158 反応しないでスルーできないのか? スルーしたら埋め尽くされないの。2ch初心者?
おまえみたいのがいるから荒れるんだよ。
ほっとていも、ほっとかないでも酷有様、つか埋め尽くし犯人お前だろ >> 160
だまんねえと改行で埋めるぞ だまれ
>>158 【魔力】書き込むと願いが必ず叶うスレ【強力】409
だろが
C++の人アタマおかし過ぎ
"1"が他に置き換わるような設計してる時点でミスですよ僕に言わせれば
心療内科へいって治療してもらえ
クラック対策だろjk
メソッド内部で書かれたsは定数として処理されて出てこないよ 上でも下でも出力は一緒ね、メンテの問題だけね、変なやついるから相手すんなよ
出力が違うと思ってた奴は一人もいないのに偉そうに説明すんな。
>>171 分かってないな。そんな話じゃないだろ。
つまらん話で発狂するなよ
よほどコンプレックスがあるのだろう。
もりあがってまいりました
向上心なければどの言語でも無駄って事を知れ C++ の人
おい黙れって言ってるだろ
黙ったぞ
>>157 ふつうに考えてC#のコンパイル結果ってILの話だと思うぞ。
>>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 + "あ";
}
最初の質問の例を一旦コンパイルした後、ディスアセンブルするとこんな感じになる。
ほとんど最適化されてない。
ディスアセンブル? バイナリをアセンブラにすることなんだが。
184 :
デフォルトの名無しさん :2009/06/07(日) 22:39:25
メソッドのインライン展開が行われたりするのは実行時なんだが、それを知っているんだろうか。
>>182 ILやメタデータって string s のローカル変数名を保持してんの?
もしそうなら恥ずかしい名前つけれないんだが。
>>184 そんなことは当たり前のことだから省略した。長かったからな。
>>185 そう。だから.NET用の難読化ツールとかが出回ってたりする。
前のスレでも話題になった。
>>185 保持はしていないね、直接定数をロードしている。
ちなみに const string s = 1; としてしまえばどちらも一緒。
.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 :
デフォルトの名無しさん :2009/06/07(日) 22:50:03
フィールドと違って最適化で消えることはあるけど基本的には保持される
じゃあディスコンパイルしたらどうやって
>>182 の sって名前を特定したんだ?
>>182 はガセ?
いちいちツッコミどころかC++厨房うぜぇーって感じだな
ガセではない。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 }
reflectorでぐぐれ
ああ、s2になっているのは、ローカル変数がたまたまsという 名前になっているのではないかと疑ったので変えてみた。
>>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
まっ、こんなのはコンパイラのバージョン次第で何でてるくかなどコンパイラの作り手の勝手なわけですが。
/oの有無の違いに決まってるだろjk
197 :
デフォルトの名無しさん :2009/06/07(日) 23:01:27
pdbファイルが同じディレクトリにあったらildasmが読んでるみたいだ アセンブリ自体には含まれない
しかしなんで string s 使うか直書きするかの違いがILDの話になるんだと…… おかしくね?
試したらアセンブリ自体には含まれないな。冷や汗かいたぜ。
アホのC++坊よけには丁度いいかもしれんけど
結論:string s 推奨。
あんだけ荒れてたのにスレ止まった・・
C#の話題、C++であってもC#と関連する話ならいくらでもレス付けますがな C++サイコーっていいたいなら巣に帰れって事
C++サイコーなんて主旨の書き込みはどこにもないわけだが。 一人必死でC++叩いてる奴が荒らしてただけだよ。
まったくこれだけ書き込みまくっていけしゃぁしゃぁと、死んでしまえw
一人汚いレスばかりする人がいますな。
C++の人さ、努力って大事だよ、ちゃんと勉強してC++使えるようになろうな そしたら、こんなスレッドで嫌がらせなどしなくても自信もって生活できるようになる。
ちょっと話変わるけど、Visual studio 2010でC#のインテリセンス変わったよな。 インクリメンタルサーチ式になったけど、あれはもう旧式に戻らないのか?オプションに設定項目はなかったが 進化だとしても旧式も用意して欲しいもんだ
え?
>>207 そうやって煽ってるのはおまえ一人だけなんだが。さっさと消えろカス。
C#勉強中です。 Google LABSのソースコード検索をマニュアルの補助に使っているのですが、 ちょっと疑問に思うコードがあったので教えてください。 リソースの解放を確実に行うため、usingを使ってスコープを定義すると いう方法があると思うのですが、そのコードではこう書かれていました。 SQLiteDataReader reader; using (reader = command.ExecuteReader()) { 何かの処理 } この様にusingの外にDataReaderを定義して、usingの終わりで確実に Dispose()されるのでしょうか?
すまん変なところで送信してしまった。 SQLiteDataReader reader; { try { // 何かの処理 } finally { if (reader != null) ((IDisposable)reader).Dispose(); } } と同等だけど using (SQLiteDataReader reader = command.ExecuteReader()) { // 何かの処理 } のように宣言することが推奨されている。
>>212 using が実は現状確実にDispose してくれないという話的には Dispose され
ないと答えるけど、その話を除けば普通に
using(SQLLiteDataReader reader...)
とした場合と同等レベルには Dispose される。
これとそれの違いはスコープぐらいかな、意図がそれだけだと正直わか
らんが。
216 :
212 :2009/06/08(月) 04:38:37
>>213-215 ありがとうございました。
GCがいつ実行されるか分からないというのは一応承知してます。
安心してusing内に書くようにします。
>>216 あー。GC とかは関係ない。
説明すると、現状の using には Abort されたときの耐性がない
という話。
インスタンスが生成された直後とローカル変数に代入されるまでの
間にスレッドが Abort されれば Dispose は呼ばれない。それも
含めて Finalizer が必要な理由にもなっている。
と思って今確認したら try の外でやってるし…なら try に入るまで
かな。
めったに問題になることじゃないので記憶の片隅においておくだけで
いい知識だが。
218 :
212 :2009/06/08(月) 05:59:16
>>217 ありがとうございます。
今の自分の知識ではお話の半分ほどしか分かりませんが、
滅多に問題になることはないということも含めてメモっておきます。
あるフォームに対して、サイズ変更枠が付いたままタイトルバー有り無しの 切り替えをしたいと思い、フォームのコンテキストメニューから「切り替え」を 選択した際に、タイトルバーをなくす場合はフォームのTextを空にして ControlBoxをfalseにしています。しかしControlBox=falseかつText="" という操作をすると、それ以降Application.Exitで終了したときに FormClosingイベントが呼ばれなくなってしまいます。 フォームの終了時に設定を保存したいのですが、終了処理はどこで 行えばいいでしょうか。よろしくお願いします。
>>219 操作中に例外が発生してるんじゃないかな。
そうすると何も起こらず終了しているように見えることがある。
コントロールの存在・状態チェックはしっかりやろう。
221 :
219 :2009/06/08(月) 13:39:01
>>221 というか、Application.Exit()じゃなくてメインのフォームをクローズするのが普通じゃないの?
>
>>222 そうですね、よく考えたらサブのフォームからでも
MainForm.Close()ってすればいいんですよね
Application.Exitの事は忘れます。ありがとうございました
二つの配列を一つにまとめるにはどうしたらいいでしょうか? int[] a = {1,2,3}; int[] b = {4,5,6}; ↓ int[] c = {1,2,3,4,5,6};
c = a.Concat(b).ToArray();
225> 出来ました。ありがとうございます(_ _)
Window Formの初期化のタイミングとして、 1.コントラクタのInitializeComponent();の後、 2.Loadイベントハンドラ内、 3.フォーム表示直後のShownイベントハンドラ内 の3つがあると思います。 1,2と3はフォームが表示される前か後ろかという違いがありますが、 1と2ではどういう違いがあるのでしょうか?
newしたときに呼び出されるか表示とかしようとしたときに呼び出されるか
C#ってASP開発できるんですか?
ASP.netなら出来る
>>228 なるほど、ということは、
コンストラクタ→New後、フォーム表示前に一度だけ実行
Loadイベントハンドラ→フォーム表示前に実行。リロードしたら再度実行される。
Shownイベントハンドラ→フォーム表示後一度だけ実行(リロードしても実行しない)
くらいに考えとけば良いですか。
普通、Windows Forms にリロードという概念はない。
〜Changedっていうイベントはオブザーバーパターンなんですか?
>>232 ・・・もう一度マニュアル読んできます。
ありがとうございました。
イベントはイベントだろ
今日なんかあるの?
237 :
sage :2009/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度めの表示が行われません。 どこがまずいんでしょうか。
public static List<T> a = new List<T>(); ↑静的なListって可能なんですか? どうやってメモリを確保しているんですか。
>>237 そのコードだけで判断しろってのも難しいが、ひょっとして
C# の Array(string[] とか) のインデックスは 0 から始まるぞ。
それはさすがにOK?
>>240 正確には、そのクラスが初めて使われるときね。
>>237 一応の確認だけど、そのFileSystemWatcherはVSでツールボックスからD&Dしたものだよね?
243 :
238 :2009/06/08(月) 22:00:57
>>240-241 へー。
静的なのか動的なのか、分かったような分からないような…。
ありがとうございます。
初めに表示するメインフォームがアクティブにならずに起動することがある ビルドして何もクリックしてないのにキャプションバーが灰色になってる ウィンドウズのバグ?
すぐ Windows のバグ? とか聞く奴は、死んだ方がいいと思うよ。
2DMAPエディタを作ってみたいと思います。配列は必要というのはわかりました どなたか知恵を貸してください。設計とか初めてなので><
アイコンエディタでも描いてろ
>>246 二次元配列使うとやりやすいと思う
int[,] ってやつ
後は
画像を分割して描画する(g.DrawImage)
バイナリ(orテキスト)でそのデータを保存する
保存したデータを読み込む
クリックした場所を取得する
等々
最低限上の機能は必要
そのほかマップの大きさだとかも必要だろうし
スクロールも必要
249 :
デフォルトの名無しさん :2009/06/08(月) 22:30:06
StreamReader(じゃ無くてもいいのですが)を利用して 単純にファイルを開くだけの処理を記述した場合、 1Kと100Mのファイルでは、オープンにかかる時間は違うものでしょうか? 挙動を見ると、単にファイルを開くだけ(Readしない)だと、 どちらも大して時間がかからないのですが、 大きなファイルは開くだけでも時間がかかるといわれまして。 試したところでは、大差ないので、読み込まずに開くだけであれば差は無いのかと 思ったのですが、違いがわかるかた教えていただけますか?
言われたんだろ?言った奴に根拠を聞けよ
>>243 static と言いつつ、静的(コンパイル時決定)じゃない。
あれにstaticって名前が付いてるのはC++を意識しすぎた結果。
実際にはクラス変数とでも呼ぶべきもの。
>>249 違わない
その人は何か既成のアプリと勘違いしてるんじゃない?
>>249 それはファイルシステム次第、ドライバ次第だな、StreamReaderの仕事はOSにリクエスト出すまで
OSの仕事はドライバにリクエストを出すまでだ。
ファイルを開いただけで読むことをしないんじゃ、 基本的にファイルサイズによる差は起こらないはずだよね。 ほかの人の言ってるようにデバイスによる差(ネットワーク上のファイルとかフロッピーディスクとか)による差は当然ある。
>>252-254 即レスありがとうございます
やはりそうですか。助かりました。
ファイルシステムやドライバをもっと勉強してみます。
256 :
sage :2009/06/08(月) 22:45:24
>>239 なるほど。
たしかにArrayのインデックスは0からで、
0(つまり1行目)ではなくて2行目から処理してますね。
それはそれでありがとうございますです。
しかし、やはりファイル更新の監視はうまくいかず、
該当するtmp.txtを2回更新すると、2回目には、例外が発生します。
別のプロセスで使用されているため、
プロセスはファイルtmp.txtにアクセスできません。
だそうです。
257 :
sage :2009/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];
}
>>256 その例外が言ってる通りじゃないか。
ほかのプロセスが掴んでたらファイルが開けないことがある。
>>255 勉強する必要はないかと、当の本人に聞くなり、問題のブツで試してみればいい。
組み込み用のハードディスクに突然の電源断に耐えられるように設計された、書き込みバッファの無いHDが
そういう問題があって、スレッド使って対処したという苦労話は聞いたことがある、ただ.NETが取り扱うハードウェアというと、
通常のWindowsかモパイルCE系だと思われるが、そんなハードディスクなど聞いたことが無いね、
だからといって無いとは言いきれないので、問題のブツで確かめてみるしかないのでは。
260 :
sage :2009/06/08(月) 22:57:14
>>258 なるほど。
System.threading.Thread.Sleep(1000);
でとりあえず解決しました。
サンクスです。
すいません C#で簡単なアニメーションさせたいので bmp等の画像描画処理について詳しく書かれているサイトってわかりますか? 初心者なのでできるだけ詳しく書かれているところがいいんです。 よろしくお願いします。
他のクラスからprivateなメソッドを無理やり使う方法を教えてください
いくらでもあるよ
くり返しのところを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]); } }
取りあえず、ヒントもらったらググる位しようや
このスレには優しい人とそうでない人がいます。
んなもん当たり前だろ
MSDN にもあるし、いろんなところにあるよ。 Reflection とか MethodInfo とかで探してみ。
ありがとう。
どんどんラベルを追加してるだけのような。
C#にはVBのWithに相当する機能はありますか? クラス1.プロパティ1 = x; クラス1.プロパティ2 = y; というのを With クラス1 .プロパティ1 = x; .プロパティ2 = y; End With みたいに書いて入力の手間を省きたいのですが。 Withを使うとVBの場合は実行速度も少し上がるそうですが。
ありません。
>>274 インタプリタなら速くなるのは分かるがVB.NETでも速くなるのかな。
速くなるならC#でも深いところにあるクラスは一度ローカル変数に代入してからのほうが速い?
>>241 「そのクラスにアクセスするより前に一度だけ実行される」ことが
保障されているだけじゃなかったか?
>>274 全く同じ機能はない
初期化時限定のオブジェクト初期化子くらい
つーか、With って .NET ではシンタックスシュガーじゃなかった?
>>278 > 「そのクラスにアクセスするより前に一度だけ実行される」ことが
> 保障されている
規格上はそうなってた気がする。
実際は、たいてい直前。
>>277 多分JITコンパイルで最適化されるんじゃないかなその程度
ないんですか。残念です。 この程度なら、プリプロセッサあたりで処理してくれてもいいと思うのは私だけでしょうか。 コントロールの初期設定とか、同じ名前空間やクラス名がずらっと並んでるのを見ると、 もうちょっと楽にコーディングできる手段があってもよさそうに思うのですが。
インテリセンスがあるからコーディングの手間はさして変わらん。 コードが汚くなるからwithを採用しない言語は多い。
>>282 初期設定なら似たような事はできる
var tmp = new Hoge() { A = 10 , B = 30 };
A,B はHogeのプロパティーまたは変数
VBにあってC#に無い寂しい機能はLINQToXmlのXMLリテラルかな。 これがあったら、withどころか究極のデータセッティングができるんだけれど……
>>284 なるほど、そういう書き方もできるんですね。勉強になります。
>>287 確かに、オブジェクトをいちいち作ってやれば同じことになりますね。
withほど簡略化はできませんが、多少は楽が出来そうです。
コード的にもメリットがあるみたいですし。
リンク先のような場合、
ds.Tables("Customers").Rows
がそれなりに処理重そうだから無意識に一度ローカルに代入してるな。
ただ
>>288 のような軽いメンバアクセスはそのまま見ちゃってるなぁ。
イベントで this.xxxでアクセスするより senderをcastするほうがいいってことか。
キャストの方がコスト高いだろ
ますますはまってます。 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]); }
拡張プロパティってどう書くの?
書けない
ファック!ファック!ファック!!
クラスつくるとき class testint{ private int a; } ってやって testint test=new testint() なんで testint test だけで実装できないんだ。わざわざ無駄な手間かけさせる意味は? あと、なんでtestint()の最後、何もない括弧をつけなきゃいけんのだ。
>>297 CかC++から来た人?もしそうなら、
クラスは常にポインタ型(のようなもの、ポインタ演算はない)。newしなければnullが入っている。
という短い文章で分かってほしい。
testint test=new testint()と打つのは、Visual Studioとか入力支援が良くできたところで書けば案外大した手間でない。
クラス名を2度書くのが嫌ならvarがある、ローカル変数限定だけど。
()が要るのはなぜ?というのは俺も思うところだけど。
コンストラクタだから。引数のないメソッドの()も省力しないだろ。
300 :
298 :2009/06/09(火) 03:27:50
>>299 ありがとう、納得した。
C++はnew hogeで通るし、引数があっても括弧を省略できる場合のある
VBとか使っていたからそこまで考えが及ばなかった。
>>298 c++を見てみました。
c++なら
class testint{
private:
int kazu;
}
testint test;
test.kazu=10;
これでいいのか・・・
newとかいうのはオブジェクト指向で必ずしも必須というわけじゃないんだね。
コンストラクタも自動的に呼び出されるのか。
c#とはずいぶん違うんだね。初心者にはc++のがいいのかな
c++のnewはヒープに作る場合
c#のnewはどこのメモリを使うん?
字は読めても話の流れが読めない人って誰?
>>303 C++ は new の有無でスタックはヒープかわかれるけど、
C# は class か struct かで分かれる。
class なら new したのはヒープに、
struct なら new は単なるコンストラクタ呼び出し、スタックに取られる。
struct でもわざわざ new しないと行けない理由は、
その方が構文解析が楽(後々他の構文追加しやすい)とか、
初期化し忘れを防ぐためにわざわざ面倒な構文にしてあるとか、
class とそろえるとか、そういう理由だと思う。
struct は new してもいいがしなくても構わないぞ、ただし全メンバーをセットしてからでしか使えないが struct の new は引数無しなら、全フィールドに0入れるよという指示で、それ以外なら指定の定型初期化を処理するという事ではなかろうかと。 最近は default というキーワードができて、二重機能っぽくなってるいけれど、これはジェネリックの都合かなと。
それと、Cでいう所の自動変数を宣言する場所で構造体を宣言すると、スタックに乗りそうな予感がするものだが たとえば void Test() { int tmp; Action a = () => { tmp = 3 ; }; } このtmpは、スタックに取られているとはどうにも思えない 内部的には勝手JITの勝手というのが実態かと。
HttpWebRequestクラスでリクエストヘッダーを読み取ったりするとき UserAgentとかkeep-aliveプロパティは取得できるのですが (<HttpWebRequest.UserAgent>プロパティ,<HttpWeqRequest.KeepAlive>プロパティ) Host,Accept-Language,Accept-Encoding,Accept-Charsetプロパティが読み取れません。 読み取り方をよろしくお願いします。また、ヘッダー情報を編集してリクエストストリーム に流せるかどうかも教えていただきたいです。
Console.WriteLine( string.Format( "{0,4:f2}", 10.0 ) ); Console.WriteLine( string.Format( "{0,4:f2}", -10.0 ) ); こんな感じで作った文字列の桁を揃えたいんだけど、うまくいきません。 上の例だと 10.00 -10.00 となります。 マイナスの符号があるときになんとかしたいんだけど、 うまいことやる方法はあります?
>>308 Requestでヘッダを「読み取る」必要があるのかどうかって話はあるが
直接プロパティになってないヘッダはHeadersプロパティから取得設定できる
>>309 セクション区切り記号「;」を使ったカスタム書式指定かね
{0,5: 0.00;-0.00}
ところで小数点以下2桁有効だとフィールド幅4は意味がないと思うけど
>>307 それはラムダ式(クロージャ)が影響している。
() => { } を内包するクラスが暗黙に作られてそのメンバにtmpがあるはず。
>>311 ごめん実はそのあたりよくわからなくてテキトーに書いてました
もっと詳細を言うと、x,y,zを持つポイントクラスがあって
始点:( x1, y1, z1 )
終点:( x2, y2, z2 )
みたいな感じで小数点以下3桁で計6桁ぐらいで書き出したいときの
桁揃えという話でした。詳しく書かなくて申し訳ない。
>>310 回答ありがとうございます。
Webスクレイピングをやっていて、リクエストしてもうまく次のページに行かないんです。
Postされるべきデータ(トランザクショントークンとキーワード)はバッチリだと思うのですが。。
(Firebugを使って手動で動かしたときのリクエストヘッダーやPOSTしたデータの中身が
確認できる)
ヘッダー情報のリファラーが監視されてるみたいでそれについては確認できたのですが、
それでもうまく行きません。もちろんクッキーについてはクッキーコンテナをリクエストに
かませてますし、他に思いつくのが他のヘッダー情報も監視されているかもということです。
そこで自作プログラムのリクエストのヘッダー情報とFirebugで手動で動かしたときに
確認できるヘッダー情報を見比べて、必要あらば修正してリクエストに流そうと思ったわけです。
310さんの言うとおりに
List<string> list = new .........
for(int i =0;i < req.Headers.Count; i ++)
list.add(req.Headers[i];
で取得してみたのですが一行しか取得できないんですけど。。書き方が違うんですかねぇ(^ ^ ;
長文スマンです。
とりあえずHttpWeb「Response」だよな?
>>315 げ、ひょっとして自分のリクエストのヘッダーを確認するのって
HttpWebRequestからはできないんっすか。。???
ちょっとレスから拾ってみたいと思います。。。
事情は了解 それってデバッガでステップ実行すればよくね? あとは別のパケットモニタアプリ使うか
WireSharkか何かでパケットキャプチャして本当にブラウザと同じリクエスト飛んでるか調べたら? その方が手っ取り早い気がする。
リロードしてなかった。すまぬ。
>> 318 WireSharkは友人にも進められて検討してるのですが、 修正の必要が出てきたときにどうやって書き込めばいいのでしょうか? コードサンプルがあるとありがたいっす。
HttpWebRequest req //略 req.Headers.Add(HttpRequestHeader.AcceptEncoding,"gzip"); // req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip"; も可 何が困ってるのかイマイチ伝わんね。
321>> 文章力なくてすみません。。 321さんが書いて下さったみたいなコードサンプルがようするに欲しかったんです^^; レスありがとうございます。
ええええええええええええええええええええええええええええええええええええええええええええええええ
うるさい
321> あの〜、やってみたんですけど req.Headers.Add(HttpRequest.Header.Host, "HostName"); って書くと'Host' ヘッダーを直接変更することはできません。 って出ちゃうんですけど。Hostの書き換えは無理??
いいよ 1から10まで聞かないとできない奴は排除したれ
public はクラスの外からのアクセスを許可し、private は許可しないみたいですが それならpublicだけでよくないですか?
人間はミスする生き物なので、触れて欲しくない要素は外部に公開しないようにしております。 全員が全員ドキュメントをキチンと読んで、万に一つのミスも犯さないようなパーフェクト人間であれば全てpublicでも良いでしょうね。
時そばで、勘定中にカウンタを外部から書き換えられちゃったから 1文ごまかされちゃったんだよね。
C# 2008で質問です。 非表示のフォームにDataGridViewを貼り付けてあります。 ここにReadXMLでデータを読み込んで、DataGridViewからデータを取り出そうとしたら どのセルも空白のままでした。 一度でもフォームを表示すれば、そのタイミングで実際の読み込み動作が行わて セルにデータが入るのですが、 非表示のままでデータをDataGridViewに反映させる方法を教えてください。
335 :
デフォルトの名無しさん :2009/06/09(火) 19:26:21
DataSet使おうよ…
VCEEでPen p=new Pen()をつくって Form1にg.drawline(p,0,0,100,100)とかやったら 書けるんだけど、 画面切り替えたら消えちゃうんだけど消えないようにするにはどうやるの?
また描く もしくは,なんかDoubleBufferみたいなプロパティがあればtrueに
Paintイベントで描く
339 :
デフォルトの名無しさん :2009/06/10(水) 03:26:06
340 :
デフォルトの名無しさん :2009/06/10(水) 09:25:21
ソリューションエクスプローラー ソリューション’game’(1プロジェクト) └game ├ソースフェイル │├hello.cpp │└helo2cpp ├ヘッダーファイル └リソースファイル となっています。 helllo.cpp #include <stdio.h> int main(void) { printf("こんにちは!\n"); return 0; }
341 :
340の続き :2009/06/10(水) 09:26:03
helllo2.cpp #include <stdio.h> int main(void) { int a,b,c; a=1; b=2; c=a+b; printf("a+b=%d\n",c); return 0; } とプログラムを書いたのですが、デバッグするとエラーが出ます。 main(void)が2つあるとプログラムが正常に作動しないんでしょうか?
スレ違い どっかで聞き直すならエラーぐらい書けよ
mainは一つでなければなりません。
344 :
デフォルトの名無しさん :2009/06/10(水) 10:07:46
>>343 そうですか。よくわからないけど研究してみます。
345 :
デフォルトの名無しさん :2009/06/10(水) 10:28:53
C++の基礎を一通り勉強してみて、やっぱりC#にしようか悩んでるのですが・・・ 作りたいアプリはあるウェブサイトの更新をするアプリです。 HTMLフォームのユーザビリティに嫌気がさしてきたもので。 スクリプト言語ですがPHPとかActionScriptとかJavascriptを仕事で使ってます。 JAVAもできます。 条件としては 1、オブジェクト指向でプログラミングできること。 2、なるべくwindowsに色々インストールしなくても使えること。 3、今後も役に立ちそうな言語であること C#って.NETフレームワークが必須なんですよね? C#って.NETフレームワークがインストールしてあったら、 他に何かランタイム無しで動くのですか? 2はインストーラーを作ればそれほど気にすることはないって聞いたけど そういうもんでしょうか?
346 :
デフォルトの名無しさん :2009/06/10(水) 10:45:56
.NET2.0ターゲットならたいがいランタイムは入ってるからそんなに気にしなくていいよ 少なくともJavaよりは嫌われない
ClickOnceインストーラを使うのであれば、依存関係は勝手に作ってくれるしランタイムも言語別の細かいところも自動。 自分が何か手をいれる必要はないので意識はしなくてもいいし、自分はした事が無い。
348 :
デフォルトの名無しさん :2009/06/10(水) 10:54:11
Silverlight使えば? Webの知識活かせるしクロスプラットフォームだしランタイム超小さいよ
347に追加、C++からというならひょっとすると、C/C++コードとの相互運用を入れているかもしれないが、これが入っている時はClickOnceが使えないので注意。 一般のインストーラを使って全部手動でやるきる必要がある。 それとClickOnceインストーラというのは、今はそう呼ばれていないかもしれない、プロジェクトのプロパティーの発行タブで設定して作れるインストーラの事。
>>345 まあHTMLフォームの代わりに使いたいと言ってるんだから、
ネイティブコードのモジュールを使いたいなんてことはそうそうないだろ。
.NETはメジャーな画像形式なら最初から扱えるし。
普通にC#でフォーム作って必要な機能を用意すればいいんじゃないかな。
ClickOnceええよ。
イメージとしてはサーバーに置かれているソフトを
ブラウザのローカルキャッシュにコピーして、そこで起動する感じ。
自作のフリーソフトをzip版とClickOnce版と両方提供してるけど、
ClickOnceならVSからリリースするだけで、zipをアップロードする必要もないし。
>>349 > 347に追加、C++からというならひょっとすると、C/C++コードとの相互運用を入れているかもしれないが、これが入っている時はClickOnceが使えないので注意。
> 一般のインストーラを使って全部手動でやるきる必要がある。
ダウト。やりようによってはできる。
>>351 実行時に別のインストーラ起動するって奴だろ、ClickOnceのHowToに書かれていたのでやってみたが
凄いめんどくさいぞ、それにそれをすると自動更新は役立たずになるし
MSのサイトにも書かれていたが、ClickOnceインストーラとmsiインストーラの使い分けの基準として .NETの範囲で収まっているかどうかという所がポイントだと思われる 無理をしてClickOnceを使うよりはmsiの方がシンプルになるケースは少なくない。
Google Chrome でも使ってるけどな。>ClickOnce
ClickOnceはお手軽インストーラではあるけれども万能インストーラではないからな
>>351 違うだろ。C/C++ コードとの相互運用って、P/Invoke とかだろ?
別に ClickOnce アプリでも、P/Invoke やら COM Interop やらできるわけだが。
ClickOnceってサイトに来てもらえなくなるんじゃないの? 有料ソフトならいいけど
C#を勉強しだして業務アプリは大体こなせるようになりました 趣味でTelnetクライアントやFTPクライアントを作ってみたいのですが、 何か参考になる書籍やサイトがあったら教えてください RFCは勉強中です
RFCがまともなんでないかい Telnetのネゴシエーションプロセスとか全く無いのとか FTPはpassive対応してなかったりcontrolとdataの二本が必ずセットになってたりする
361 :
デフォルトの名無しさん :2009/06/11(木) 00:00:30
C#勉強しようと思ってるんですけど、とりあえずTurbo C#とか 入れればいいんでしょうか? とりあえずサンプルとかをコピペして動くことを確認したいです。 作ろうとしてるものとか目標とかは今のとこありません。 あとお金も無いんですけど、 なんか購入する必要ってあるんですか?
妙なこだわりがないならVisual C# 2008 Express Editionにしておけ 買う物は特に必要なし
Formを回転させたいのですがヒント下さい。 WPFだとあるかな?と思ったけど、ぐぐってもそれらしい情報が見つかりません。 #DirectXの範疇になるのでしょうか?
ツールボックスにあるポインターってなんすか?
ポインターとはポインターです、糞して寝てください
368 :
デフォルトの名無しさん :2009/06/11(木) 00:34:21
どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッドなのに厳しいっすね
質問したいんじゃなくて喧嘩うってんだろw
つまり、金を貰いつつ社内でC#のお勉強か!羨ましい限りだな。
>>365 WPFならコントロールの回転はできるが、ウィンドウ自体の回転はできなかったと思う。
何で教えてくれないのか不思議で仕方ないっす
リアルでぶんなぐられないように十分注意することだ
VisualC#2008で質問があります。 おなじ画像をくり返し表示するのに、ツールボックスを使わず配列にしてみました。 namespace WindowsFormsApplication1{ public partial class Form1 : Form{ private System.Windows.Forms.PictureBox[] pictureBox; public Form1(){ InitializeComponent(); string photo = @"C:\photo.jpg"; for (int i = 1; i < 5; i++){ this.pictureBox[i] = new System.Windows.Forms.PictureBox(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox[i])).BeginInit(); this.pictureBox[i].Location = new System.Drawing.Point(12, 22 + i * 200); this.pictureBox[i].Name = "pictureBox[i]"; this.pictureBox[i].Size = new System.Drawing.Size(300, 200); this.pictureBox[i].Image = Bitmap.FromFile(photo); this.Controls.Add(this.pictureBox[i]); } } } } で、コンパイルは通るのですが、エラーになります。 NullReferenceExceptionはハンドルされませんでした。 オブジェクト参照がオブジェクトインスタンスに設定されていません。 ってことなのですが、なにがNullになっているんでしょう? なんかポカミスしている気がするんだけど…。
private System.Windows.Forms.PictureBox[] pictureBox; がnull
デバッガで追っかけてけばすぐわかるよ 「自動変数」タブな
pictureBoxは何で初期化してないの?
早速サンキューです。 すばやっ。 助かります。 pictureBox = new PictureBox[5]; を追加して、無事表示できました。 ところで何度見ても、自動変数タブがないんですけど、…。 左から、ローカル、ウォッチ、呼び出し履歴、イミディエイトウィンドウ、出力。 どこに消えたかご存じないですよね?
ブレイク中のメニューのデバッグ>ウィンドウにあるはずだが
>for (int i = 1; i < 5; i++) ここは大丈夫? pictureBoxは0から4までの5つの要素のうち 1から4までの4つを使うことになるわけだけど
文字列の配列をstirng(羅列string, string, string, ...)に変換するにはどうすればいいですか?
日本語でおk 区切り文字を挿んで文字列を連結したいって事なら、string.Join
private void button1_click(object sender,Eventargs e) の()の中のobject sender,Eventargs e って何ですか
384 :
デフォルトの名無しさん :2009/06/11(木) 09:07:17
senderにはイベントを発生させたオブジェクト eには必要に応じてイベントに関する情報 が入ってる
イベント送信者とイベント引数
しーぷっしゃー
らめぇ
あざっす
テキスト(たとえばtextBox)と画像(たとえばpictureBox)をまとめて扱う(表示とか移動とか削除とか)にはどうしたらよいですか? ボタンなら、ボタンの背景(BackgroundImageプロパティ)にjpgファイルを指定できるので、表示するときに一度に表示できます。 textBoxのプロパティを見ても、背景のイメージを設定できないみたいなので…
ユーザーコントロール作ってまとめたら?
391 :
デフォルトの名無しさん :2009/06/11(木) 12:53:40
文字列の後ろを透けさせて背景画像を表示するのは無理 TextBoxそのものを自作するかWPFへどうぞ
>>390 サンクス。ユーザーコントロールというのはまだ作ったことがないので、勉強がてらやってみます。
>>391 サンクス。やっぱり。
でもまあ今回は、背景が単色なので、なんとかFormベースでやってみます。
TextBoxそのものの自作って、ユーザーコントロールってことですよね?
ところでWPFで、ここみたいにフランクに質問できるとこってないですか?
質問があります。 サムネイルベースのファイラーみたいなものを考えています。 サムネイルをウィンドウ内でドラッグ&ドロップして配置を移動したいです。 その場合、ドラッグ&ドロップの処理で必要なことは…。 ・コントロール(pictureBoxとか)をドラッグ可能にする。 ・フォームでドロップを受け付けるようにする。 かと思います。 フォームでドロップを受け付けるのは、 ・AllowDropプロパティをTrueにする。 ・Form1_DragEnterのイベントハンドラを作る。 でよいかと思うのですが、 Q1 コントロールをドラッグ可能にするには、なにをすればいいんでしょう? コントロールを移動すると、コントロール同士が重なることがあります。 そのとき、 Q2 単純に重ねて表示したいときには、イベントハンドラはForm1_DrogEnterだけでいいんですか?
Control.DoDragDrop使え
395 :
デフォルトの名無しさん :2009/06/11(木) 14:16:26
>>392 >TextBoxそのものの自作
ユーザーコントロールじゃなくてControlから直接派生するカスタムコントロール
描画も入力も全部自前で書くガチ自作
継承ってのは機能の追加しかできないの? たとえば myclass1が10個の変数と3個の関数を持ってるとして それを引き継いだmyclass2は 7個の変数と4個の関数を持ってるとか できない?
myclass2をmyclass1として扱いたい場合どうするんだ
object思考の基礎をやり直したほうがいいんじゃないか? myclass1やmyclass2をちゃんとobjectとして切り出せてないからややこしくなる。
>>396 そういう場合はclass1とclass2から共通な部分を取り出して新たな基底クラスを作るのがデフォ
今
class1 - class2
↓こうする
baseclass - class1
|_class2
基底クラスのメソッドやフィールドを消せたりら、上位クラスへのキャストができないのだわ
FileStreamをStreamにキャストしたりとかね
Office2007が入ってるとTextBoxRendererやVisualStyleRendererのTextBoxが標準のルックスじゃなくなるんだけどどうすればフォームに配置しているTextBoxと同じ用に描けるの? Application.EnableVisualStyles()をコメントアウトってのはナシで。 この際Win32APIでもなんでもいいから教えて。
画像の移動の件です。 「Control.DoDragDrop」でぐぐって、 解説サイト見ながらプログラムを作ってみたんですが、 完全にどつぼにはまってます。 どっかにプロジェクトをアップロードしたら、このスレで添削してもらえますか?
ListViewじゃダメなの?
ListViewだと、表形式での表示になると思います。 エクスプローラでいうところの表示-縮小版のような形で操作したいのです。
C#で他のプロセスのコマンドライン引数を取得したいのですが、 なにか方法ありますか? たとえばWordのプロセスが開いているファイルのPath+FileNameを取得したい。
WMIでWin32_Process使うのが一番楽な希ガス
>>399 それがいい場合もあるが、まずそれというのはおすすめ出来ない。
409 :
デフォルトの名無しさん :2009/06/12(金) 10:15:09
そういうことになるから継承は良くない
他のアプリケーションのIMEの状態を取得したいのですが、 なにか良い方法ありませんか? すでにC#ではないと思いますが。。。
よくわかんないけどプロセスにアタッチしてImmなんちゃら関数で取れないかな
LAN内の別のマシン(実行マシン)で実行中の実行ファイル(exe)をバージョンアップするときに、開発マシンからコピーして上書きしたいのですが、実行中なのでロックされていてできません。 ロックせずに実行する実行ファイルを作ることってできるんでしょうか? あるいは、開発マシンからkillするのでもよいのですが、そんなことってできましたっけ? あまりC#とは関係ないかも…。
>>412 できない。Unixだと上書きだけならできるが(再起動はもちろん必要)
で、基本常に実行し、必要なときに落としたりできるのがWindowsのサービスの仕組み。利用しない手はない。
リモートデスクトップで直接終了作業する手はどうだ?
なるほど。そこでリモートデスクトップですね。 なるほど〜。 サンクス。 いまも別のマシンが別の階の別の部屋にあって、デバッグしながらいったりきたりで、いい運動になってました。
>>405 これって、C++(?)のコードですよね?
C#のコードor dll or exeはないですか?
かまわずWMIというかSystem.Management.Instrumentation使えばいい
Instrumentationいらないだろ
418 :
417 :2009/06/12(金) 14:12:12
using System.Management; ManagementClass m = new ManagementClass("Win32_Process"); foreach (ManagementObject o in m.GetInstances()) { object c = o["CommandLine"]; if (c is string) { Console.WriteLine((string)c); } } こんなもんだろ。何か異議ある?
>>415 C#の相互運用機能を使ってC#に書き換えればいいじゃん
>>405 にC++でしか実現できない点は1つもないよ
それができいなら、おとなしくWMI使っとけ
>>418 ぜんぜん異議なし。
>>419 は〜い。おとなしく使ってます。
それはそれとして、相互運用機能なんてので、C++のコードをC#に書き換えられるんですか?
知らなかった…。
それって簡単?
>>405 のコード読めるならそんなに難しくはない
そうでないなら諦めろ
>>411 アタッチについて少し調べたんですが、
スレッドのアタッチは出来そうだけど、プロセス?(たとえばWordなど)に
アタッチって出来ます?
サンプルコードを読んでいたら、以下のような記述が出てきたんですけれど、 コンストラクタを呼んで、 { } で括って最後に;って何なのでしょうか? コンストラクタの内容に追記しているんでしょうか? 匿名関数とか記法の名前が分かればググれるんですけれど、 何と呼ばれる記述法何でしょうか? public ActionResult Create(int customerId) { AddressViewData addressViewData = new AddressViewData() { CustomerId = customerId }; return View(addressViewData); }
勘でググってたらあったー オブジェクト初期化子ですかね。
うん
>>423 確かに、これはものすごい気持ちの悪い書き方だな。
ぱっと見ではなぜnew AddressViewData()のところにセミコロンがないのかが分からないし、
ブレースのあとでセミコロンがあるのかが分からない。
オレならまず間違いなく
new AddressViewData() {
...
};
にするだろうな。
趣味の自慢か?
Form2 frm2 = new Form2 とかやって、新しいフォーム作成したら Form2.csができちゃって Form1.csで作ったpublic変数とかが使えなくなっちゃうんだけど どうやったらForm1.csとForm2.csの変数や文字列を合体できる??
引数にして渡せ
Form1.cs.Concat("Form2.cs")
変数と文字列を同じ次元で語るなよ
>>429 > Form2 frm2 = new Form2
> とかやって、新しいフォーム作成したら
> Form2.csができちゃって
面白い。新しいリフレクションだなw
>>429 まじめに勉強してこなかったツケがそれだよっ!
しばらくRubyやってて久々にOffice用のCOM参照DLL作ることになったんだけど インスタンスの作り方すら忘れてる俺涙目w
日記帳
overrideって何のためにあるの?
>>437 明示しないとオーバーライドできなくするため。
オーバーライドするつもりなかったのにうっかりやっちゃったとかになると、
結構発見しずらいバグになる。
どうしてoverrideという概念があるかというレベルに見えるが
継承はバグの温床だからな、安全装置は沢山あった方がいい
現在のオブジェクト指向に関する理解から考えれば、overrideは要らない 仮想テーブルは自前でも作れる、ただ面倒臭いから言語の機能としてあれば便利だというレベルになっている。 また言語仕様で作られる仮想テーブルは書き換える事はできないが、そのような操作が必要になったら結局自前で作るわけだが、 それはStrategyパターンと呼ばれるデザインパターンでパターン化されている。
>>441 これ
> 現在のオブジェクト指向に関する理解
と、これ
> 仮想テーブル
って、全然領域違う言葉だよね?
何で混ざってるの?
443 :
デフォルトの名無しさん :2009/06/13(土) 01:13:12
使う人間が完璧なら不要 実際Javaなんかで問題が出たから付けるようにしてるんだよ そのJavaですらoverrideを明示的に付けるようになった
多数の変数を一気に同じ値にすることできねーの? int a; int b; int c; 〜〜 int z; a=2; b=2; とかじゃんく a,b,c,d,e=2; みたいな感じで。
>>444 カンマじゃなくて、イコールでつないでご覧。
File.WriteAllText(@"C:\Test.txt", "テスト書込。", sjisEnc); この、C\Test.textの前にある@マークは何の役割でしょうか?
@があると\でエスケープしない "C:\\Test.txt"とすべきところを@"C:\Test.txt"で済ます
>>442 >どうしてoverrideという概念があるかというレベルに見えるが
に対しての見解なので
overrideがないと、関数名を考えるのが面倒じゃん MyFunction( ) MyFunction_int(int n) MyFunction_intint(int n, m) MyFunction_intstr(int n, string t) とか、どんどん増える
overloadと勘違いして奴がいる模様。
overloadと勘違いして奴がいる模様。
c#の入門用ページ、 どこもコンソールアプリケーションのことしか書いてないんだけど WIndowsプログラムのこと書いたページで良いとこない?
>>454 言語自体の入門ページだと、そりゃそんなもんだろ。
Windows Forms とか WPF でググりなおした方がいいんでは。
あと、コンソールアプリで入門記事書いてるページでも、
1ページくらいは GUI に記事さいてないか?
そりゃ、C#の入門であって、.NETでGUIプログラミングをするための入門では ないから、仕方ないのでは? 前者はもう充分だから、後者に移りたいというのが質問の趣旨? それとも、前者も後者もいっしょくたにしたいという話? いっしょくたはおすすめできないぞ。
GUIプログラミング=IDEの使い方だし、めんどくさいだろ?作るの。
俺はClass personから継承してtaroをつくるとかどうでもいいことじゃなくて たとえばだが Form1のx=200,y=300のドットの色を取得して 画面を塗りつぶすとか そういうことやりたいんだが コンソールアプリじゃそういうことわからん。 IDEつくるのめんどくさいのか;;
>>458 どうでもいいけど
> Class personから継承してtaroをつくる
これは気持ち悪い
taroっていう種族がいるのか…?
>>458 class Taro キモすww
それは置いといて、
そういう話の場合、「入門」じゃなくて「サンプル」でググって、
説明読むんじゃなくてコード読む方がオススメ。
別に居ても居なくてもどうでも良いな 3年を継承して山田を作るのに山田って組があるのか?とか マジでどうでも良い
ちょっと力ぬけよ
メモリの解放のタイミングについて教えてください。 フォーム上にDataGridViewとComboBox(DropDownListとして利用)、 Buttonがあるとします。 ButtonをクリックするとComboBoxのSelectedIndexによってDataGridViewの 内容が変わります。DataGridViewはReadonlyです。 現在、初期化としてフォームのコンストラクタのInitializeComponent()の後で、 それぞれDataTableを取得して、ComboBoxとDataGridViewにバインドしています。 DataGridViewはReadonlyなので、 using(DataTable dt = …) { // 処理 dataGridView1.DataSource = dt; } と閉じてしまっても問題ありませんが、ComboBoxの方はusingで囲むと値が 表示されません。 その場合、comboBox1.DataSourceにセットしたDataTableはどこでDisposeすれば 良いのでしょうか?
Disposeはメモリの解放じゃない DataSourceとして使用してる間にDisposeしちゃまずいだろDisposeの意味的に考えて そのDataTableを使わなくなるタイミングだから、大体フォームが閉じるときでいいんじゃね 実用上はDataTableならDisposeする必要もないけどな
465 :
デフォルトの名無しさん :2009/06/13(土) 16:33:55
内容が等しいことを示すにはどうしたらいいでしょうか? class test{ int a; int b; } test x1=new test(); test x2=new test(); x1.a=10; x2.a=10; x1.b=20; x2.b=20; if(x1==x2) //等しいと表示 else //等しくないと表示 クラスは参照型なので等しくないって表示されちゃうことはわかるんだけど クラスの内容自体を比較するのはどうやんの?
IComparer
>>466 x1.a == x2.a && x1.b == x2.b
というかそれ、public ないから普通にコンパイルエラーにならんか?
そのクラスを値チックにしか使わないなら Equals とか GetHashCode とか
オーバーライドして operator ==/!= 定義する。IEquatable は・・・この場合は
まぁいいか
GetHashCodeはオーバーライドしとけ。
GetHashCodeってどんなときに呼ばれんの?
Hashtable Dictionary
Dictionaryにキーとして放り込む時とか
列が100、行数が20というデータテーブルを作ってDataGridViewで表示してるんですが、 ボタンをクリックするとテーブルに対してColumns.Addで列数を増やすように作ったんだけど、 なぜか1列増やすごとに1秒ぐらいかかる。 ぐぐったら「Debugは遅い」って書いてあるのを見つけたんでReleaseに変えてみたけど、 それでも0.7秒ぐらいかかってるみたい。 ボタンをクリックしてから画面が更新されるまで、ちょっとタイムラグがあるのが気になるんだけど、 もっと高速に列数を増やす方法はないですか? マシンはPen4/2.8GHzにメモリ2GBで、極端にマシンが遅いわけでもないと思うんですが。 OSはXP SP3に無料のC#2008 NET3.5です。
あ、データテーブルの中身はintです。
追加に時間がかかってるのか、再描画に時間がかかってるのか、 どっち?
どっちかわかりません。 追加すると自動的に再描画されてしまうと思うのですが、 どうやったら別々に調べることが出来ますか?
Stopwatchクラスで時間計ってみ
画像を縦30横30に切り取りたいのですがどうすればいいのでしょうか?><
>>479 「C# 画像 切り取り」で検索すればすぐに出てくるんだけど
縦30、横30でコピーすればOK
パネルに編集画面を描画(Direct3D)していて、 カメラ位置を移動させるためのスクロールバーを配置したいんだけど、 1発でばしっと縦横スロールバーがつけられるコントロールってありますか? やっぱり 親パネルの右に垂直スクロールバー配置、アンカーを上下右に設定、 親パネルの下に水平スクロールバー配置、アンカーを左右下に設定、 残った領域にスクロール操作の対象になるパネルを配置、アンカーで上下左右を設定 みたいにしないとダメ?
パネルってそもそも ScrollableControl 継承してなかったか?
485 :
デフォルトの名無しさん :2009/06/14(日) 21:45:46
そりゃ中に大きなコントロール入れたらスクロールバー出るけど483の用途には全く適さない
普通、インスタンス生成するときは Class名 名前=new Class名(); で生成できるのに Graphicsクラスのインスタンス生成する際 Graphics gr=new Graphics(); じゃ生成できないのはなんで? Graphics gr=CreateGraphics(); なら生成できるみたい
newさせたくないから。幼稚園児に油性マジック渡すようなもの。
幼稚園児に油性マジック渡したら キャップし忘れてすぐだめにしちゃうよね
CreateGraphics()はthis.CreateGraphics()だから。
つまり、大人の事情でそう決まってるからとしか言いようがない。
大人の事情っていうと、「仕方なくそうなってる」感じがするけど、 new Graphics() できないのは仕方なくじゃなくて、その方がいい設計だからだろ。
でもDispose()しないといけないのは何故
GDIの作法を知らない世代か。
newとDisposeは対になるものじゃないしね
Dispose()はC++からのクセだろ 別にしなくてもいいし
やんなくてもGCが回収してくれるけど、その間リソースを持ち続ける事になるからねぇ ファイル開こうとしたらいつまでもロックされてる とかよくある。 Closeすればいい?それならDisposeしちゃえよ。
>>495 ドキュメントにDispose()しろってんだからしろよ<
> しろよ< よろしくにみえた
private void Form1_Load(object sender, EventArgs e) ()内のobject sender, EventArgs eってなんですか?
イベントの発生元とイベントのパラメータ
501 :
デフォルトの名無しさん :2009/06/15(月) 14:22:47
Loadイベントに限っていえば意味はない イベントハンドラの引数の形式を統一するためのダミー
Windowsアプリケーションを製作しております。 処理に必要なデータ(CSVファイル)を、利用者側から見られないようにしたいのですが なにか策はありますでしょうか?ご教授下さい。
System.Security.Cryptographyでも使って暗号化すれば 気休めだけどね
>>502 PC内に保存するなら簡単に見られるだろ。
見にくくしたいなら暗号化かな。
簡単な暗号でいいならxor暗号で。
食いつき良いなお前ら。
508 :
502 :2009/06/15(月) 14:52:46
>>503 ありがとうございます、調べてみます。
>>504 ありがとうございます。XOR暗号、調べてみます。
>>505 Web上への配置ですか、検討してみます。
>>502 いえ、そういうのではないのですが。
そのファイルを見られてしまうとプログラム内でなにをやっているかがわかってしまうのです。
ファイルなんか見なくても何してるか丸見えだけどな
ゲームとかでネタばれになるようなのは隠したいわな
511 :
502 :2009/06/15(月) 15:25:55
Security.Cryptographyでやってみようと思います。 本当にありがとうございました。感謝します。
カジュアルハックを防ぐだけならそれでいいんじゃね。
2次元のHashtableはつくれますか? hash["abc"]["def"]のような。
Hashtable<Hashtable<T>>
>>514 ただし2次元ではない
もしくはそういう感じのを作ればおk
>>513 hasu["abcdef"]という値をキーにすれば良い
商用なら間違いなく仕様バグで訴えられるな。
>>518 hash["a"]["bcdef"]との違いがわからなくね?
実際は
abc = 重複のない3桁の数字
def = 重複のある1〜2桁の数字
なので、
>>513 さんの意見で大丈夫かなと思ったのですが。
>>519 別に汎用でなくてもかまわない。
キーが取り得る値として辻褄が合うように適宜仕様変更すれば良いんだよ。
>>523 適宜仕様変更すると汎用になるんでないかい
てか、自分でハッシュ関数作ればいいじゃん
目的に最適化されたハッシュか、汎用のハッシュか、どっちが高速かと言えば前者だな
hash[new {Fst = "abc", Snd = "def"}] ってできる?
>>528 試してない
だって俺C#の文法知らないもん
はっはっは こやつめ
531 :
デフォルトの名無しさん :2009/06/15(月) 17:13:00
new Dictionary {{"あ","A"},{"い","I"}}
532 :
デフォルトの名無しさん :2009/06/15(月) 17:15:30
<string,string>追加
534 :
デフォルトの名無しさん :2009/06/15(月) 17:27:09
わざわざそんなキモいことしなくても531で正解なんだが
一番軽いのはどーれだ
>>534 実現方法の一つで正解ってわけじゃないけど
どうでもいいわ
537 :
デフォルトの名無しさん :2009/06/15(月) 18:00:02
言語に組み込むのは、手段を統一させるため 昔C#のコンセプトについてそんなコメントがあった気がする
VC#フォームデザイナでメニューを作ったとき、キャプションに 「上書き保存)(&S)」とか入力してからダブルクリックして メニューの Click イベントを書こうとすると private void 上書き保存SToolStripMenuItem_Click(object sender, EventArgs e) ってなるのが気持ち悪くてしょうがないんだけど、 みんなちゃんと飲み込めてるの?
お好きなようにどうぞ ・実害はないので気にしない ・リネームする ・英語キャプションでハンドラを生成して、後から日本語に変更 ・先にハンドラを用意する
>>513 public struct ComplexKey<X, Y> : IEquatable<ComplexKey<X, Y>>
を作ってみるのは俺だけか?
is演算子、 as演算子って多用すべきでない?
キャストと比べても、パフォーマンス的には殆ど同じだから安心して使うといい。 キャストに失敗する可能性がある場合には必ずas,isを使うべき InvalidCastExceptionをtry-catchするような方法だと桁違いに遅い。
if (hoge is Foo) { Foo foo = (Foo)hoge; // ... } 個人的には、上よりは下の方がいいと思うとか、細かいことを挙げたらきりがないけどな。 Foo foo = hoge as Foo; if (foo != null) { // ... }
>>541 as演算子のほうがキャストより高速になる場合が多いらしい
まあそりゃチェックが2回になるからね。 でも、そんな差を気にしなければならないのはよほどタイトな処理の時くらいだし、 普通に書いた時変数のスコープが広がるというデメリットもあるから、 別にどっちでもいいレベルだと思うけどね。 なぜかやたらとここにこだわるやつがいて不思議。
上は無駄な事をしてる感じなのが気に入らない 下は変数のスコープが気に入らない scalaのswitchが使えればいいんだけどなぁ
質問です。 次のような配列があったとして、HighPriceの最大値を求めたいのですが、簡潔に書くにはどう書けばいいのでしょうか? hoge[0].HighPrice = 1000; hoge[1].HighPrice = 780; .(略) hoge[99].HighPrice = 300; 環境はVisual C# 2008です。よろしくお願いします。 自分で考えたのは、 「int maxにまず初期値1000を設定、あとはforループでまわしてmaxをこえていれば新たにそれをmaxに設定する」 というものですが、もっとスッキリさせられないものかと思ってます。 ちなみに、hoge[0].HighPriceは本日(0日前)の高値、hoge[1].HighPriceは1日前の高値・・・ といった設定。100日間の高値の中で最大値を求めたいんです。
>>547 LINQ使って
int max = hoge.Max();
HighPrice メンバみたいだから int max = hoge.Select((x) => x.HighPrice).Max(); だな
550 :
549 :2009/06/15(月) 23:15:05
あ、Max にはセレクタ指定できるのかごめん int max = hoge.Max((x) => x.HighPrice); かな
hoge.Max(x => x.HighPrice) みたいな?
あ、カッコいったか、普段あまり使わないから分からなくなるよ。
なくてもいいと思うよ。俺は見易さと統一性でいつもつけてる だけ。けど好みの問題だろうな。
554 :
547 :2009/06/15(月) 23:27:57
みなさんレスありがとうございます。
>>550 さんので無事できました。
LINQだとだいぶ楽に書けていいですね。
手元のC#本は古いせいかLINQについては載ってないので新版を買ってくるとします。
ありがとうございました!
c#で class Test{ } という何もないTestクラスを作って Test test=new Test(); ってやって、 Label1.Text=test.ToString(); ってやったら宣言してないはずのTostring()が実行されるんだけど クラスって宣言しなくても勝手にObject型を継承するようになってんの?
>>556 くそ真面目に継承階層にずらずら並べてるのがちょっと微笑ましい
558 :
デフォルトの名無しさん :2009/06/16(火) 01:49:59
>>557 スクリプト切っててわからなかった
これはひどい
2,768個・・なぜ並べたww
>>555 クラスどころかC#ではありとあらゆる型がobject継承してる。
561 :
542 :2009/06/16(火) 08:28:40
安心して使うことにする。 みんなありがとう
なんでわざわざ Program.csとForm.csに分割してるんだ Program.csは Main関数の中に Application.Run(new Form1) みたいな産業あるだけだし・・・ 意味不明
意味などないんだよおおおおおおおおおおおお!!! うふっ
なるべくpublicなクラスは分割した方が管理しやすいから フォームみたいなのだとなおさらね 関係ないけどそれを追求した結果、Javaなんかは1ファイル1publicクラスみたいな潔癖な事になっている
意味不明ってまじかよ。冗談はよせ。
foreach(item in arraylist) { if (削除条件(item)) { arraylist.Remove(item); } } てやっても大丈夫? ちゃんとインデックス使って for (int i=arraylist.Count; i>=0; --i) { if (削除条件(arraylist[i])) { arraylist.RemoveAt(i); } } ってやらなきゃだめ?
あ、arraylist の中身は重複しません
foreach中はコレクションを変更できない
RemoveAllで
1個なら消せるよね
CheckedListBoxって、項目を選んでからチェックボックスをクリックしないと チェックできませんよね。 どの項目を選んでいるか関係なく、クリックしたら即チェックできるようにするにはどうすればいいですか?
CheckOnClick
相談室の次スレ立てれんかったわ
立ててやるよ
>>567 RemoveAll が普通だろうけど、ArrayList ってことは 1.0 縛りとか
そういうの?
立てたよ
579 :
デフォルトの名無しさん :2009/06/16(火) 20:35:24
Visual C# 2008 Express Edition入れたんですけど、 ライセンス登録しないとどうなるんでしょうか? あんまパスワードとか作りたくないので、 できれば登録したくないです。 あと、どんな感じで勉強してったらいいでしょうか? javaを2年くらいやってます。あとC言語をちょびっとやってました。 くだらない質問と漠然とした質問ですみませんが 教えてもらえたらありがたいです。 お願いします。
30日で使えなくなる それだけ Javaやってたなら簡単だと思うよ ここで聞くことも無いかもしれない
581 :
デフォルトの名無しさん :2009/06/16(火) 20:43:06
一ヶ月経ったら登録しないと起動しなくなる javaできるなら勉強しなくてもいきなり使えるはず 使いながら随時細かい違いを調べていけば十分 それができないならjavaもできてないってことだ
...これだと項目を選択した瞬間にチェックがつけられてしまいますが、そうではなくて チェックボックスをクリックした瞬間とはならないでしょうか。 ちょうどチェックボックス付きの ListViewのような動作です。 それならListViewをつかえといわれそうですが、リサイズした場合に一番右側のヘッダの 右端が常にコントロール右端に一致するようにするやり方がわからないのです。
>>579 登録しなくても問題無くずっと使える
前は登録するとアイコンセットもらえるキャンペーンとかやってたけど
リファレンスもユーザーサイトも充実してるしJavaとVB足したような言語だから
たぶん難しくないよ
堂々と嘘こいてんじゃねええええええええええええええええええええええ
嘘を付く時は堂々とするとバレにくいよおおおおお
586 :
デフォルトの名無しさん :2009/06/16(火) 20:53:16
DVDイメージ版は登録いらないんだっけ
登録はWebインストール版の話
あほばっかりや
そもそもパスワードなんてあったか?
製品登録する用LiveID取得するためにパスワードが必要 LiveID持ってれば製品登録してメール送られてくるだけ
俺は登録した覚えないからなんのこっちゃと思いながらレス読んでたけど、 Webインストールだけなのね。DVDから入れたわ。
>>582 ならListViewでSizeChangedでColumnHeaderのWidthいじればいいんじゃね
ダブルクリックとかスペースキーでチェック状態変更するときはどうすんのかね
LiveIDくらいは作っといてもいいと思うぞ。 既に持ってる人も多いだろうし。
>>582 マウスイベントでマウスポインタの位置を取得して
ClickかSelectedIndexChangedあたりで選択されたインデックスの
チェックボックスの領域がクリックされたらItemCheckみたいな方法しか
ないんじゃないかね
static classって使い終わってもGCにコレクトされないの?
c#ってさ、スタドアロン(.Net Framework インストールしてなくても動くって意味で)な exe つくれる? なんていうか、DLL全部EXEに組み込むみたいな。
MONOはネイティブコンパイルできたと思うよ iPhoneでC#製プログラムを動かすだかって話の時に読んだ
なんだ。じゃあ駄目だな
数字を入力してその数字に見合った数だけの文字を表示するためのプログラムを組んでいるのですが 二重ループがうまくいっていないらしく希望の結果になりません、修正点を教えてください 希望のプログラム 5(ここは任意の数字を入力) * ** *** **** ***** このように任意の数字を入力しそれまでの間1づつ増加した*を並べたいです 組んだプログラム #include<stdio.h> int man() { int a,b,c; scanf("%d",&b); a=0; c=0; while(a<b) { while(c<=a) { printf("*") c++; } a++; printf("\n"); } }
上記のプログラムで走らせると * * * * * となってしまいます、 * ** *** **** ***** とするにはどこを修正すればいいのでしょうか、よろしくお願いします
スレタイも読めないのか
誤爆しました
ちなみに、C#としての解決法なら、 その数値にToString()をかけた上でその文字列の長さを見るところだろうな。 C++なら桁数を求める数値計算をさせるだろう。
えっ
>>607 c=0の位置間違えてる限り、何やってもw
変数を初期化する場所が違うだけ
for(int a=1; a<=5; a++) Console.WriteLine(new String('*', a));
612 :
474 :2009/06/17(水) 17:30:18
>>474 です。遅い原因がわかりました。
昔 ColumnHeaderHeightSizeMode = AutoSize
今 ColumnHeaderHeightSizeMode = DisableResizing
プロパティ1つ変えたら10倍速くなりました。
へぇーすごいじゃん。
特許でガッポガッポ
Tagプロパティって無い方がよくね?
== と != をオーバーライドしてたんですが、 やっぱりオーバーライドをやめることにしました。 ついては、オーバーライド してた演算子を全部検索して、 Equals に書き換える必要が生じたんですけど、 どこでオーバーライドされた演算子が使われているか検索する 方法はないでしょうか?
617 :
デフォルトの名無しさん :2009/06/17(水) 23:04:39
消してコンパイルしてみたら
618 :
デフォルトの名無しさん :2009/06/17(水) 23:07:08
参照型だと消してもコンパイル通るのか 右クリックで「すべての参照の検索」は?
プログラミング自体5ヶ月の経験の初心者です javaを2ヶ月勉強した後に、仕事で3ヶ月前からC#触っています いろいろな方から聞いたのですが、参照型の値の比較をするときはjavaの時はequalsを使うのは当たり前でしたが、 C#だと==で問題ないって方が多いのですが、これはどういうことなのでしょうか? C#はそもそも参照型の概念がjavaとは違うのですか? ==を使うとき、C#だと値自体の比較がされるということなのでしょうか?
620 :
616 :2009/06/17(水) 23:15:25
>>617 すべての参照の検索だと拾ってくれないんですよ。
困った。
>>619 == をオーバーロードして値比較にすること「も」できる String とかだな
作法として == をオーバーロードする場合は Equals もオーバーライドして == と同等の動きをするようにする
必ず参照を比較したい場合は Object.ReferenceEquals を使う
>>619 java知らんけど参照型の比較は言い換えれば参照情報の比較なんだから
==で問題無いかどうかって問題か?
例えばあaとbに1を入れて比較しても参照位置が違えばfalseになるってだけ
>>616 オーバライドしたままで例外を投げるようにして実行する
例外が出なくなったらオーバライドやめる
626 :
デフォルトの名無しさん :2009/06/17(水) 23:38:16
>>619 Stringのように値を変更できない型に限り、参照型でも==をオーバーロードしてよい
演算子がオーバーロードできない言語は糞。
immutableなオブジェクトは、別々に代入されても、最適化によって 実体は同じになっている可能性が高い。Cの文字列リテラルがそもそも そういう傾向だったし。 s1 = "abc"; s2 = "abc"; と書いたときに、s1 == s2が 真かどうか分からないんじゃ使い物にならないので、内容が同じなら 同一オブジェクトかどうかは問わず真にしよう、という趣旨だと思う。 ただし、単に思いついただけなので、根拠はない。
結構前にも同じような話したことあるようなないような
630 :
デフォルトの名無しさん :2009/06/17(水) 23:46:41
あってるよ
それを保証するために
>>626 のガイドラインがある
>>628 > immutableなオブジェクトは、別々に代入されても、最適化によって
> 実体は同じになっている可能性が高い。
ここに関してはimmutableなオブジェクトでなくリテラルの話だよね
動的に作られたimmutableなオブジェクトがそうなる可能性は高くないと思うよ
そんな最適化はむしろ効率が悪そうだ
まさかのflyweightパターン全否定 関係ないけどさ
関係なさ過ぎだろ
634 :
616 :2009/06/18(木) 08:26:40
>>625 ビンゴ!Obsolateにこんな使い方があったとは。
勉強になりました。
ありがとう♥
>>623 ifとかcaseで滅多に実行されないレアケースがあるから
いつまでも削除できない
636 :
デフォルトの名無しさん :2009/06/18(木) 12:09:44
質問いいですか? ウェブ上で画像をバイナリとしてデータベース上にアップして そのバイナリファイル(JPG画像)を response.binaryWrite(file.content)って呼び出してウェブ上(displayJPEG.aspx)に画像だけを 表示させたいんですけど、 どうやっても真っ白なバックグラウンドに、そのaspxファイルのURLしか表示されません。 しかもそのURLがJPG画像?みたいになってて、テキストじゃないんです。 何が何だか良く分からなくてお手上げ状態なんでアドバイスください・・・ 画像のアップロードの仕方に問題があるのでしょうか?
file.contentはバイト配列?
いったんファイルに出してみて、それを直接URLで読んだらどうなる? ヘッダとかだいじょうぶ?
639 :
デフォルトの名無しさん :2009/06/18(木) 13:13:53
>>637 バイト配列です。
>>638 いったんファイルに出して直接URLで読むっていうのはどういう意味でしょうか・・・?
初心者すぎてすみません・・・
コードはこんな感じです。
public partial class displayThumb : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
projectFilesTableAdapter filesTableAdapter =
new projectFilesTableAdapter();
ProjectDataSet.projectFilesDataTable files =
filesTableAdapter.GetProjectWithContentByFileID(37);
ProjectDataSet.projectFilesRow file = files[0];
Response.ContentType = "image/jpg";
Response.Write(file.projectContent);
}
}
Response.Write?
641 :
デフォルトの名無しさん :2009/06/18(木) 13:21:53
>>640 すみません、binaryWriteです。
でもbinaryWriteでも表示されませんでした・・・
これってもしかしてデータが壊れてるとかそういうのが原因でしょうか?
projectContentはデータタイプをbinary(7000)って設定したんですけど
2kb以上の画像をアップして表示させようとしてます。
これが原因だったりしますかね・・・
642 :
デフォルトの名無しさん :2009/06/18(木) 13:26:44
>>641 すみません訂正です。2kbー>20kb以上
なんかもうテンパっててすみません
643 :
デフォルトの名無しさん :2009/06/18(木) 13:44:07
すいません自己解決しました・・・
なんで7KB上限のに20KB入れようとするんだ
645 :
デフォルトの名無しさん :2009/06/18(木) 13:51:03
先生・・・デストラクタが恋しいです・・・ struct使うと簡単にDisposeの後処理できるのかなぁ
646 :
デフォルトの名無しさん :2009/06/18(木) 13:51:56
C# 2008 express edition をインストールしたのですが ライセンス登録が出来なくて困っています Windows Live ID を作成し、登録画面にサインインできるのですが サインインした先で 画面が読み込み中(画面中央で点が丸く点滅)のまま止まっています 日付を変えて試みても結果は同じでした 解決方法があれば教えてください よろしくお願いします
>>646 ISOイメージ落としてCDに焼いて、CDからインストールすれば登録不要。
火狐などの別ブラウザでやってみ
649 :
デフォルトの名無しさん :2009/06/18(木) 14:25:46
>>644 そこが狙いだったんでしょうね。
今回はまんまと引っかかっちゃったって感じです・・・
650 :
646 :2009/06/18(木) 14:40:26
>>647 >>648 様 ありがとうございました
ブラウザにChromeを使っていたのが原因だったようです
I.Eで無事に登録することができました
Chromeじゃあ仕方ないな
そりゃそうだ ハッハッハッ
俺前やったときfirefoxでも止まったような気がする
Windows 7 DLしようとするとIEだと646のいう画面でリロード繰り返しの半無限ループ になってDLできないが、FFでやるとすんなりDLできた。
そりゃそうだ ハッハッハッ
リストボックスにファイルをリストして、ファイル名のみを表示したとき、 listbox.SelectedItemからそのファイルのあるフォルダを探すには、 再度検索しないとだめでしょうか? フルパスは捨てられちゃう?
適当に作ったクラスにフルパスとプロパティ作って そのリストとか配列をDataSourceにするといいよ あとDisplayMemeber
×フルパスとプロパティ ○フルパスと名前の2つのプロパティ
Visual Studioでプロジェクトのプロパティを開くとアイコンを登録できますが、 ここでは何ピクセル、何色のアイコンを用意するのがベターなのでしょう? また、OSが勝手に縮小や減色するのを避けるために、あらかじめ小さく作った 複数のアイコンを埋め込む方法も教えてください。
アイコンを複数入れる方法はなんとなくわかりました。 エクスプローラーで表示される可能性のあるアイコンの種類の一覧って どこかにありますか?
アプリケーションのメインフォームを取得する方法を教えていただきたい。
Application.Runする前に静的フィールドに保存しとけ、とか ApplicationContext 作って管理しろ、とか じゃない話?
ライブラリに組み込みたいのでRanに渡したフォームを簡単に 取得できるものがあればと思ったんですが、ApplicationContext を調べてみます。 ありがとう
>>660 一つのアイコンファイルに複数の大きさの画像が格納されててエクスプローラが自動選択で表示してるだけだから、
VSでどうこうするんじゃなくてそういうアイコンを作れ
256x256,48x48,32x32,16x16が各8bit,32bitあれば事足りるらしい 事足りるっつーには多いが
>>645 struct使っても状況が良くなるとは思えないけど、
usingも慣れればそんなに悪くないよ。
>>665 無い大きさで表示するときはどうなるの?
小さいのを拡大するなり大きいのを縮小するなりするんだろ 96表示時は256のを縮小するらしいぞ
というか 256x256 は PNG 形式である必要があるはずなんだけど それ VS で作れたっけ? 駄目なら Vista 対応とか PNG 形式対応とかそんな感じのアイコン エディタ使わないといけないでふよたぶん。
>>670 PNGならmspaintでいいんじゃないか?
PNGそのものじゃなくて、icoファイルの中にPNG形式のを突っ込むのな
>>657 サンクス。やっぱり自分で保存しないと捨てられちゃうのね。
674 :
デフォルトの名無しさん :2009/06/19(金) 03:39:28
一つのボタンをクリックするごとに同じ場所に重ねてあるラベルを順々に最前面に表示させる方法を教えてください。 説明文を作ろうとしていて、ボタンを押すごとに説明文が次のものに切り替わるようにしたいです。
ラベルのText変更すりゃいいような気がするけど バインディングとか BringToFront
676 :
デフォルトの名無しさん :2009/06/19(金) 04:12:17
>>675 ラベルを書き換えればいいんですね。
やってみます。
ソリューションエクスプローラで Form1csにForm1.Designer.csが付いてるようになってるけど、 自分で追加したClass1.csに他のソースファイルを付けるにはどうすればいいの? ドロップできないし、partialにしてもそうならないんですが
678 :
デフォルトの名無しさん :2009/06/19(金) 05:29:13
コンボボックス内のアイテムを選択すると、指定したラベルが表示されるようにするにはどうしたらいでしょうか? コンボボックスはDropDownListで使います。
>>677 昔csprojファイルを直にいじったらできたような記憶がある
たしかこれと同じようにすればよかったと思う
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
>>678 ラベルを配列かList<Label>にでも入れといて
SelectedIndexChangedイベントが発生したら
そのインデックスに対応するラベルを表示
>>679 <DependentUpon>で付けるみたいですね
ありがとうございました
VS2008 SP1です。 INotifyPropertyChanged を実装したクラス「Sample」を ジェネリックの List<Sample> に2個ほど入れ、 DataGridView の DataSource に突っ込んだところ みごとにバインドされました。 しかし、コードでSampleクラスの値を変えても DataGridView のフォーカスのある行しか値が更新されません。 すべての行(この場合2行)が更新されるにはどうすればよろしいでしょうか?
>>682 のコードです。
class Sample : INotifyPropertyChanged
{
public Sample
{
}
private bool _count;
public bool Count
{
get { return _count; }
}
private DateTime _date;
public DateTime Date
{
get { return _date; }
}
public void Update()
{
_count++;
_date = DateTime.Now;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Count"));
PropertyChanged(this, new PropertyChangedEventArgs("Date"));
}
}
#region INotifyPropertyChanged メンバ
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
>>682 の実行コードです。
〜
// 2つほど入れる
List<Sample> sampleList = new List<Sample>{ new Sample(), new Sample };
〜
dataGridView1.DataSource = sampleList;
〜
// スレッドで定期的に更新する
foreach (var item in sampleList)
{
item.Update();
}
IBindingListが必要なんでList<T>の代わりにBindingList<T>を あとスレッドでって言ってるけどInvoke/BeginInvokeは大丈夫か? データソースいじるときも同期が必要だぞ
>>685 BindingListに変更し、Invokeメソッドで実行してみましたが、
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Count"));
GUI上では DataGridView の現在選択中の行しか値は更新されませんでした orz
>>685 いえ、全部の行が更新されています!
ありがとうございました!orz
どうでもいいがそのInvokeじゃないぞ Control.Invokeの方
>>688 手順としては
1.Sample クラスでプロパティの変更を感知
2.?
3.DataGridView または DataGridView の所属する Form で
Control.Invoke(?) を呼び出す。
ということでしょうか?
Updateの呼び出しそのものをInvoke経由で バインディングされてるオブジェクトは扱いも慎重にしないとダメよ
C#でのスレッド間同期制御について教えて欲しいんだけど、先にソースを。 //C#での実装(失敗、デッドロックする) //※インデントに全角空白*2を使用 public class ThreadMain{ private EventWaitHandle lockObj; public ThreadMain(EventWaitHandle lockObj){ this.lockObj = lockObj; } public void run(){ lock(lockObj){ //ここには入れない Console.WriteLine("sub in sync"); lockObj.Set(); Console.WriteLine("sub out sync"); } } } public void test(){ EventWaitHandle lockObj = new EventWaitHandle(false, EventResetMode.AutoReset); ThreadMain tm = new ThreadMain(lockObj); Thread t = new Thread(tm.run); lock(lockObj){ t.Start(); Console.WriteLine("main in sync"); lockObj.WaitOne(); //ここで待機中の間だけlockObjを解放したい Console.WriteLine("main out sync"); } }
//javaでの実装(期待通りに動く) //※インデントに全角空白*2を使用 public class Test{ public static class ThreadMain implements Runnable{ private Object lockObj; public ThreadMain(Object lockObj){ this.lockObj = lockObj; } public void run(){ synchronized(lockObj){ System.out.println("sub in sync"); lockObj.notifyAll(); System.out.println("sub out sync"); } } } public static void main(String args[]) throws InterruptedException{ Object lockObj = new Object(); ThreadMain tm = new ThreadMain(lockObj); Thread t = new Thread(tm); synchronized(lockObj){ t.start(); System.out.println("main in sync"); lockObj.wait(); //待機中はlockObjのモニタは解放されている System.out.println("main out sync"); } } }
上(
>>691 )のプログラムで、
main in sync
sub in sync
sub out sync
main out sync
というシーケンスになるようにしたいんだけど、どうしたらいいだろう?
期待している動作は、メインスレッドがWaitOneに入るときlockObjのロックが解放されて、
サブスレッドがSet()して、さらにlock文から抜けた後、
mainがlockObjのロックを再獲得してWaitOneから復帰するようなイメージ。
Visual C# 2005 Express SP1 (.NET 2.0)
lockとEventWaitHandleは全然別物なんだからそりゃうまくいくわけないな lockはMonitorの糖衣構文だから、Monitor.WaitとMonitor.Pulseを使えば
695 :
693 :2009/06/19(金) 11:29:40
あ、待機はスピンロックでなければ、EventWaitHandle,lock以外でも良いです
うほ出来た
Monitorクラスはlock文用のEnterとExitしか無いと思い込んでた^q^
>>694 ありがとう
(変更点)
//EventWaitHandle lockObj
Object lockObj
//lockObj.Set();
Monitor.Pulse(lockObj);
//lockObj.WaitOne();
Monitor.Wait(lockObj);
698 :
デフォルトの名無しさん :2009/06/19(金) 13:30:18
VC++のCTreeCtrl(MFC) CTreeCtrl::GetEditControl に相当する処理を、 C#のTreeView で探しています(VS2005 .NET Framework 2)。 なんとかして、エディット コントロールのハンドルが欲しいんですが、 どうしたらいいか、わかる人おられませんか?
MessageBox.Show("text", "caption", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
MessageBoxIcon
702 :
699 :2009/06/19(金) 15:03:01
ありがとうございます。助かりました。
INTもクラスなんだなー int x=new int(); x=12; ってやってもちゃんとできるね。
クラスじゃないです
とりあえずINTとIntとintは違う物なので きちんと書き分けないと話が通じなかったりするぞ
object i = 3; なんてこともできます。 実際はboxingでInt32に変換されてるだけですが。
Int32に変換? 「から」だろ?
class Program { static void Main(string[] args) { object i = 3; Console.WriteLine(i.GetType().FullName); } }
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void Func(ref int x){ x=10; } private void Form1_Load(object sender, EventArgs e) { int y; this.Func(ref y); } } } これコンパイルできない 引数に10を代入する関数Func作ったが this.Func(ref y)のyがグローバルとか意味輪からんことでてきてる どうすればなおせる?
エラー CS0165: 未割り当てのローカル変数 'y' が使用されました。
refじゃなくてout使っとけ それかyに初期値代入しとくか つかエラーメッセージぐらいちゃんと書け
豆知識 ダイアログがアクティブな状態でCtrl+Cを押すと エラーメッセージがクリップボードに入るぞ
常識だろjk
練習として、例のごとくテキストエディタを作っているのですが、「切り取り」「コピー」「削除」の表示について質問です。 テキストが選択されている間のみ上記のメニューを選択できるようにしたいのですが、上手く表示されません。 具体的には、 TextBox内のテキストを選択している状態で編集メニューを開いても上記のメニューは選択できる状態にはならず、 右クリックでメニューを表示してから編集メニューを開くと上記のメニューが選択できる状態になります。 右クリックをした瞬間に何かを呼び出しているんでしょうか? ちょっとわかりにくいでしょうか・・ ご教授願います。
>>714 メニューを開かれるタイミングで調べるんじゃなくて、
TextBoxの選択が変わったときにメニューのプロパティを書き換えるんだ。
メニューってContextMenuStripなのかMenuStripなのか どっちにしろOpendイベントで判定すればいいと思うけど
string[] line = text.Split('\n'); string[] cell = line.Split('\t'); と書いたとき、 for (int i = 0; i < line.Length; i++) {textBox[i].Text = lineView[i];} みたいに行は書けるけど、[i]行目のcell[0]はなんて書けばいいのでしょうか?
>string[] line = text.Split('\n'); >string[] cell = line.Split('\t'); どうみてもエラーです
列数が固定(widthとする)なら string[] cells = table.Split(new char[]{'\t','\n'},StringSplitOptions.None) ここでx列y行はcells[x+y*width]
なるほど。 cells[0] | cells[1] | cells[2] cells[3] | cells[4] | cells[5] と左から順番に設定するんですね! これはすごい。 サンクス!!!
あんまりアホなこと教えないであげてください
微笑ましいじゃないか。
723 :
714 :2009/06/20(土) 02:57:30
>>715 できました!
ありがと〜
Opendイベントとやらも調べてみます
どういたしまして
スレチな質問なんですがどこで聞いたら良いのか分からないので ここで質問させてください。 Visual Studio 2008 StdのC#でGUIなアプリケーションを作成しているのですが、 ファイルを参照するボタンに画像を貼り付けたいと思います。 凝った画像ではなく、エクスプローラの「ファイルを開く」メニューに表示 されているようなアイコンで構わないのですが、どこかで配布されているの でしょうか? それとも皆さん毎回オリジナルの画像を作っているのですか?
初心者スレなのでアホな質問にも回答するが、スレ違いはお断り
>>725 MDI親フォームのリソースファイルの画像を使うとか。
シェルアイコンに微妙なセンスのアイコンがいっぱいある。
>>726 すまんです。
>>727-728 Windowsのシステムアイコンを抜き出して使うと言うことでしょうか?
アイコンの抜き出し方は知ってますが、やはりまずいですよね?
ここで聞けというスレがあれば誘導していただけるとありがたいです・・・
スレ違いだってわかってるなら汎用質問スレいけよカス
c#とVB両方インスコしちゃったら ソリューションファイル開くときに VisualC#とVBどっちで開くか聞いてきてうざい VBけしたほうがいい?
734 :
727 :2009/06/20(土) 04:13:29
>>729 ソリューションの新しい項目を追加でMDI親フォームを追加すると
アイコンついたボタンが最初からフォーム上にあるからその画像を使ったらって意味。
その画像の元はフォームのリソースファイルにある。
736 :
デフォルトの名無しさん :2009/06/20(土) 06:11:38
VS2003しか知らんが確かアイコン集が入っていたはず。 Common7フォルダだったかな? 最近は付いてないのかな?
あるスレッドで設定した変数を他のスレッドでも使うにはどうしたらいいでしょうか? 具体的にはBackgroudWorkerで設定した変数をstaticの変数に入れたいのです 別のスレッドではstaticが共有されないみたいなので行き詰ってしまいました。お願いします
739 :
デフォルトの名無しさん :2009/06/20(土) 06:45:42
silverlightでデータベース上に存在するバイナリファイルを呼び出してウェブ上で再生したいんですけど、どうすればいいのか分かりません。 誰かやり方or良いサイト知ってれば教えてください 英語でも構わないっす
>別のスレッドではstaticが共有されないみたい そんなわけがない。 もしくは何か勘違いしてる。
742 :
デフォルトの名無しさん :2009/06/20(土) 09:24:56
C#初心者です。 ConvertとかString.Formatとか、特にnewで作成してないのに 使用できるクラスのメソッドがありますが、自分でもそんなクラスを作りたいのですが どうすれば良いですか?
public int Method(int value){...} ↓ public static int Method(int value){...}
745 :
デフォルトの名無しさん :2009/06/20(土) 09:42:21
742 クラスがpublicでなかったようです。解決しました。
746 :
デフォルトの名無しさん :2009/06/20(土) 09:45:00
>>743 ありがとうございます。メソッドをstaticにしてみます。
747 :
738 :2009/06/20(土) 10:13:29
public class userData { static public int a; static public string b; } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { userData.a = 10; userData.b = "abc"; } private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); MessageBox.Show("a : " + userData.a + ",b : " + userData.b); } わかりにくくてすいません こんな感じでaとbを表示させたいのですが、どこがいけないのでしょうか
>>747 backgroundWorker1のRunWorkerCompleted イベントを作って、
その中で MessageBox.Show() を叩けば幸せになれるお。
>>748 ありがとうございます
表示できましたが、このaとbをBackgroundWorker以外でも使いたいのですが、これだとだめですよね?
>>749 俺はそういうことをしないようにしてるから、大正解の方法が分らんw
BackgroundWorkerの 「IsBusy プロパティが真の間は処理を待つ」とかかな?
>>750 そんなこと言ったらビジーループで待ってしまうじゃないか
>>750 の補足
というか、BackgroundWorkerの処理完了後の動作はRunWorkerCompleted内に書けば全て解決。
button1は別スレッドを始動させるためだけのボタンと考えればいいんじゃないかな
>>751 本末転倒だなorzwww
そもそもバックグラウンドで処理するってのがどういうことか全然分かってないのかな?
順番に処理したいんなら普通に関数として呼ぶよな
一定時間ごとに前のBackgroundWorkerで設定したa,bを使ってまた処理させるみたいな感じなんですが、ちょっとやってみます
>>753 別スレッドで処理するってことくらいしかわかりません
>>754 結構時間がかかる処理なのでBackgroundWorkerでやってます
お前のレベルだとちょっと危ないな。 共有データの更新タイミングの同期とか、 何も考えてないってか気をつけなきゃならないって事も 何も分かってないだろ?
危ないだろうけど、でも必要ならやるしかない。 BackgroundWorkerの記事はネット上にあるはずだから、 自分で調べてどういうところに気をつければいいか勉強すればいいじゃない。
>>756 どんなに時間がかかろうと、結果が出るまで次に進めなくて、
ただ待ってるだけならバックグラウンドにする意味ナッシング。
>>747 public static volatile int a;
public static volatile int b;
a, b に volatile をつけると、あるスレッドで更新すれば別のスレッドに更新が伝わるようになる。
逆にvolatileのついていない変数では、あるスレッドで変更しても、その変更が別のスレッドにすぐに伝わるわけではない。
>>759 進めなくても、キャンセルくらいはできて欲しい
あと、処理中に描画が止まる糞設計もやめて欲しい
>>760 適当なこと書くな。
だいたいこの場合だとvolatileとかいう問題じゃないだろ。
>>761 なんでここに質問するの?バカなの?死ぬの?
単一のプロジェクト内で、特定の関数とかメソッドだけ バックグラウンドにするメリットってあるの? もちろん結果が出るまで待つ場合。 とりあえずバックグラウンドにするだけじゃ、 プロセスの優先順位は変わらないよね?
今回のはvolatileとかいう問題じゃなくて、 aとbを同時に更新(あたかも)する必要がないか、 更新タイミングの同期はどうするのかって方向であって、 この例でvolatile云々言うのは大抵的外れ。
だいたい、実質的にvolatileが要るのはもうちょっと状況が限られるよ。 必要な場合はあるけど、volatileつけないと別スレッドから見えないかっていうとそんなことはない。 まあ言い方に色々誤弊はあるけどね。
>>761 ローカルのヘルプからたどればいいのに・・・
それにそこのリンクからもダウンロードできるじゃないか
そこのリンク→方法 : サンプルを表示およびダウンロードする→Microsoft Download Center にアクセスします。
>>767 応答なしってタイトルバーに出たりするとユーザは不安になるもんだ
ちっとも経過を報告しないプログレスバーが行ったり来たりしてる方がマシ
キャンセルもできればなお良し
CLR2.0では暗黙に全ての書き込みがvolatile書き込みな件
double-checked lockingが使えるメモリモデルになってるって話か? それ以上の意味なら、ソースが欲しい
初心者ネタじゃないからよそに行け
C#ではクラス名のあとに.をつけたら いろいろ候補でるよね Button1.って入力したら ClickとかTopとかずらずらって。 あの候補のことなんていうんだっけ?
入力候補 インテリセンスの機能だな。
VS2008EEってセットアッププロジェクト作成機能ないの?
プロジェクトをすべて保存にしたら フォルダが binとobjにわかれていて それぞれにdebug releaseの二つに分かれてて 全部で4つの同じexeがあるんだが なんでこんなことしてんの? 20MBのexeを4つも作られたら容量圧迫してかなわん。 bin/obj debug release どのexeが正しいexeなの?
binが出力結果 objは中間ファイル置き場 DebugとReleaseは言わずもがな
20MBもいくほうがおかしい。 容量圧迫ってどんだけきつきつでやってんだよ。
exeが20MBって時点で、C#じゃなくてMFCアプリかなんかじゃね?
誤爆した。スマン。首吊ってくる。
WebBrowserコントロールのDocumentTextプロパティでWebページを表示させているのですが 読み込むときに鳴るカチッという音を消したい場合はどうしたらいいでしょうか
消せないっぽい。
まじか。どもです
OpenNew して、Document.Write すればいいらしい。 試してないからよくわからんが。
>>787 そうするとページのURLが存在しないから、そのページはよくても
ほかのページにジャンプするときはフルパスのリンクが必要だな。
で、そのときにカチッと音が出る。
>>787 さんの方法でできました。ありがとうございました
stringの扱いが分りません。 変更できないらしいことは分ったんですが、 文字列の受け方がよくわかりません。 こういう場合は、どうすればいいんですか >< sting param; if ( xxxx ) param = "THEN" else param = "ELSE"
それは変更してないじゃない。
それだけだと普通にコードとしても意図としても成立してるが
>>790 それでおk。
あとは
string param = (xxx) ? "THEN" : "ELSE";
とも書ける。
794 :
790 :2009/06/21(日) 15:56:06
レスありがとう よくわからないから、今度はこうしてみたんですけど、 whileの外で使うと値が入ってないんです。>< main(){ char [] param = null; while( xxxx ){ if ( xxxx ) then param = THENストリング.ToCharArray(); else param = ELSEストリング.ToCharArray(); } Console.WriteLine("Paramの中身", param); }
まずはデバッガの使い方覚えたほうがいい。
>>795 に同意
794は多分ループ内に入ってないんだろうなぁ
797 :
デフォルトの名無しさん :2009/06/21(日) 16:03:20
中途半端に隠さずに貼るなら全部貼れ そしてどういう結果を期待してるのか書け
> if ( xxxx ) then thenって?
この程度でややこしいってどんだけw
何がどうややこしいのやら
>>799 「デフォルトのブラウザーが何か」ってのはOS上のユーザー設定を参照しないといけないことだからなぁ。
そこのサイトのコードだけでできるってのは、十分シンプルだと思う。
BeforeNavigate とかではダメなんか?
すでに自分を起動していたら、古いほうのウィンドウを閉じて新しいウィンドウで処理する、というのはどう書くものですか? Processで自分の名前を取得して終了メッセージを送ったら、(当然のように)自分も終了してしまいました…。 あたりまえか。 多重起動を禁止するのではなく、行いたいです。 アドバイスお願いします。
基本的な考え方は多重起動禁止と同じだけどね Mutex の代わりに EventWaitHandle 使う 新しいプロセスはイベント通知するだけでその後は普通に進める 前のプロセスはイベントを受け取ったら終了処理
俺はMutex取得できた奴がサーバとしてSetPropでWHDLをプロパティ設定。 取得できなかった奴はクライアントとしてGetPropで見つけたWHDLに WM_COPYDATAで起動パラメータの情報を送信して終了。 サーバはWM_COPYDATAで受け取った情報で処理。 って作ってた。1.1だったからなぁ。
807 :
806 :2009/06/21(日) 21:17:10
あ、古いほうを終了か。間違えた。すまん。
古い方を閉じるならもう少し複雑になる。 同時に何個も起動したときにおかしなことにならないようにしないといけないから。
WHDL ってなんだよ・・・ せめて hwnd とかだろ
正直、古い方を閉じる理由ってなんなんだろ?
ごめん、変数名をなんでかそう書いてたんで、そのまま追いかけて読んで 書いちゃったw >>WHDL ・・・マジ、なんでWHDLとか書いてたんだ?自分。
古い方を閉じるなんてめちゃくちゃなUXだな
813 :
デフォルトの名無しさん :2009/06/21(日) 22:02:33
.NET や Java などでクラス複製のインターフェースの ICloneable がありますが ICloneable に対するコピーの実装って 慣例的に シャロウコピー と ディープコピー のどっちなんでしょうか? それとも特に決まってないのでしょうか? よろしくお願いします
特に決まってないな。 どっちかっていうとシャロウコピーな感じもある。
てゆーかICloneableってまともに機能している場面って見たことねーんだが
>>813 Javaは知らんが.NETでは特に決まってない。
Cloneは同じ内容だけど別物として振る舞うようなクローンを返せば、なんでもいい。
別にメンバが同じ値であったりそのコピーである必要はない。
>>817 そのウィンドウに更新ボタンを付けるのが一番素直な実装だと思うんだが?
>>814-816 レスどうもです。
ICloneable について触れてるサイトを何度か見かけたのですが、
どれも MemberwiseClone をそのまま返却する実装をしてたので、
ちょいと気になってました。
ありがとうございました
自分も更新ボタンがいいと思う。更新(R)、最新の情報に更新(R)・・・と一般的。 二つ目のアプリ実行っていったら、普通はMDIにドキュメント追加とかタブ追加 だから選択ミス。 いつも使ってる(だろう)アプリ見たら分かりそうだけどなぁ。 秀丸、サクラエディタ、VS、IE、Firefox、WinMerge・・・
>>818 、820
なるほど。更新ボタンですか…。
更新ボタンをつけたとして、外部のアプリケーションから手動で押す場合には、どういうメッセージを送ればよいんでしょう?
具体的にはコマンドラインから指示したいのです。
サーバー的なシステムで、アプリケーションの動いているマシンには、キーボードもポインティングデバイスもない(操作しにくい)ためです。
コマンドラインから開いているアプリケーションにメッセージを送ることってできるんですか?
これまでは、コマンドラインからおなじアプリケーションを実行してそれにメッセージを送信させようとしてはまってました。
「コマンドラインから」という条件は必須です。
メッセージを送るためのアプリケーションをもうひとつ作るのも考えたのですが、それならおなじアプリケーションで多重起動を監視するほうがよいかな、と考えて現在に至っています。
>>821 まて、それでどうやって二番目のプロセスを起動しようとしている・・・?
どうやって コ マ ン ド ラ イ ン か ら 打 ち 込 む 気 だ。
ネット越しならポート開けて待ってて、誰かアクセスしてきたら更新しろ。
>>821 コントロールされる側も自作アプリなんだから、
外部(ネットやシリアルポートなど)から操作できるように作っとけばいいじゃん。
適当にポート開けとくとかして。
ボタン押すだけならハンドル取得してクリックイベントを送るだけ
相手がWindowsマシンなのにマウスも何もついてなくて、 端末がコマンドラインオンリーてのもずいぶん時代錯誤なシステムだな 両方ともWindowsにしてリモートデスクトップでも使えば一発で解決する問題のような そもそもどうやってログインしてるんだ? 電源が落ちたらどうするんだ
>>822 すみません。
>>823 、824
ポート開けるなんてのは初心者なもので、まだ書けません…。
もうすこし勉強します。
>>825 時代錯誤かどうかはさておき、現実にそういうシステムなので。
ちなみに、次のようにして解決しました。
コマンドラインから起動するときに、
taskkill /im Program.exe
Program.exe
としました。
EventWaitHandleの使い方を覚えられなかったのは残念…。
プログラムいくつか作っていくと、流用できるクラスが増えて 次のソフト作るの楽になるんだろうなと思ってやってきたけど 結局毎回一から全部作るんだよね ファイル入出力関連何度作ったことか やっぱ最初はこんなもの?
汎用性を持たせられてないからだな
汎用性ってすごく難しいよね 細かい機能使えるようにすると、元々あるクラス使えってことになるし 簡単に使えるクラスにすると、他のプログラムだと機能がたりなかったり そもそも何をしているクラスなのかわからなかったりで
16進数 1FF は 10進数 511なわけですが プログラムのバイナリデータではFF01という風に逆順に並んでいるんですが こういうのを10進数511と変換するうまいやり方はないでしょうか?
char[]に変換して、foreachでstringに変換して連結。
byte[]に入れて、BitConverter.ToUInt16()
>>833 >>834 それだと逆順になったままなんですが
FF01を511にする方法が知りたいんです
良く分からんが、用意されてるメソッドで都合悪いなら自作すれば?
それがわからないから聞いているんだけど?
>>835 それ、普通に short で読み込んだら 511 にならない?
Mono か何かでビッグエンディアンな CPU 上で実行してたりする?
文字列の "FF01" とか?
>>835 普通逆順になるわけがないんだが、
お前いったいどんなプログラムで確認してる?
>>838 なるわけないし、ushortじゃないと範囲超える
>>840 どういう意味?
あるアプリをバイナリ編集したいんだけど
数値の部分だけがFF01と反転している
そのアプリのバイナリデータを取り込んで0x01FFつまり511とテキストボックスなんかに表示したいんだけど
>ushortじゃないと範囲超える くわしく
>>843 short=0xFF01;
でやればわかる
で、同じようにDWORDの数値も本来の数値に変換したいんだけど 簡単な方法ありますか?
>>844 何言ってんだお前は。
今の値はそうじゃないだろw
>>842 byte[] data = {0xFF, 0x01};
Console.WriteLine(BitConverter.ToInt16(data, 0));
512って出るだろ?
出たならお前の読み込むプログラムの方がおかしいってこった。
ちがう511のまちがい。
>>845 これで分かるだろ。
>>847 おおおおおおおおおすげーーーー
なんで逆さまなのに511って出るんだ・・・
>>846 今の値がどうとかに関係なくWORDを読み込んで数値に変換するわけなんだからshortじゃだめでしょ
範囲外とか言い出すやつが何言っても無駄
>>850 そもそも今の会話からは符号付きかありかなんて読み取れないのに、
いきなり、
>>841 とかいいだすお前がおかしいわ。
こういうのは「バイトオーダー」とかのキーワードを知ってればすぐ答が見つかるんだよな それを知らない時点で敗北決定
>>832 >プログラムのバイナリデータではFF01という風に逆順に並んでいるんですが
ここでちゃんとWORDデータを変換すると言っているんだから
できるひとは
>>834 がすぐ出るでしょ
WORDデータに対してshort持ってきちゃうなんて世間知らずもいいとこだ
なん…だと…
>ここでちゃんとWORDデータを変換すると言っているんだから
どこだよっ
>>832 をどう見ても符号付きか否かは不明。
どうかな。
バイナリデータ2バイト(FF01)=WORD=ushort
そもそも0xFF01はshortに収まらない 論破
>>831 それはまだ蓄積や経験が足りない。わからなくなるのは管理が悪い。
名前の付け方に統一ルールを作り、長くなってもいいからわかりやすさを最優先に考える。
使い方をソースファイルの頭などにちゃんと書いておく。
過去の自分は他人。他人が見て使用法が理解できないソースは未来の自分にも理解できない。
「いちいち書くのがめんどくさい」「書かなくてもわかってる、覚えてる」は禁句。
まあ、35歳ぐらいになれば記憶力も衰えてくるし、10年以上の蓄積ができてるはずだから
身にしみてわかるようになるよ。
大多数の人間は経験から学ぶ愚者だからね。
大多数の回答者は本来のデータが0x01FFのリトルインディアンだと気づいているのに 見たまま0xFF01と解釈してるアホがいる バイナリファイルをバイナリエディタで開いてみたことないんだろうな
>>863 リトルインディアン?アメリカの子供に聞かせる歌でそんなのあったな
バイナリから取り込むわけだから、元データがOxFFFFの場合もあるかもしれないと
想定して作らないとだめでしょ?何で符号無しと決め付けるわけ?
思い込みは危険だよ
符号無しと決めつけてるのはushortじゃなきゃダメと主張してる人だな。 今の質問だとどっちか分からないから、shortではなくushortにしなきゃならない ってのは正しいかどうか確証はない。 shortじゃなきゃならない可能性もあるんだから。 符号に気をつけろだけなら異論はないが。
>>859 その解釈が、件のデータが符号付きか符号なしかという問題に対して何か意味を持つとは思えないな。
何でそんなに符号に拘るの?そもそも符号って何よ・・・・ ushortじゃだめな理由なんてあるの?
今北産業
>>868 同じバイナリで表現される整数値の意味が変わるからだ。
知らないならC言語の初級からやりなおせ。
C言語は関係ないよ。
>>869 符号がどうとか
聞かれてもいないことに答えようとしている
おせっかいがたくさん
なんでもこういう事言って満足してるアホがいるが、 普通に質問への答えに関わる事として重要なことだってのも分からんのか、 単に何か言いたいだけなのか、何なんだろうな。
ArrayListあるいは配列の中に入っているobjectを、 ToStringかけながらカンマ区切りで連結するのってどうやるんだろう? できれば区切り文字はあとから変更できる形が望ましい。 .NET 3.5以降ならLinq付随のジェネリックテンプレートが使えるんだけど、 サポートOS(2000以降)の関係で.NET 2.0でお願いします。
String配列生成 forでそれぞれToStringしながら配列に入れていく String.Join
ConvertAllだったかとString.Joinの組み合わせで。 あ、ConvertAllは配列にしてからじゃないとダメだったかな…
>>877 なるほど……。そんな感じでやってみようかと思ったらStringBuilderを見つけて、
そっちで書いてみたら簡単だったのでコード片を載せておく。
IronPython.Runtime.List python_result;
var builder = new StringBuilder();
foreach(var e in python_result)
{
builder.Append(","+ e.ToString());
}
Console.WriteLine(builder.ToString().Substring(1));
>>878 対象がIronPython.Runtime.ListなんでConvertAllは使えないっぽいね……。
パイソンは知らないんだが、ToArrayはないのかな? ToArrayしてConvertAllしてJoinに渡す。 ってまあ別にベタで書いても全然構わないんだけど。
IEnumeratorは返してくれるんだけど、ToArrayは無いのよね。 枯れたライブラリならともかく、 こんなホットなもの相手に中のコードはいじりたくない。 C#は巨大な.NETクラスライブラリの関係で 同じことをやるのに方法がたくさんあるから、最適な方法を探すのが大変ですね。
Listって名前なのにIEnumerableのみかよwww ……XmlNodeListもそうなんだよな
提示された情報だけでは符号付きか符号無しか判断できないし 別に型が確定しなくても今回の質問には答えられる。 ちょっと注意書きを入れれば済むことだから両方書けばいいだけ。 BitConverter.ToUInt16() 符号無し BitConverter.ToInt16() 符号あり
DataGridViewの一番左の項目に1,2,3と番号振りたいんだけどどうすればいいですか? DataGridView.Rows[].Cells[0]のことではないです。
>>884 DataGridView.CellPaintingで
すいませんこれでいけました DataGridView1.Rows[0].HeaderCell.Value が、なぜか、マス目でいうと上から3つ目のところに表示されます 上から3つ目のマスが最初の行ということですか? だとしたら、その上の行はなんなのか?あとインデックスって-1になるということ? どうもよくわからない
dataGridView1.ColumnCount = 6; this.dataGridView1.Rows[0].HeaderCell.Value = "0"; Bthis.dataGridView1.Rows.Add("1","2","3","4","5","6"); やってるのはこれだけなんですが、行のヘッダは3マス目に0が入り Bのデータはなぜか2マス目の行にデータが収まります どうしてなんでしょうか?
試しに新規プロジェクト作ってDataGridView貼り付けて そのコードだけを書いたやつ実行してみなよ。
>>888 人がわざわざ正しいやり方を示してくれているのに謝意も述べず、
自分勝手なやり方をしてそれがどういう結果をもたらすのか
自分で考えずに人に質問するような態度で、
答えを教えてもらえると思っているのか?
ちなみに887≠オレ
891 :
887 :2009/06/22(月) 16:26:25
初心者スレの割にキビシイっすね
愛の鞭です
飴ちゃんちょうだい
バイトオーダー嫌って文字列で送った俺は勝ち組。
数が少なく整数のみならそれが勝ちだね
エンコードが違って文字化け
コード以外の文字列はBASE64ヽ(´▽`)ノ検索無くてよかったよかった。
そんな私はwebで公開
byte[]に格納したバイナリデータをascii文字列にするにはどうすればいいですか?
Convert.ToBase64Stringが手軽で鼻血が出る
どんなバイナリをどんな文字列にしたいのさ
31 30 30 25→100% みたいな感じです バイナリエディタのようなものを作ろうとしているので stirlingは左バイナリデータで右側にShift-Jis, ASCIIなどを表示してますよね? そういう感じのものを作りたい
charにキャスト
Encoding
なぜかBio100%を思い出した
どこからの連想か全く分からないが懐かしいな>Bio_100%
俺がバイナリエディタを毎日のように使っていた時代と
Bio_100%の全盛期が重なってね。で、
>>902 から連想した。
あの頃はアセンブラが必須科目だったし、バイナリのデータ構造なんて
知ってて当たり前だった。ちょっと上の方で揉めてエンディアンの話とか。
>>909 > 知ってて当たり前だった。
の割にはあまり刊行物では取り上げられなかったけどな。
>>910 C/C++の入門書ならほぼ間違いなく取り上げてる話題なんだが、どうよ。
>>911 悪い、勘違いした。
バイナリの構造って、たとえばPEヘッダとかそういうのだと思った。
また話がそれかかってるので燃料投下する。 C#で作ったプログラムで他のモジュールを読み込む場合、 モジュールをサブディレクトリに置いた場合に アプリケーション設定ファイル(*.exe.config)に <probing privatePath="libs" /> といった形で検索パスを記入するが、他の方法はどういったものが挙げられるだろうか。 いいところ、悪いところなど教えてくれると助かる。
確かにPEヘッダは資料が少なくて苦労した
そういうのって、Linkers & Loadersが出るまでは、断片的な情報しか 手に入らなかったような気がするけど。
漠然とした質問ですが、 アセンブリ情報のGUIDってなんですか? なんのためにあるんでしょう。
厳密名を定義するため
private void button1_Click(object sender, EventArgs e) { webBrowser1.Url = textBox1.Text; } エラー 1 型 'string' を型 'System.Uri' に暗黙的に変換できません。 webBrouserのURLプロパティに文字列を渡したいのですがどうすればできますか?
できません
string型をUri型に変換するメソッドを使うよ webBrowser1.Url = New Uri(textBox1.Text);
webBrowser1.Navigateでできました。 かなり前に使ったときは別の方法を取ったのですが… もうひとつ質問なのですがJaneの板一覧とスレ欄の間にある移動可能な敷居?はなんという名前でしょうか?
JaneはWinFormじゃないから同列には論じられないけどな .NET 2.0のWinFormならSplitContainer
3週間経たずに埋まってしまいそうだな
LINQでfromが複数ある場合の挙動ってどうなるんでしょう。 情報を調べても見つけれず、実際の動作調べてはみたものの、 状況次第で動作が変わっているようなのでちょっとキモチワルイです。 var src = { "Hoge", "Hage", "Huge" }; var dist1 = from p in src from q in src // pから取得した値以外をqの情報源にすると... select new { P=p, Q=q }; // {Hoge,Hage,Huge}x{Hoge,Hage,Huge} 全組み合わせ9通りに展開される var dist2 = from p in src from q in p // pから取得した値をqの情報源にすると... select q; // 全pの中の全qの数だけ展開される。つまりH,o,g,e,H,a,g,e,H,u,g,eの12個 // {H,o,g,e,H,a,g,e,H,u,g,e} x {Hoge,Hage,Huge}の全組み合わせ36通りにはならない
それぞれfrom...inの代わりにforeachで列挙してみれば分かると思うよ
>>929 あぁ、なるほど、納得です。ありがとうございます。
メソッド構文で書くとこう var r1 = src.SelectMany(_ => src, (p, q) => new { p, q }); var r2 = src.SelectMany(p => p); こちらのほうが実際の動作イメージはつかみやすいと思う。
会社でWindows 2000の縛りがあって いつまで経っても.NET 3.0〜3.5の世界に踏み込めないオレは Linqなどグッジョブなテクノロジーがうらやましいぜ!
こんな時間に起きている人ってプログラマーじゃないよね? ホビーグラマーだよね?
いつも5時に起きて23時に寝ていますよ
そんな健康的なプログラマーがいるのか
個人事業主ですが
>>936 雇ってください。年収200万で何でもします
ふらっとC#プログラマ始めました(初心者用) Part1
>>937 個人投資家ですが、ほんとうに200万でいいですか?
939はC#プログラマ(初心者)兼、個人付きメイドをゲットした。
メイド服も着れと言われれば着ます。男ですけど。 子供の時は女の子に間違われていたのでカツラも用意していただければたぶん・・・ プログラミングは最近始めたので余りお役にいは立てません
住民税+来年度の予定納税で 250万を超えることになって、 すでに死にかけですよ・・・orz
金融から200マン借りてる俺よりマシ
クラスは出来るだけ簡略化して多く作った方がいいとよく言われていますが そうなんですか? メソッドみたいな短い命令文をクラスにして大量に作るって感じでしょうか?
>>944 そうではなく、情報同士の依存性をなるべく減らすべき、ということ。
そして情報同士の関係性を形作る設計は、デザインパターンと呼ばれてカタログ化されている。
もっとも、.NET クラスライブラリみたいな巨大なツールセットが最初からあるから、
そもそもそのような複雑なことを考えるまでも無くかなりのことができてしまうわけだが。
>>944 問題は大きさとか数じゃなくて、ちゃん整理されているかどうかだよ。
どちらかと言えば簡略化すべきはクラスじゃなくてメソッドだな。
単純で確実に動くメソッドは再利用もしやすい。
947 :
デフォルトの名無しさん :2009/06/24(水) 11:42:44
Linqについてうまいことまとまってるサイトや書籍はないですか? 概論や入門レベルの情報はたくさん見つかるんですが、応用というか 「こういう事もできますよ」といった感じの
>>945 >>946 なんか奥が深そうですね
話は変わるけどプログラムする人は頭良さそうだけど
よくテレビでやってる能力テスト(知識を必要とするクイズとかじゃなくて)などはいい点取れるの?
関連のある図形を選びなさいとかの問題だとすぐ解けそうだね
気のせいだ
昔IBMのプログラマー適性検査みたいなの受けたが まさにその図形を選んだりする、子供の時やった知能テストみたいなやつだったな。
すいませんC#で作ったソフトは、別途ランタイムが必要ですか?
将来 .NetFrameWork6.7b以降が必要 なんてプログラムがでてきても Vistaなら・・・Vistaならなんとかしてくれる!
>>952−953 ご丁寧にありがとうございます Cの勉強で頑張ってみたいと思います
byte[] data=new byte[5000]; BitConverter.ToInt16(data,0); これでバイナリデータを数値に変換できたんですけど data[6]〜data[7] だけを数値にしたい場合良い方法はないでしょうか? 必要なだけ空の配列に代入しながらするのは大変なのです こんな感じでかなりの数があるので data[8]〜data[10] data[200]〜data[204] data[1200]〜data[1204] 今はこんな感じで代入してます num[0] = data[0x80]; num[1] = data[0x81];
BitConverter.ToInt16(data, 6); BitConverter.ToInt16(data, 8); BitConverter.ToInt16(data, 200); BitConverter.ToInt16(data, 1200);
958 :
デフォルトの名無しさん :2009/06/24(水) 12:36:17
Bufferクラス
>>952 ウソ言うなやボケ。
XPであっても、VISTAであっても、7であってもランタイムは必要。
VISTAには2.0と3.0のランタイムがすでに入っているが1.1や3.5,4.0のランタイムは含まれていないので
別途インストールしないとだめ。
>>956 private byte[] byteSpliter(byte[] data, int startIdx , int length)
なるほど、こんな感じかな?
>>957 これでいけましたw
それ以降全部数字に変換されると思ってました
ありがとうございます
職業プログラマーの適性は協調性があること、 コミュニケーションができること。 あとは腰痛などの持病がないこと。
プログラマは協調性が無く、女にモテなさそうだから就職しなかった
963 :
デフォルトの名無しさん :2009/06/24(水) 13:11:25
職業の性質上、元々問題がある奴が多いからそんな当たり前のことが言われてるだけだろ
未経験でプログラミングのお仕事がやりたいんですけどどのスレで助言を頂けますか?
助言を与える服がない
うちはプログラマの1/4はバイトからスタート。 2年ぐらいやってもらって見込みがあれば社員にスカウト。 あとの3/4は新卒か転職組。 いきなり未経験でプログラマーの正社員は無理じゃね?
マ板でやれ
バイトでよければ情報誌にいろいろ出てる うちも求人出してるし
板違い
スカウトとか言ってる企業はブラック間違いなし。
35でプログラマ目指している俺がきましたよ
帰れ
ifを使って変数を比較したら何クロックぐらいですか?
975 :
973 :2009/06/24(水) 16:44:53
変数の型によって等の条件によって違ってくるような気がしますが 平均的にはいくつぐらいになるのでしょうか 数十くらいですか?
知らないなら黙っててください
CPUのクロックを測定するスレがあるからそっちで聞いてみたら? 昔と違って並列で動作したり、C#レベルだとJITでの最適化などで 単純に測定できないことが分かると思うから。
979 :
973 :2009/06/24(水) 16:48:24
>>978 そうしてみます。
ありがとうございます。
>>975 本気で聞いているの?
全体集合(比較可能な型の全ての集合)もわからないのに,平均ってなんぞい?
正確なクロック数はわからないけど,Step by Stepの利いていないCPUでWindows環境なら
数百万回くらい比較を行うループの実行時間とQueryPerformaceFrequencyからクロック時間が割り出せそう
もちろんスレッドのコンテキストスイッチなど目にも留まらぬ速さの場合
981 :
973 :2009/06/24(水) 17:05:22
本気で聞いています。 厳密なクロック数が知りたい訳ではなく 数十なのか、数百なのか、数千なのか、 そのぐらいのレベルで知りたいんですが。
980の言うように回数こなして実測が一番現実的だと思うがね。 CPUの命令レベルだったらだったら0〜2クロック。 分岐予測を失敗したらストールで数十クロックとか。意味ないっしょ。 cmp EAX, EBX jne LABEL1 それからJITで特定の方向にしか分岐しないなら分岐命令自体が削除されることもある。
983 :
973 :2009/06/24(水) 17:13:18
すいません。 ありがとうございました。
>>981 今のCPUはパイプラインだし多重キャッシュだし投機だし、正確に計るのは無理というか、
前提条件が足りなさすぎ。
とりあえずコードが最適化されてて変数の内容が32bit以下の整数値なら
レジスタに入ってるはずだからifは単純にCMP reg,reg、JE xxxxあたりに置き換えられて
合計で1.0クロック。
スレッドの遷移はifの数百倍以上のコストがかかるから外部から調べるのは困難。
詳しいことは、ここにCPUのマニュアルがあるから嫁。
INSTRUCTION LATENCY AND THROUGHPUTのところ
http://www.intel.com/products/processor/manuals/index.htm
誰か実際にやってみれ 1億回ぐらいループ回して平均 該当部分の逆汗も頼むぜ
なんか難しい話してるね 俺からしたら宇宙語だわ
初心者スレでやるこっちゃないわな
誰か次スレ立ててくれ うちはずっと規制中で手も足も出ん
構造って作った後から重複をまとめて基本クラスにするのを繰り返すのが普通なんですか? それとも最初から基本クラスから考えて派生を作っていくんですか? 最低でも書く前にこれはベースにまとめていくのがいいと思って構造を作っていって、出来あがってからコード化するのが限界だと思うんですが 最初からベースクラスから考えられる人っているんですか?いるとしたら日本語から英語を勉強した人が頭で考えるのが英語になるぐらいすごいんですが
992 :
デフォルトの名無しさん :2009/06/24(水) 17:55:24
いや基本的にそういう継承の使い方は間違い
>>991 3行目から下、いらないと思うぞ。何が聞きたいのかポイントがボケる。
最初から継承ありきで考えるのは、大抵の場合、間違いのもと。
994 :
デフォルトの名無しさん :2009/06/24(水) 18:18:31
ある機能が重複するなら、その機能をクラスに括り出してそのクラスのインスタンスをそれぞれが持つようにする。継承は不要。 最近は継承よりもそういうやり方の方が良いとされてる。
基本的には同じ動作だけど、個性を持たせたいとか オセロ作るときに初級AI、中級AIのために必要だなって思ったよ でも、継承しなくてもできることはできるんだよねー このときは継承じゃなきゃだめだってのがよくわからない
単純に同じ配列、リストに入れたいときくらいかなあ
つinterface
うめ
999 :
デフォルトの名無しさん :2009/06/24(水) 18:38:59
ポリモルフィズム使いたいときだけだな
実装の継承はまさに
>>991 のような難しさがあるから避けられる
そりゃControlみたいに完璧な設計ができるというならやればいい
継承は最後の手段って、あれは誰の言葉だっけ。マーティンファウラー?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。