ふらっとC#,C♯,C#(初心者用) Part54
スレ立て乙
もう新スレか。C#って人気が高いんだね
よくも悪くも裾野広がったなとは思う。
裾野が広がれば天才も出てきて俺の立場が危うくなるから なるべく広がらないで欲しい
でも、仕事はあんまりないな スレ立て乙
8 :
デフォルトの名無しさん :2010/01/23(土) 21:30:06
まぁ環境が実質Windowsのみだから広がりには限界があるだろうけど
11 :
デフォルトの名無しさん :2010/01/23(土) 21:33:04
>>10 PC用のフリック入力キーボードらしい
もうフリック動作はできててキー情報飛ばすだけとか
わざわざ紹介してくれなくてもC#製のフリーソフトって今は結構沢山あるよ
C#は逆コンパイルできちゃうのがなぁ
>>14 案件数No1のJava様に喧嘩売ってるのかお前
業務はともかく,Java製フリーソフトは.NETとは比べ物にならないくらい嫌われるよな
17 :
デフォルトの名無しさん :2010/01/23(土) 22:20:06
仕事は別にいいじゃん 納品するんだし 特定企業へ納品じゃないタイプのソフトは開発しやすいけど 解読もされやすいからなあ
JavaVMがWindowsに標準で入ってりゃもう少しマシだろうがな… Vista以降は.NET2.0が標準で入ってるせいか風当たりが弱くなって良かった
解読されたくなかったらC++しかないってことですか結局
アセンブラで書こうが何十にもパッキングしようが、する奴はする 電子データにしないのが一番だ
Flashの広まり見ると標準で入ってるの入ってないのはあんまり関係ないんじゃない
>>19 程度問題だが、それだって可能。C++用の難読化ツールもあるぜよ。
WindowsにはFlash Playerが標準で入ってるけどな。
>>21 別のフリーソフト探そうって気にはなるけど
別のフラッシュ探そうって気にはならないでしょ
代替がないし
なんか納得
Silverlightの時代がくるけどね
ないない
あり得ない。
>>22 知らんかった…そうなのか
関係ないがプロじゃない俺にはココは本当に勉強になる
たまにおかしな人もいるけど、まあそんな人も含めてホントありがとう
日曜くらいはゆっくり体休めてつかぁさい
まーでも、程度問題だけどな。 アセンブリは読めなくても、C#のコードは読める、ってやつは多いし。
アセンブラ読めないやつはプログラマとして認められないだろ
C#は変数名まで元通りでほんとに書いたソースそっくりに復元できてしまう。
ローカル変数名は消える(PDBファイルに含まれている) フィールド名が残るのはJavaも同じ
つまりaとかbとか変な名前を使って gotoを多用すればいい
このスレ的にはIL読めれば十分
ILいらない笑
MFCが読める奴はキチガイ
40 :
デフォルトの名無しさん :2010/01/23(土) 22:45:12
>>34 昔作った自分のプログラムのソースなくて実行ファイルから復元したら
本当にそっくりだった
とりあえず難読化できるやつ使えば解読しようとする人は少なくなるだろ
お前のなんか見ても時間の無駄じゃ
いつか見た流れw
解読する価値のあるソースってどのくらいあんのかな。
飯食う難読化ツールと呼ばれてます
解読するより自分で作ったほうが20秒早い
余程画期的なコードなのだろう
48 :
デフォルトの名無しさん :2010/01/23(土) 23:16:15
>>44 価値はどこで発生するかわからんしなあ
JaneStyleのようにオプソだったのがいきなり法人で面倒みるとかあるし
JaneStyleはオープンソースじゃない オープンソースなのはJaneStyleの前身であるOpenJaneの話 そこからの派生は基本的に全て非公開 JaneStyleは元々●の収入が大きくなってきたから法人に移行したのだろうと言われている その際NidaとViewの作者を抱き込もうとして失敗した
まあそんなあっと驚くようなアルゴリズムなんてそうそう発見出来ないよね
あっと驚くようなアルゴリズムが出来たらさっさと公開してあっと驚くような使い方してもらって こっちを楽しませて欲しいわな
法人に移行した方が得する収入って一体…
C#だと int* a,b,c; ってやるとbもcもint*型になるんだな。 C言語だと int *a, *b, *c; とか全部に*必要でクソ面倒だったがC#は楽だな。
まあ釣りなんだろうが、C#は int a, *b, c[5]; ってのはできんだろうし、そもそもunsafeブロックの中だけの話を持ち出してもしょうがなかろ
むしろ「どうせポインタなんかめったに使わないんだからどうでもいいよね」 って文法が複雑になるのを嫌った結果なんじゃないかと
56 :
デフォルトの名無しさん :2010/01/23(土) 23:51:11
>>53 むしろCの宣言がおかしい
面倒とかそういうのじゃなくて
int型とint*型を同時に宣言とか・・・
int[] とかの系譜だろ。Javaに倣ったんだと思うよ。
でもc言語だと int x[5];でできた配列が C#だと int[] x=new int[5]; とか、new int[5]とか余計なものついてて面倒だな 一番最初にint[]っていってるんだからつぎにまたint[5]っていわなくても int[]x =new[5]でいいじゃんw
つ var x = new int [5];
60 :
デフォルトの名無しさん :2010/01/24(日) 00:13:32
>>58 int[] x
これはいわゆるポインタだからなあ
厳密にいえばハンドルだけどね。どっちでもいいけど。
62 :
デフォルトの名無しさん :2010/01/24(日) 00:20:55
まあねレイヤーはさんでるからそうなるけど なんでnewしないといけないかというとCでいうところのポインターのような扱いということで
int* x = mallocと int* x = (int*)malloc の違いみたいなもんか。 確かに後者のようにかくのは文法的に間違いじゃないがしつこいものは嫌われるな。 C++だと(int*)ってかかないとエラーになるようになってて気持ち悪いけど。
64 :
デフォルトの名無しさん :2010/01/24(日) 00:27:47
>>63 cのころもアセンブラレベルで考えると配列もたぶんポインター管理になってると思うよ
最近はおじゃましてないC/C++スレで定期的にこれで盛り上がるから(未定義と含めてw
C#の配列は参照型。 stackallocのような変なのは置いといて。
面倒な構文だな class Personがあったとして Person p,q,r=new Person(); だとp,qはnewならないのか。 いちいちq=new Person(),q=new〜〜 と書かないといけないなんて不便だね。
67 :
デフォルトの名無しさん :2010/01/24(日) 00:37:04
そのプログラマー(というかギーク、アセンブラで最短クロックで書かないときがすまないような) 寄りな不便な・・・を優先した結果がC特有のわかりにくさだと思うよ。
68 :
デフォルトの名無しさん :2010/01/24(日) 00:38:33
第一クラス使えば init関数通して、初期化して、処理終わったらメモリ開放して・・・と あれこれめんどくさいことから開放されてるのにトレードオフだよ
多分適当に作ったらいつの間にか標準化されてたんだろ
もっと楽したいです・・・
66みたいな構文で勝手に初期化される方がたまらん p,qだけ空参照にするとき分けて書く方がめんどい
72 :
デフォルトの名無しさん :2010/01/24(日) 00:43:00
>>69 そうともいうかも
アセンブラバリバリにやってたやつらが
こうすればいいんじゃね?で積み重ねた結果だと思うw
*とか->とか見てるともうね
p->q->r->
え?
:-)
x,yがint型のとき object.Equals(x,y) と x==y は同じものですか?
最終的な結果や意味的には大体同じ。ただし見た目も違うし 生成されるコードも違う。 object.Equals(x,y) はできるだけやめとけ。無駄が多い。
80 :
デフォルトの名無しさん :2010/01/24(日) 02:56:11
参照について教えてください。 String str = new String(); str = "hello"; XXX xxx = new XXX; xxx.EatThis(ref str); class XXX{ public XXX(){} public void EatThis(ref String s){ m_str = s;} private String m_str; } の場合、 「"hello"って文字列はXXXの中のm_strにコピーされる」の? それとも 「メモリ上の実体は呼び出し側のstr(スタック上?)にあって、 そいつに対しての内部的なポインタ的なものがxxx.m_strに保持される。 且つ、実体の方は、実は参照カウントを持っていて参照カウントが+1されている。 だから仮にstrにnullをセットしても、xxx.m_strからの参照分のカウントが残ってるのでガベージされない。」なの? COMオブジェクトとかも考えると、後者だと信じたい。 でも実際はどうなのですか?
後者だけどマークアンドスイープなので参照カウントはしてない
ポリモーフィズムってなんのためにあるんだろうな。 同じ名前なのにまったく別のことしたら名前から何をするメソッドなのか推測できなくて紛らわしいじゃん。 混乱の元だな。 ポリモーフィズムはスパゲティコードを書くための文法なのか
そう思うんなら、無理に使わなくてもいい。
ねれないお( ^ω^)
int.ToString() double.ToString() ←これもポリモーフィズムだぞ。便利だろ?
つられんなよw
ポリモーフィズムはそのメソッドの意味をある程度 実装側が、自分の事情に合わせて自由かつ柔軟に解釈できる程度の曖昧さが残されている。 それが便利な場合もあれば混乱の元になる場合もあると思われる。
>>82 少なくとも「まったく別のこと」をするための機能でないことは確かだ
>>88 便利じゃない。
valueToStringとかのメソッドのほうがわかりやすい。
たとえば Formクラスの変数だとToStringは system.windows.forms.formとかいう文字列が返される ならDateTime型の変数もToStringすると System.DateTimeなどいう文字列が返されるのか思いきや なんか2010/1/24みたいなのが帰ってくる。 これはまったく別の機能であり、大変まぎらわしい 違う機能ならValueStringみたいな名前をつけるべきだ。 同じ名前で別な処理をするしくみは スパゲティの要因になることは明らかである。
派生クラスを作るたびにそのvalueToStringメソッドにコード追加していくのか? 愚かだね。保守性も何もない。まあきみにはそういうスパゲッティがお似合いだよ。
質問よろしいでしょうか。 現在、C#を始めてからそんなに時間が経っていないので本当に初歩的なことですが、 デリゲートとイベントとはどのように使い分ければよいのでしょうか? 文法的な違いは分かるのですが、わざわざイベントなどを用意しなければいけなかった必然性がいまいち…… 調べてみたところ「イベントは特定のケースに特化したデリゲートと考えればいい」などとありましたが、 どのような場合が特定なケースなのかがもうひとつうまくイメージできません。 ややこしいようでしたら、参考になるURLあたりでも提示していただければ幸いです。
お似合いだね。ニッコリ
レス95は5分後に自己解決予定です。
構造体の面罵変数ってなんで初期化できないの? struct person{ private int age=30; } クラスだとできるのに構造体だとこれができない理由は何?
あと、不明な点が・・・ struct person{ private int age; public person(int x){ age=x; } } こんなので、外部から person p = new person(); クラスだったら引数0個のコンストラクタはありませんとかなるけど structだとperson(int)しかないのにperson()ができちゃう理由を教えて。
サービス、サービスゥ!
配列とパフォーマンスがらみの話だったと思う。 structは値型なので、newしなくても初期値をもつ。 なのでデフォルトのコンストラクタははじめからあるという考え方をしている。
>>98 、99
クラスは参照型、構造体は値型
これだわからなかったら、わからないところをまた質問しる
なせば成る、強引にデフォルトコンストラクタを作ろう^-^\ struct ValueTypeA { public ValueTypeA(int x, int y) { X = 99; Y = 88; } public int X; public int Y; } ildasm で逆汗して、再アセンブル // public ValueTypeA(int x, int y) { の部分を引数なしのコンストラクタに修正 .method public hidebysig specialname rtspecialname instance void .ctor(int32 x, int32 y) cil managed // 修正後 .method public hidebysig specialname rtspecialname instance void .ctor() cil managed
e?
CLRとCILの違いをおしえて コモンラングエッジランタイム? 共通言語なんとか意味不明なんだよ
CILは中間言語の名称。C#みたいなもん。 CILを動かすためのランタイムの仕様を定めた仕様がCLIと呼ばれるもので CLIをMSが.NET Frameworkのコアとして実装したのがCLR
>>95 とりあえず、デリゲートはパブリックフィールド/プロパティにしないでくらはい
するときはイベント使ってくらはい
メソッドの引数{Sort(Comparison<T>)みたいな}にする場合はデリゲート使ってくらはい
>>106 ワタシ男だけど
それさらっと言える人ってなんかちょっとかっこいいと思う。
CLIとCILは紛らわしいよな
CILの仕様を定めるのがCLSで 型システムの仕様を定めるのがCTSで それらに加えてメタデータや実行環境の仕様もひっくるめた仕様がCLIで それをMSが実装したのがCLR
おい止めろ
VBメインでコーディングしててたまにC#をコピペしたり改変したりしてるときはなんともなかったが ほんの気まぐれでC#をメインで使っていて、昔VBで書いた部分をコピペしてC#に改変するとき 感じるなんとも言えない違和感は異常
VBは構文が全然違うからまだいい C++/CLIやJavaは最悪
JavaとC#行ったり来たりは辛そうだなあ
構文というか単語が違うのと冗長なのが欠点だな>VB dim a as integer→int a; end sub→}とか byval sender as objectとか インテリセンスを利用しても、コード書く時間がどうしても長くなる。 かといって初心者からみてもdim a as integerのほうが int aよりわかりやすいなんてことはまったく無く、無意味に冗長になってる言語
116 :
デフォルトの名無しさん :2010/01/24(日) 15:49:32
>>115 IDEなければどっちもどっちですよ
C#だってMS製のコンポーネントはどれも名前長いですし
118 :
デフォルトの名無しさん :2010/01/24(日) 15:53:21
>>117 ああそこ重要ってことね
C#でVBライクな画面開発できるようになったので価値ないのは事実
サンプル探してぐぐった時にVB出てきたときのがっかりといったら
なんだあの見難い構文は
現状あえてVB.NET選ぶ理由ってそんなにないもんね。 ポトペタだってC#ですいすい作れるし。
「ファイル(F)」の(Fみたいなアクセラレータキーの設定ってどうするんでしょう? ショートカットキーとはまた別ですよね?)
ファイル(&F)
stringとStringがあるのはなんで?
難しくてわからない
125 :
デフォルトの名無しさん :2010/01/24(日) 17:46:29
stringはSystem.String(String)の別名 floatはSystem.Singleの別名
好楽と呼ばれるかピンクと呼ばれるかの違いみたいなものか
言語としての体裁という面もある intがないとC#自身でSystem.Int32を定義できない(System.Int32は実際にC#で書かれてる)
てことはintは別名ではないの?
同じ名前の奴がクラスに2人いるから いじられキャラの方が変なあだ名で呼ばれてるような感じか
>>127 using Systemはデフォルトでいいじゃないか思ってたけど、そういう面もあるんだね。
131 :
127 :2010/01/24(日) 18:28:37
すまん勘違い System.Int32でも通った mscorlib.dllを参照しないようにしてSystem.Int32などの特殊な型を定義するときは コンパイラが特別扱いして循環参照のエラーを出さないみたい
132 :
デフォルトの名無しさん :2010/01/24(日) 19:19:44
>>119 VB6なら、チープな環境だと(起動時の)圧倒的な速度差があるけどね
もう少し起動が速くならない物か?
>>111 えっと
マイクロソフトを止めれば良いんですよね?
無理!
>>115 激しく同意。あの構文は超糞
インテリセンスだけはC#よりVBのほうが便利なんだよなぁ 逆にC++のインテリセンスは終わってる Visual Studio前提だとC#になれちゃうとC++とかうざくて仕方ない。
VBの方がインテリセンスがいい、っていつの話?
C++はテンプレート使ったときのパラメータヒントが凄すぎる せめて色分けしてくれ
>>135 Visual Studio 2010 ベータ2の話
へー。スレ違いだな。
>>98 構造体の配列とった時に、領域の 0 クリアだけで済むように。
構造体のデフォルトコンストラクターで 0 クリア以外を認めると、
配列確保したときに要素数の分だけコンストラクター呼ばなきゃいけなくなる。
>>99 構造体の場合、デフォルトコンストラクターは 0 クリアって決まってる。
定義しなくてもいいというか、むしろ定義できなくなってるはず。
C#では構造体のデフォルトコンストラクタは定義できないけどCLI的には定義可能 他の言語でデフォルトコンストラクタが定義してあれば C#でインスタンスを作ったときにもそのコンストラクタが呼ばれる
>>140 仕様書からの該当項目の抜粋
ECMA-335 Common Language Infrastructure (CLI)
8,9.7 Value type definition
5. Unlike object types, instances of value types do not require a constructor to be called
when an instance is created. Instead, the verification rules require that verifiable code
initialize instances to zero (null for object fields).
前にやったなこの話題 前に見たなその抜粋
試してみればわかるけど,デフォルトコンストラクタがあれば実際呼ばれるよ
呼ばれないって
964 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/25(土) 22:44:49 「値型はユーザー定義のデフォルトコンストラクタが呼ばれない可能性がある」が正しい。 CLIの仕様としては値型のデフォルトコンストラクタも存在するが、それが呼ばれるのは システム定義のデフォルトコンストラクタ(0とnullに初期化する奴)が呼ばれない場合に限られる。 で、どうせ呼ばれないし、定義するだけ不毛なので定義できないようになってる。
>121 返事がおそくなり申し訳ありません ありがとうございます!
どういたしまして
Arrayには配列要素のデフォルトコンストラクタを直接に呼び出すInitializeというメソッドがある。 ValueTypeA [] b = new ValueTypeA[100]; b.Initialize();
>>143 >>103 の方法で作れるからやってみるといい。
newしてもデフォルトコンストラクタは呼ばれない。
Array.Initializeでは呼ばれる。
結局145が正しいのか?
つか
>>141 と
>>140 の内容全然違わねえか?
値型のインスタンス作成時はコンストラクタの呼び出しを必要としません。
代わりに検証コードはフィールドがゼロで(オブジェクトフィールドはnullで)初期化されることを検証します。
だろ?
>他の言語でデフォルトコンストラクタが定義してあれば >C#でインスタンスを作ったときにもそのコンストラクタが呼ばれる この部分がどっから来たのか説明が待たれる所ですね
どうでもいいよ
どうでもいいね フカシこいたことは笑われるべきだが
フカシ?不可視?
140は英語読めないんだろ そして相手も英語読めないと思ったんだ もうそれでいいだろ
C#って関数の引数に void func(const ref Object objDontTouchMe) みたいにconst refとかできないの? どうやって、「ただ見るだけだよ」って分からせられるの?
それならrefを付けなければいいと思うのだが
たぶんrefキーワードを理解できていないのでは。
(´・ω・`)
(´・∀・`)
そういえばしばらくref使ってないな しばらくっていうかAPI使った時以外使ってないかも
( ^ω^)おっおっおっ
refよりoutを使う機会が多い
(;゚;ё;゚;)
おいやめろ
170 :
デフォルトの名無しさん :2010/01/24(日) 23:34:20
Windowsフォームアプリケーションを作成しています。 発行してClickOnceの自動生成サイトからダウンロードしてもらいますが、 この発行時にWeb上に自動生成されるサイト(紺色のグラデーションの帯上にアプリケーション名が記載されているHTML)のデザインを、自分で変更することはできますでしょうか。 また、このHTMLの雛型がソリューション内のどこかにあると思うのですが、この雛型を変更したり、別の雛型を選択することは可能でしょうか。 よろしくお願いいたします。
できますでしょう。
const refってどの言語で使われてるの? いろいろ考えてみたんだが、どうしても用途が理解できない。
c++で普通に使われてるよ
c++とかじゃないの? c++では値型と参照型という区別がないからね。 大きなクラスでも値型のように使える。 すると値型を参照渡ししたい場面はc#とかより普通にある。
普通にあるな
outはTryParseで使う
F#では out引数を多値関数に置き換えてくれる。 > let (b, v) = System.Int32.TryParse("123");; val v : int = 123 val b : bool = true
>>177 戻り値とoutで返すより、この方が明確でいいな
面白い
つまんね―
わざわざ変数用意してoutで渡すよりスマートな解決方法だな。面白い
スマートすぎてなんだかなあ
(´・ω・`)よーんだ?
184 :
159 :2010/01/25(月) 02:33:37
回答ありがとうございます。
>>160 refをつけないとオブジェクトのバイナリコピーが発生するのかな??って思ってたんですが
ちがいますのん?
>>162 そうだと自分でも思います。
185 :
159 :2010/01/25(月) 02:38:24
>>184 そんな事しなくても、クラスはコピーされない。
構造体はコピーされる。
プロファイルを取る前からパフォーマンス気にして、構造体がコピーされないようにref付けて…とかならやめとけ。
小さいならコピー作らせた方が早いし、万単位で呼び出さないと計測誤差程度にしか変わらん。
クラスは参照型 構造体は値型
どういたしまして
ある文字列の後ろに、n個分のスペース文字を追加する最も簡単な方法は何でしょうか?
for(int i=0; i<n; i++) s += " ";
そんなに使い込んでないが正解予想 A += new string(' ', n);
別に一番簡単ではない上に遅いかも知れんが String aaa = "test" int n =10; aaa = aaa.PadRight(aaa.Lenght + n); とかとりあえず書いてみる
>>193 普通はそういった処理は桁合わせをするために行うものなので、
194のやり方のほうが有用だと思うよ。
しかし桁あわせというと非UTF-16のバイト数で合わせたいパターンも多い
stringに *演算子を追加とか
自分のプログラム上のコントロール単位のIME制御ではなく アプリが特定の動作をした場合、キーボードの[半角/全角]キーなどでIMEをONにしたように するにはどうすればいいんでしょうか? またアプリ起動時からIMEの常態をモニターしたいのですがこれもよくわかりません。 モニターさえできればkeybd_eventで[半角/全角]キーが押されてように 振舞ってもいいですし やってみたこと Runtime.InteropServicesで ImmGetContext <- 最初はthis(Form) ImmGetOpenStatus ImmReleaseContext うまくステータスとれず これってもしかして全プログラムの親(タスクバー?)にすればうまくいくんですかね? その場合どれからハンドルとればいいのだろう・・・
>>199 ユーザーの環境によっては半角/全角キーでIMEのオンオフじゃなかったり
そもそも半角/全角キーがなかったりすることもある。
そういう環境に依存するような実装は考えない方が身のためだよ。
そんな実装が必要なアプリってなんなんだろ・・・・ 入力する時に必要なだけなきがするんだが
日本語化がアホなオンラインゲーでIMEのON/OFFをコントロールしたいと予想 と思ったが全角/半角エミュレートでいけるんなら違うか
スクリーンキーボードのひらがな限定の物です 文字入力開始時にひらがなモードになってないと例えば あ -> 3 とかでちゃうんでこれを回避できればなあと
それはキーのコントロールより、IMEの制御では
さぁはやく50音のボタンがあるフォームを作る作業に戻るんだ!
206 :
デフォルトの名無しさん :2010/01/25(月) 16:33:26
五十音といえば、左から右に「あかさたな…」と並べるUIを作った奴には死んで欲しい
>>11 入力動作くらい誰にでも作れるんだぜ
問題はその後なんだぜ
209 :
デフォルトの名無しさん :2010/01/25(月) 17:49:32
211 :
デフォルトの名無しさん :2010/01/25(月) 17:56:40
>>210 IMEさえ起動すれば勝手に拾ってくれるけど
IMEの起動と入力モード管理がしたいだけなんだよね
手動でIME起動してひらがな入力にしておけば普通に動くよ
Linuxなんかに比べればWindowsのIMEは規格が遥かにしっかりしてはいるけど、 やはり不確定要素があって通常のアプリレベルでは処理しにくいと思う。 (ソフトウェアキーボードでIMEの操作するなんてぞっとするだろ) ソフトウェアキーボードはひらがな/アルファベットの入力に留めて、 入力した文字列からの全文検索で全て処理できるように作るべきじゃないかな。 まあ最終的に作りたいものが何なのかによっても変わってくるけど。
214 :
デフォルトの名無しさん :2010/01/26(火) 01:36:43
>>212 何でイベント送信してるの?
keybd_eventなら余裕で拾ってくれるけど
次のような二次元配列をList<T>を使って実現することは可能でしょうか? # string name, int age Taro, 19 Hanako, 21 Susumu, 34 Kyouko, 6 Hatoyama, 999 こんな感じで名前と年齢をペアでリストに追加していきたいと思っています。
4.0で遊んでるならTuple 3.5だったらKeyValuePair突っ込むなりしろ
Personクラス作ればいいよ
>>216 > 3.5だったらKeyValuePair突っ込むなりしろ
KeyValuePair
これは初めて聞いたんですがどういう用途に使えるんですか?
氏ねカス
死ねクソが
222 :
デフォルトの名無しさん :2010/01/26(火) 05:57:26
>>218 そのサイトは検索エンジン経由だけどお世話になってるがアニオタだよね
何かのサンプルソースの中に割りと普通な個人名があったので
調べたら声優だったw
と予断は置いといて、上記を逸するというかforeach考えると不思議じゃない機能だよね
ただ機能増やしすぎかなあ
また拡張拡張でおかしなことにならなければいいけど
鍵と値のペアに使える。
ごめん。間違えた。使えなかった。
>>222 関数の型推論をするようになったら危ないとは思うが、
匿名型はクラスメンバーやメソッドの引数と戻り値には使えないという一線でガードされている。
気になるならLinq専用と割り切ってれば十分だと思う。
やっぱ十分じゃないわw
C# .NET を勉強し始めたばかりです Form アプリでボタンが押されたらメッセージボックスを出す、という処理を書きましたが メッセージボックスのところでコンパイルエラーが出ます MessageBox.Show("Test","Test",MessageBoxButtons.OK,MessageBoxIcon.Error); >error C2143: 構文エラー : ';' が '.' の前にありません。 これはどういう意味なんでしょうか?
>>227 コピペしたけどそんなエラー出ねえよ
どっか他が間違ってるんだろ
';' が '.' の前にありません。 て意味 単純にその前後に何か書いてるんじゃない? その行だけコピペしたら100%うごくはずだし
230 :
227 :2010/01/26(火) 09:11:11
済みません わかりました 原因はしょうもなさすぎてとても言えないミスでした。。。
>>231 そんなこと言うなよ、俺が変わりに暴露してやるから
CXXXXってcl.exeのエラーだよなw
C#の参照渡しはoutとrefの2種類あります。 outは初期化した参照でなくても渡すことが出来るという点でrefより融通が利くわけですが、 それでもなぜrefが存在しているのでしょうか? outはダメでrefでなければならないというケースはどんなときですか?
なぜって、データが欲しいのにnullが来ても困るじゃん
outは引数の中身にアクセスできないよ 未初期化のローカル変数にアクセスできないのと同じ
無印は入力のみ、out は出力のみ、ref は入力でも出力でもある場合に使うのよ
まあ基本refやoutなんか使わないほうがいい
>>236 int a = 10;
と初期化済みの変数aをメソッドにout付きで渡したらどうなりますか?
呼び出し元で初期化されてるかどうかは呼び出し先のメソッドには分からない だから値を読もうとすると問答無用でコンパイルエラー
>>239 なんでそんな、試せばすぐに分かることを人に聞くんだ。
自分でやってみて考えなさい。
あとMSDNちゃんと読もうな。
つーか、言語仕様とか「何か意味があるんだな」って受け流すべき。 「なにこれ作ったやつバカじゃないの?」ってのはもう最悪に素質ないから趣味でも辞めろ。 仕様やライブラリを信用できなかったらなにもできない支那。
仕様読まない人に言っても
>>243 「バカじゃないの?俺ならこーする、こっちの方がこうこうこういう理由で合理的じゃん!」
ってやって皆に認められる言語やライブラリやフレームワーク作る人も居るとは思うけどね。
とはいうけど言ってることは基本的に同意で。
>>238 参照渡しもポインタも使わずにどうプログラムを組めと
参照の値渡しをすればよい 理屈の上ではrefやoutも完全に代替できる
誰も絶対使うなとは言ってないのに極論厨だなあ 初心者は極論持ち出さない方がいいよ 頭固くなるから
参照の値渡しのことを参照渡しって言うわけなんだけれども。
int型では無くstring型の配列があるとします。 配列には次の様に”数字.dat”という規則のファイル名が格納されており、 003.dat 01.dat 006.dat 0005.dat これをソートして 01.dat 003.dat 0005.dat 006.dat のように昇順で並び替えたいと思っています。 リテラルのソートをしてくれるクラス・メソッドはありますか? もしそのようなクラス・メソッドが無い場合はどうすればよろしいでしょうか?
Array.SortにComparison<T>を引数に取る奴があるから比較自分で書け
というか、普通に書いてたらrefもoutも使わないとかけないところなんて殆どないぞ。 メソッドとプロパティとdelegateとイベントハンドラでほとんどなんでもできる。
Sort((a,b) => int.Parse(a.Replace(".dat","") - int.Parse(b).Replace(".dat",""));
ありゃ、ずれた。 Sort((a,b) => int.Parse(a.Replace(".dat","") - int.Parse(b.Replace(".dat","")));
refだのoutだの使いたくなった時はそれはクラス作る時ってことで。
問題は >まあ基本refやoutなんか使わないほうがいい この発言の根拠がなにかってことじゃないのか?
すぐ治ったな
[DllImport("誤爆")]
refやoutを使わないために構造体をクラスに 置き換えるんならそのまま使った方がマシだろ。
始めからつかわねえように設計しろってことか
Javaじゃないのに余計な機能つけるMSが悪いな
構造体は値渡しに限る!
C++/CLIとかの兼ね合いのせいじゃないの
なんてこった! TryParse も out 使わずに実装しやがれ!
TryParseパターンを使う場合も,それだけ提供するんじゃなくて例外投げるバージョンも提供しろっていう ガイドラインがある
いわゆる副作用だし
outを使うなって言ってるMSが使ってちゃいかんでしょうw 例外は使いたくないな だって、ジョエルが使うなって言ってるもん(;。;)
誰だ?ビリーか?
Joel Spolsky お前オッサン臭がするぞ オッサンだろ
でも、out使わないで、Parseに成功したか うまく書く方法はあるんか?
boolと値を持った構造体を返すとか
TryParseの中でParse呼んでたら笑うな
TryParseなんてあんのが間違ってるな。 true/falseの返り値チェックし忘れそうだし。 こんなメソッド提供する必要ない。
>>273 間違ったコードは間違って見えるようにするって奴か
しかしながら俺は”他人が俺の拵えた関数のエラー値を正しくチェックしている”なんて信用していないんだ。
だから例外処理を強制する
例外処理は値渡しに限る!
「out 使うな」は「絶対ダメ!」じゃなくて「避けれるならない方がいいよ」って話。 多値戻り値サポートしてれば out 要らないんだけどね。 あと、C# の場合は過去のしがらみ(COM 相互運用とか)で out が必要。
Goは多戻り値サポートしてるらしいね。 なんでC#はサポートしなかったんだろう?
そもそもなんでいつまでも関数と戻り値と引数なんだろう。
>>284 関係性を定義するのは集合と写像が基本であり、
写像の典型例が関数だから。
エラーを戻り値で通知されると、いちいちメソッドの説明読んで 「エラーの際は○○を返却します」を読まないといけないから嫌じゃ。 マクロが使えるHRESULTとかだったらまだいいけどな、 ハンドルでNULLと0xFFFFFFFFが共存してるのはマジ死ねとしか言えない。
そーか 死ね
そーかは嫌いですよね。
>>286 そんな旧式の動作をするようなクラスが.NETの基本クラスライブラリにどれだけあるか、例にあげてご覧よ。
C時代に逆行すんのが嫌だって言ってんじゃないの?
>>263 >>258 比較ごとに毎回replace*2、parse*2するのはコスト的に馬鹿らしくないか?
因みに、PenM 1.7GHzでreplaceとparseだけを2^21回実行したら1.5〜2秒くらいだった
(2^21回=要素数1024の最悪ケース=要素数65536の平均ケース)
何回ソートするのかによる 頻繁にやるようならキャッシュするけど 数回なら拘るのは馬鹿らしいのでしない
>>291 最適化は質問者の仕事だろ
実際の流れが分からないと答えでないし
そもそもそこまでしてやる必要ない
独学でjavascriptをやってみて面白くなってきたんですが(jsだったのは実行環境を整えるのが楽だったから) 文法が似てるきがするのでC#もやってみたいんですが いわゆるmainにすべての処理を書くようなプログラミングで(サブルーチン程度なら関数も使っていますが) オブジェクト指向?構造体?コンストラクタ?みたいな状態なんですが(知らずに使っているかもしれませんが) 上記のようなことを知りたい場合におすすめな定番ページはありますか? 演算子、配列、構文などは分かってると自分では思います
本当かなあ・・・
ソリューションの右クリックでエクスプローラー出したり 自分でエクスプローラーでプロジェクトの場所開くなりして DebugやReleaseフォルダ探せばEXEファイルが入ってるだろう
298 :
デフォルトの名無しさん :2010/01/27(水) 08:01:02
>>266 オブジェクト指向頭になるとintだろうがなんだろうが基本的にはクラスで
抱える考えになるのでrefとかoutで悩むことはないはずなんだが
>>267 >>262 のAPI使うときにないとこまる
用途はそれくらいだろ
299 :
デフォルトの名無しさん :2010/01/27(水) 08:03:43
>>296 ビルドは作ってるだけだよ
その隣のデバックのところで動かせるし
exeそのものを取り出したいならプロジェクトのパスをたどって
binフォルダ->Releaseフォルダ->xx.exeと探すしかない
javascriptのprototypeベースクラスのほうが難しいと思うけど、 きっと手をつけてないんだろうな。 でもま、そんなあなたに JScript.NET ! こっそり入ってます。
301 :
296 :2010/01/27(水) 08:13:45
見付けられました、ありがとうございます
2008 Expressで、[デバッグ開始]で実行したときに 自動的にデバッグビルドに切り替えるか、警告を出してくれるようなオプションはありませんか?
F# は多値戻り値をサポートしてるよん
多値戻り値ってなーに? object[]返してるようなもの?
従来のCなどであったコールバック(イベントドリブンとかで使ってるやつ)というのは デリゲートとかいうやつなんでしょうか?
>>304 C系の文法で書くなら、
Ret1, Ret2 Method(Arg1 x1, Arg2 x2)
ラムダ的に書くなら、
(x, y) => (x + y, x * y)
みたいなの。
C# 的にいうと、
void Method(Arg1 x1, Arg2 x2, out Ret1 r1, out Ret2 r2)
を
var r1, r2 = Method(x1, x2);
って書き方で呼べてもいいじゃないっていう。
>>305 おおむねその通り。
関数ポインターよりはデリゲートの方が高機能だけど。
インスタンスメソッドも渡せたり、マルチキャストできたり。
参照渡しは参照渡し 値渡しは値渡し ポインタの値渡しはあるが、参照の値渡しなんて概念がある言語ってあったか?
だから参照の値渡しってのは結局のところ参照渡ししてるだけだっつーの。
「参照の」は「参照型の」という方が自然だが、普通にC#で使うな
>>310 じゃあ(ref object x)はなんと表現するんだ
参照の値渡し 1) 参照の(指している何か自体の)値渡し 2) 参照の(指している場所情報の)値渡し だから何?
>>309 JavaとかC#の参照型って結局ポインターみたいなもんだからねぇ。
ポインターの値渡しに相当。
call by object だな。 「参照の値渡し」というのはVBの用語と考えた方がいいと思うが。
概念的な話なのか内部構造的な話なのか
318 :
デフォルトの名無しさん :2010/01/27(水) 11:11:11
概念からくる内部構造じゃないの? c#だとクローンが参照の値渡しみたいなもんじゃね?
参照の値渡し 参照の参照渡し 値型の値渡し 値型の参照渡し
boolとstringみたいに帰ってくるのがほとんどだろうから if (method(xxx)) { xxxxxx; } って書けないのはありがたみがないな
どうせ成否判定と処理結果を返したいってのが殆どのケースなんだろし 成否判定だけ特別に扱える構文でも作ればよくね? → 例外が出来ました ってのが元々なんだけど、C#では例外で処理フローつくるのはやめてねってことになってるんだよね。 だから検査例外が存在しない。(catchしなくてもコンパイル通る=処理しないといけないエラーは例外にすんな)
322 :
デフォルトの名無しさん :2010/01/27(水) 12:40:40
324 :
デフォルトの名無しさん :2010/01/27(水) 14:10:07
c#でコントロールの再描画の際のちらつきを抑える方法はないでしょうか? Formにダブルバッファ設定があったので試しましたがやはりちらつきます。 ゲーム関連のようにvsyncを待ってとかできれば一番いいのですが
まあFomだけ有効にしたって子コントロールはダブルバッファリングしてくれないからね
>>325 まあそんな感じですよね
ウインドウのシステム上完璧にってのは無理なんですかね・・・
あとvistaとか7は問題ないのかもしれないですけど古い2DドローシステムのXPはどうしても
>>324 フォームのダブルバッファはあくまでもフォームに対する設定だからなぁ
そのコントロールを派生し、コンストラクタにおいて
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
this.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
をやってみるといい。
あ、True ではなく true ね
329 :
デフォルトの名無しさん :2010/01/27(水) 15:00:22
>>327 >>328 おお、まったくちらつかないw
Direct2DでやれることはほぼできるしAAかけたりできるのにちらつきがあることで
あきらめてたのがあったんですがこれでできそうです
331 :
デフォルトの名無しさん :2010/01/27(水) 15:28:30
>>254 遅レスだけどStrCmpLogicalWというのがある。
>>254 ラムダ書けるバージョンなら
tring[] dat = {"003.dat", "01.dat", "006.dat", "0005.dat"};
Array.Sort(dat, (a, b) => int.Parse(a.Replace(".dat", "")) - int.Parse(b.Replace(".dat", "")));
foreach(string s in dat)
{
Console.WriteLine(s);
}
sが抜けてた。 string[] dat = {"003.dat", "01.dat", "006.dat", "0005.dat"}; ね
Color.Blackとか色を指定している所を、テキストァイルにセーブして、次ぎの時に再現したいんだけど、 "Black"とかstringで保存しておいて、次ぎに読み込んだ時に、Color.Blackが簡単に実現できる方法はなんでしょうか? もちろん色は任意の色ですが
XmlSerializerで列挙体シリアライズできなかったっけ 普通に
それはRGBの3値で保存してはだめなの? 名前のある色ばかりじゃないと思うんだが
ColorTranslator.ToHtml <-> ColorTranslator.FromHtml とか?
>>336 Color.FromNameで出来ると思われ。
>>252 それをこの前、別スレで言ったら思いっきりバカにされたよ。
C#では参照という言葉を参照パラメータに与えられた引数とハンドルの 両方の意味で使うからややこしい
>>343 英語でもそうなの?
お前が新用語つくっちゃえ!
346 :
デフォルトの名無しさん :2010/01/27(水) 21:01:42
reflectorの使い方よくわかんね VBで作られたソフトからC#のソース抜き出すだけなのにうまくできない
とんだマヌケさんだ
笑いたきゃ笑えよちくしょう^^;
>>315 > JavaとかC#の参照型って結局ポインターみたいなもんだからねぇ。
> ポインターの値渡しに相当。
んな〜こったない。
ポインタの値渡しならポインタのポインタを渡すということも可能だが
C#の参照渡しはそんなことはできない。
まさに「参照渡し」そのものだ。
マネージヒープ上に存在するオブジェクトの実体にアクセスするためのハンドルの値渡し 終了
(゚Д゚)ハァ?
VMの管理上は参照の値渡しってのはハンドルのコピーでしょ
353 :
デフォルトの名無しさん :2010/01/27(水) 23:13:39
1. クリックワンスという機能でインターネットからダウンロードできたのは良かったのですが、 バージョンが新しくなるたびに新しい世代の別ディレクトリを追加していくので、不要な古いフォルダやファイルが累積していくみたいです。 このファイル増殖を回避する方法を教えてください。
しません。
します。
しますん。
そもさん。
ただではそもさん
テキストファイルの途中の行を削除したいと思っています。 その場合はまずテキスト全体をReadLineで行ごとに読み込み、 不要な行の部分をRemoveしたのち、あらためてWriteLineで 同名ファイルに「新規保存」をする手順を取る必要がありますか?
あります
361 :
デフォルトの名無しさん :2010/01/28(木) 07:37:48
ものすごく初歩的なことなんですが、疑問に思ったので質問させてください C言語でint *p;と宣言したあとpに何も代入せずに scanf("%d", p);などとしてpを使っていいのでしょうか? それともint a;と宣言してp = &a;としてからではないといけないのでしょうか?
>>361 C言語のスレッドへどうぞ
ここはC#だ
363 :
361 :2010/01/28(木) 07:44:29
365 :
デフォルトの名無しさん :2010/01/28(木) 10:10:11
TreeViewにデータを渡す前にTreeNodeだけでツリーを作る場合 TreeViewに相当するNodeを作らずに管理する方法はありますでしょうか? 渡したいのは data1 data1_1 ・・・・ data1_9 data2 data2_1 data2_2 data2_3 data3 data3_1 data3_2 というデータなんですが・・・ data data1 data1_1 ・・・・ data1_9 data2 data2_1 data2_2 data2_3 data3 data3_1 data3_2 こんな感じにするしかないのでしょうか?
ルートはList<TreeNode>でいいんじゃないの
treeview.nodesと同じ型を使えば…とかは考えてみなかったわけ?
TreeNodeCollectionは外からインスタンス作れないぞ どうせNodesは取得専用だから同じ型を使ったところで無意味だし
アプリケーション終了時等にCheckedListBoxの内容(項目、並び順、チェック状態 CheckedListBox.ObjectCollection, CheckedListBox.CheckedItemCollection?) を保存し、次回の実行で内容を復元したいと考えています。 バインドすることが出来れば楽だったのですが、CheckedListBoxはデータバインドに対応していないらしく、 どのように実装するのが妥当だろうかと悩んでいます。 アプリケーション設定等に簡単に書き出す方法などあるでしょうか?
項目・チェック状態 のクラスをList<>にでも突っ込んでシリアライズ 復帰させる時にデシリアライズかけてListの上から項目突っ込んでチェックを設定 と安易にレスしてみる
安易なレスはいりませんから
XMLとかだったらたいした手間じゃないだろ シリアライズはトラブルの元なのでお勧めしない
今、他人のソースを読んでいるんですが、 Thread.Sleep(とかStreamReaderのclose(とかも 個別のtryとcatchで囲ってあるんです。 今まで、そんなこと考えたことも無かったんですが、 そうするべきなんですかね? 絶対に例外を投げないメソッドは存在しないのでしょうか?
基本はドキュメントに書いてあって対処可能であればどこかの段階でキャッチ ただし,明らかにメソッドの使い方が間違っているために発生する類の例外は キャッチ禁止
>>374 それは分かるんですが、ドットネットフレームワークのメソッドが
例外を出す出さないはどのドキュメントに書いてあるのでしょうか?
StreamReaderのreadで何か起これば、例外は出るでしょうが、
closeでは出るかどうか‥‥。何が起こっても出ない気が‥‥
376 :
369 :2010/01/28(木) 11:49:52
>>370 , 372
XML出力時にチェック項目を他に一旦吐き出して−、ですか。
シリアライズやら、或いはItemsを一旦string辺りに吐き出して復帰、とベタにやるしかないですかね。
>>371 思いつきレスでもアイディア投げて貰えるだけでありがたいですし、
それを明記してくれてたら一層のこと、何も問題は無いです。
項目数自体は20程度なものなので、処理速度等で問題になることは無いのですが、
スマートな方法が無いものかと無駄に考え込んでしまいます。
377 :
デフォルトの名無しさん :2010/01/28(木) 11:54:45
>>375 MSDNに書いてあるだろ。
結論から言えばClose()だけをtryで囲んでる奴はアホ。
using使え。
378 :
デフォルトの名無しさん :2010/01/28(木) 12:02:49
>>378 TreeView.Nodesプロパティの型はTreeNodeではなくTreeNodeCollection。
ただ、ルートにList<T>などのコレクションを使うよりも
TreeNodeを使ったほうがコードは綺麗に書ける。(処理が共通になるから)
380 :
デフォルトの名無しさん :2010/01/28(木) 12:11:44
381 :
デフォルトの名無しさん :2010/01/28(木) 12:46:09
>>380 こらこらw
お前はだれだw
>>379 なるほど
じゃあTreeNodeを構築する側でAddRangeでそのまま渡せる
ようにするくらいしかないんですね・・・
382 :
369 :2010/01/28(木) 12:52:50
>>370 , 372
結局LINQ使ってXMLに書き出し、読み込むことにしました。
どうもありがとうございました。
383 :
デフォルトの名無しさん :2010/01/28(木) 12:52:56
Windowsフォームアプリケーションを作っていて、EXEアイコンをデスクトップに置きましたが、アイコンをクリックするたびにその数だけフォームが立ち上がります。 1つのみにするにはどうすれば良いですか?
384 :
デフォルトの名無しさん :2010/01/28(木) 12:55:18
MyClassをクラスとし、 for (int i = 0; i < 100; i++) { MyClass mc = new MyClass(); ・・・・ (処理) ・・・・ } と、for文の中でひたすらクラスを生成しつづけるプログラムはお行儀の悪いプログラムでしょうか? for文の最後の方でクラスインスタンスmcを削除する必要はありませんか?
作らないといけないのなら全然悪くないです 勝手にGCされるので削除の必要もない ところで、処理って何をするつもりなん
そうですか、削除する必要無しですか。ありがとうございます。
今までコントロールのイベントハンドラの登録はデザイナー任せだったので 気がつかなかったのですが、動的に自分で登録する際にTABキーx2回で イベントハンドラの登録から関数部分の作成までやってくれるなかに throw new NotImplementedException(); という一文が入るりますがこれはなんなのでしょうか?
おまえはそんな疑問が出てきたら毎回ここで聞くつもりか?
そのまま読めよ 実装されていないことを示す例外とクラス名が示してるだろうが インテリセンス表示してみろ 書いてあるだろうが
実装したら消すんだよ
IDEが生成したコードのせいでコンパイルが通らなくなるのはまずいので とりあえず誤魔化すために例外投げてるんだよ デリゲートが戻り値を持ってる場合は中身が空だとコンパイルエラーになってしまう
いかに初心者でもこれは死ぬべき
わからないコードがあったらクリックしてF1を押しなさい
一人回答すれば十分じゃないのか?
自前のプログラムでファイルを読み書きする際、そのファイルが他のエディタで開かれていたり 他のプログラムで処理されている最中かどうかを調べるには リードオンリーフラグ(FileAttributes.ReadOnly) が立っているかどうかを調べれば判別がつくとおもってよろしいでしょうか? もしこのフラグが立っているようでしたらそのフラグが消えるまでwhileループで待ち続け、 消えたことを確認した後でファイルにアクセスするようプログラムを書けば安全にファイル アクセスできるようになりますか?
いいえ
:(;゙゚'ω゚'):
>>396 それはWindowsのファイルの読み取り属性であって
ファイルの排他制御とは関係ない。
>>396 それはファイルのプロパティで変更できる読み取り専用属性のことだよ
string配列を返すメソッドを作っています。 private string[] test() { string[] s = {"aa", "bb", "cc"} return s; } 最後の二行をもっと完結に一行にまとめることは出来ないでしょうか? わざわざインスタンスsを宣言せずに済むようにしたいです。
一番短いのは return new[] { "aa", "bb", "cc" }; 省略せずに書けば return new string[] { "aa", "bb", "cc" };
>>404 コンパイル通りました。
ありがとうございました。
>>405 すみません、下から2行目、セミコロンが抜けてましたね
つかそれだけのメソッドとかいらんだろ
test()の内容に突っ込んでどうすんだお前は
処理結果で違う配列を返すならありだろ。たぶん。
今日発売のゲームでDEBUG消し忘れとか コワイネー
new[]だけでいいのか いいこと知った
string[] s = {"aa", "bb", "cc"} って右辺の型を省略するのは 初期のC#どころかCの時代からある構文だけど 今となっては浮いてるよな
414 :
デフォルトの名無しさん :2010/01/29(金) 10:40:15
>>413 え
今でもintとかstringの場合使うけどな
まああまりにも初期化する項目増えるとなると外部ファイルに出すとかするけど
そういえばCのころのようにソースファイル1本がまるまる初期化の内容で
コンパイル時にプログラム内に埋め込むとかどうやるんだろう
最近始めたのだけど、ネット対戦できるゲーム作りたい場合はこの言語で大丈夫?
普通にコンパイル通るようにクラス定義の中に書けばいいだろ クラスが分かれるのが嫌ならpartial class Hoge { string[] s = とか入れずに値だけ書きたいなら 外部のスクリプトをビルド前のイベントで走らせるとか msbuildのタスク作るとかしてコードを生成する
417 :
デフォルトの名無しさん :2010/01/29(金) 10:56:11
ネット対戦ゲームの内容次第 将棋のような打った手を通信する程度なら十分だけど、3Dゲームのようなものすごく短い時間での 通信を要求される場合は.netじゃあむりかも
いや通信なんかそれ自体ものすごく時間のかかる処理だから 入り口と出口が.NETだったところでほとんど関係ない
ありがとう、考えてるのは単純なものなので頑張ってみまする
>>417 >3Dゲームのようなものすごく短い時間での通信を要求される場合は.netじゃあむりかも
XNAディスってるんですか?
jane styleのスレリストみたいなコントロールが探してます listboxではないと思うんですけど、ありますか?ツールボックスに、 教えてください よろしくお願いします
422 :
デフォルトの名無しさん :2010/01/29(金) 11:34:34
423 :
421 :2010/01/29(金) 12:02:41
エラーおこして終了したときデバッグたちあげると ヒープが壊れてますって言われるんですけど なにしたらヒープ壊れるの? どこでエラーが起きてるかもわからないし困ってます だれか助けて
アンマネージコードを呼んでるならその中の不正なメモリアクセスが原因 そうでないならMS社員にしかわからん
426 :
デフォルトの名無しさん :2010/01/29(金) 15:10:23
API使って無くてもカスタムコントロール使うとプロジェクトがおかしくなるってあるな
>>426 マジ?一回もないんだけど たまになるんならこえぇな・・・
428 :
デフォルトの名無しさん :2010/01/29(金) 15:24:44
動的に標準コントロールを継承したクラスを管理してGUIを変更しまくれる アプリ書いたけどその手のはよくプロジェクトが壊れる ひどいケースはプロジェクトを開く途中でIDEが不正終了起こして再起動とか
>>428 なるほど完全なカスタムじゃなく継承元の動きを強引にいじろうとする場合どっかで不整合起きて落ちたりするような感じなのか・・・
気にとめとこう・・・・サンクス
コントロールコンテンツが表示領域越えた際にでるスクロールバーとは別に スクロール機能を実装しようと思うのですがAutoScroll = falseにすると 越えた部分は作られてないようでスクロールを受け付けません 別のスクロール機能というのはAPI経由でスクロールがあったよとメッセージを投げる形です。 対策としてはAutoScroll = trueにした上でAPIのShowScrollBarで大きさを変えるとかしか 方法はないのでしょうか?
>>428 それ本当にカスタムコントロールを含むプロジェクト(じゃなくてソリューションだと思うが)
一般について言えることか?
間違いなく君の勘違いだと思うね。
少なくとも俺のところではそんな問題が起きたことは一度もないけど。
デザインモード時を意識しないアホなコード書いてるか、
そうじゃなきゃ環境そのものの問題でしょ。
432 :
デフォルトの名無しさん :2010/01/29(金) 20:05:18
>>431 デザインモードもなにも一切デザインモードのお世話にならないコードでもそれだよ
たとえばLabelを継承したLabelExというクラスを作って自分がよく書くパターンコードを
仕込んでるだけだよ(たとえばマウスイベントで自分自身をつまんで移動できるとか
それをデザイナー使わずに動的に確保して親になるコントロールに追加してるだけだけど
リソース周りを不用意に消すと壊れるよたいてい壊れる前に警告が出るけど
>>413 > string[] s = {"aa", "bb", "cc"}
今となっては浮いてるだ?
じゃああんたはどうやって宣言してるのか教えてくれ
>>413 じゃないが
それ以外に考えられる初期化って、
string[] s = new string[] { "test" };
これしないと思う。
デバッガで表示されるスレッドの番号?を取得する方法を教えてください 例えば[4036]メインスレッドの4306です ManagedThreadIdは全然違う数字でした
437 :
デフォルトの名無しさん :2010/01/29(金) 21:24:30
ハンドルじゃないの?
ハンドル?なにそれ? AppDomain.GetCurrentThreadId()で取得できました 使うなっていわれるけれど・・・
アンマネージのほうか。
プログラムの各部位に条件次第で実行するか実行しないかが決まるコードが埋め込まれています。 自分で各部位に散らばったコードをコメントアウトしたりコメントアウトを外したりするのは面倒なうえ 間違いのもとにもなります。 一括で各部位に散らばったコードを実行するかしないかを選べるようにしたいのですが そういうときはみなさんならどうされますか?
デリゲートにして適宜入れ替え
#if〜#endif
#if
if DEBUG以外でそういう組み方するのはいろいろやばそうなので根本的に改善する
コメントアウトしなきゃいい。
>>426 デザイナでの実行中に実行時と違ってハンドルがなかったりとか
違いがあるせいで例外起こしたりするとVS2008とかすぐ落ちることもある
まあ原因の99.9%は自分のコードにあるんで、デバッガからVS立ち上げて
カスタムコントロール貼り付けてステップ実行して原因調べるけどね
> #if〜#endif
早速使ってみますノシ
>>444 > if DEBUG以外でそういう組み方するのはいろいろやばそうなので根本的に改善する
if文を作って条件付き動作するべきでしょうか?
ていうかVSで再コンパイルしないと「モード変更」ができないプログラムってどうなの?って感じ
そもそも、なんのためにそんなことをしたいのかわからん。 ビルドし直してテスト、じゃ、カバレッジも上がらんし。
450 :
デフォルトの名無しさん :2010/01/30(土) 00:30:28
>>440 その条件って何だ?単にテスト用とかじゃないなら
コメントアウトや#ifで制御するのはよくない。
じゃあどうするの
>>451 外部の設定ファイルとかプログラム自体の挙動を
変える必要のない方法でやるべき。
似たようなコードを使うだけならその部分だけまとめてプロジェクトに書き出せばいい 単純な入出力変更なら起動時にスイッチでもつければいい 同じような機能だけど細部が違うというなら基本クラスと派生クラスを作ればいい
自作のクラスに30個くらいのメソッドがあるんだけどこれって大杉?
そーでもない。
>>455 そう?
そう言ってもらえるとなんだか元気が出てきた(゚∀゚)YO!
>>456 メソッドの数が少ないかわりに、1つのメソッドが
数百行あるようなクラスこそ最悪
>>457 メソッドの数とメソッド内の行数ってトレードオフの関係にないでしょ。
知ったようなこと言っちゃダメw
459 :
デフォルトの名無しさん :2010/01/30(土) 00:54:20
MVC(WPFだとMVVMとかいうのか)を意識して綺麗にクラスわけできてれば それなりに綺麗なソースになると思うけどな
>>459 30個ほどのメソッドは全て同じクラス内の他のメソッドを呼び出してたりするから
むげに他のクラスに追い出したりすることができないんだよね。
継承を使うという方法もあるけどそれだと親クラスのフィールド値とか直接アクセス
できなくなるから面倒なことになる。
というわけでメソッドは全て同じクラスに一緒くたにしてしまいましょうという現状に
落ち着いてしまった・・・
いいんだよね、これで(´・ω・`)
>>458 大抵はトレードオフの関係にあるが?特に初心者のプログラマーなら
機能次第だな。 たとえば、ログ出力するだけの単純なクラスだとしたら、30個のメソッドは多すぎる気がする。
5〜7かせいぜい10でお願いします
そもそも言ってるメソッドがpublicかprivateかによって違う 質問者は区別してなさそうだが
公開メソッドが30だと発狂するなw どれだけ一つのクラスに動詞がつまっちゃってるの?とか思うw
実はひとつのメソッド×オーバーロード29個、とかだったら泣けるな。
ホイールの常駐監視をやりたいのですが、 非アクティブ時にForm以外の部分にマウスイベントが送られたとき、 どうやってイベントハンドリングすればいいのでしょうか? よろしくお願い致します。
ローレベルマウスフック
ボタンを押した際に起動するスレッドから起動元のFormに貼り付けたtextBoxに ログを表示させる場合はどうすればいいのでしょうか? インスタンスを渡して書き込もうとしましたがエラーになってしまいました。
通常のグローバルフックは対象プロセス内のコンテキストで実行される必要があるから C++とかでライブラリを作らないと行けないけど マウスホイールならC#(CLR)で実行出来る不思議
C# スレッド コントロール でググれ
473 :
デフォルトの名無しさん :2010/01/30(土) 11:46:57
コントロールはそれを生成したスレッドからしか安全に操作できないような仕様になっているからね 別スレッドからコントロール生成元のスレッドを経由して処理を行うにはInvoke()delegate()を使うよろし
475 :
デフォルトの名無しさん :2010/01/30(土) 12:09:10
>>474 そういうことなんですね
おかげでログをtextboxに表示できました。
MSDNより コレクションが変更されない限り、List では、複数の読み込み操作が同時に発生しても問題ありません。 コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。 まれに 1 つ以上の書き込みアクセスによって列挙処理で競合が発生する場合、確実にスレッド セーフにするには、 列挙処理が完了するまでコレクションをロックします。 <============== A コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、 独自に同期化を実装する必要があります。 <==================== B AとBは同じ意味ですか?(つまりロックしろっていうこと?) それともBはロックとはちがう方法で同期化しないといけないということですか?
ありがとう
どういたしまして
比較演算子にマッチする正規表現で教えてください。 "<"にはマッチするが"<<"にはマッチしない、その逆の ">"にはマッチするが">>"にはマッチしないという部分 がうまくいっていないようなんです。 どう記述すればいいですか? if (Regex.IsMatch(str, "(!=|==|<[^<]|>[^>]|<=|>=)")) { //条件式です } else { //条件式ではありません }
正規表現スレいきます
<[^<] これを()で囲む
あら
484 :
デフォルトの名無しさん :2010/01/30(土) 16:32:12
>>470 BeginInvokeでスレッド起動すれば大丈夫
>>476-478 同じと言えばまあ大きいくくりでは同じと言えなくもないが
はっきり言って注意の観点が違うよ。
Bは分かりやすいが、AはBのような単純な解決はできない。
あ、ちょっと読み落としてた。 使う側でロックという意味では同じだった。 Bはコレクション自体を同期化するとかの単純なやり方も可能。 しかしAはそうはいかない。 また、コレクションの使い方によってはBのような単純な同期化ではすまない場合もある。
Bは一般論でAはその代表例だろ
はい?
いや487で合ってると思う
代表例に列挙を出すのは微妙におかしいと思うぞ。
おかしくないよ IEnumeratorの見りゃ列挙が実はコレクションクラスに書き込んでる(Reset/MoveNext)って分かるだろ
そういうことではなくてだな
一つのクラスがもつ最大のパブリックメソッド数の推奨値を決めよう。 7つ。
それって1クラス100行まで、ってのと同じ空気を感じるからやめようぜ。
1クラス100行じゃ何も出来ないと思うが
1クラス1000行でもいいよ。なんかそういう区分け意味ないからやめようぜって話。
そんな事やってないで優れた奴が逐一チェックしろよ
7って言う奴は本を鵜呑みにするタイプ
そんなわけないのはちょっと考えれば分かりそうなもんだがな
501 :
デフォルトの名無しさん :2010/01/30(土) 20:13:05
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet xmlns="urn:yahoo:jp:jlp:KeyphraseService" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation="urn:yahoo:jp:jlp:KeyphraseService
http://jlp.yahooapis.jp/KeyphraseService/V1/extract.xsd ">
<Result>
<Keyphrase>馴染み</Keyphrase>
<Score>100</Score>
</Result>
<Result>
<Keyphrase>会津若松</Keyphrase>
<Score>85</Score>
</Result>
<Result>
<Keyphrase>真なり</Keyphrase>
<Score>35</Score>
</Result>
</ResultSet>
からKeyphraseのみを抜き出すにはどうしたらよいですか?
XDocument xdoc = XDocument.Parse(html);
var query = from ResultSet in xdoc.Root.Elements()
select new{
Keyword = ResultSet.Element("Result").Attribute("Keyphrase").Value
};
string contents = "";
foreach (var q in query) {
contents += q.Keyword + "\r\n";
}
とりあえず2点 ・Keyphrase属性などどこにもない ・範囲変数ResultSetの中身がResultSet要素じゃない
var query = xdoc.Root.Elements(); にしてデバッガで何が列挙されるか見てみたらいいよ
XMLの属性とは次の例のAttributeのこと <Element Attribute="attributeValue">elementValue</Element> 501が言ってるのは要素(Element)
xdoc.selectNodes(".//Keyphrase").text()
>>469 できた
グローバルフックって言ってくれたらすぐだったのにw
まぁありがとう
昨日気付いたら1クラスに30個のメソッドが生成されていたとレスしたものだけど せいぜい一つのクラスしか無いようなプログラムを書くことって可能だし 結構なケースでそれで十分だったりするよね。 でもこれってフィールドはC言語でいうところのグローバル変数みたいなものだし メソッドもC言語でいう関数とほとんど変わらなくなってしまう。 クラスを使ったオブジェクト指向とは言っても実質的にC言語と何も変わってない。 こういうときってどうしたらオブジェクト指向言語にしたらいいんだろうか? 初心者向きのC#の解説書にはなかなか触れられていないから把握しにくい(´・ω・`)
別に無理しなくていいでしょ 仕事とかでないのなら
そのまま成長するとスパゲッティコードのお手本みたいなのが出来上がるなw うまい人のコード読むのが一番勉強になる。 CodePlexとかに山ほどあるんで興味があるやつを読んでみたら?
カスみたいなコードも山ほどあるけどCodePrex 有名どころがいいだろうな。
例えば何が有名すかね
未熟ものにはどこでクラスを分離したらいいのかという見極めがつかないんだよね。 ここらへんで切り離そうかと思ってもやっぱり元のクラスのフィールドとかメソッドにアクセス 出来た方が便利だから元のクラスに入れておくままにしておくか、となる。 その結果がスパゲティコードよ(´・ω・`)
その辺のクラス分けって、「これが正解」ってのはなくて、 プログラムの規模やら誰が使うのか、とかで変わってくる。 だから、自分でどんどん失敗して、自分なりの手法を見つけ出せばいいんだと思うよ。
初心者用にいい参考書教えて下さい 一応javaを大学で習ってたので条件分岐とか繰り返しとか配列とかはわかるけど (と言っても最終課題で特殊なクラスインポートしてオセロ作った程度、特殊なクラスというのは大学固有のものみたい) いくつかサイトまわったらjavaで中途半端に知識付いてるからか何がわかって何がわからないのかわからん 川俣晶さんの『究極のC#プログラミング』って本買ったら意味わからなくて泣きそうになった いくつかのサイトまわった感じだと、クラスの継承とか値型参照型とか.NETとか良くわからなかったのでここも理解できる本がいいです
Javaのことはいったん忘れて、初心者向けの本でいいじゃん。
デリゲートと関数ポインタって互換性があるんでしょうか? Win32APIなどを呼び出すとき、デリゲートを渡すというのが良く分かりません
呼び出すときって、コールバックとかでしょ? C/C++ では、関数ポインタがコールバックに使えるけど、.NET ではデリゲートを使う、 って覚えとけばいいんじゃね?
互換性があるんじゃなくて、自動的に変換されている
制御構造とか配列とかわかるなら、それなりにプログラム書けるでしょ? あとは、必要に応じて足りないところを補っていけばいいんじゃない?
独習は本当に文法以外触れてないのと、2.0までしかカバーしてないのが難点 持ってるから言える
何がダメかじゃなくて何がいいか教えて
リファクタリングは良いよ。 こういう理由でこういう形にすべき、ってのがじゃんじゃか書いてあるし。
>川俣晶さんの『究極のC#プログラミング』って本買ったら意味わからなくて泣きそうになった なんで初心者向けの本を探してんのに究極とか書いてある本を買うんだよ。
「値型参照型とか.NET」はともかくとして、継承がわかってないということは、 Javaの基本もろくにわかってないだろ。 JavaでもC#でもいいから、まずは基本をしっかり抑えろと。
値型と参照型ってJavaにもあるし
>>523 ありがとう、すげー高いけどそれだけの価値があるみたいなので買ってみます
>>526 そのとおりであります
ネットって各言語の文法とかある程度経験のある人が細切れの開発論を学ぶには良い場所なんだけど 現状、体系的な勉強しようと思ったらやっぱ本じゃないと厳しいところがあるな。
指定したアプリにマウスかキーボードからメッセージが送られたら検知するような機能を検討してます。 アプリの指定はProcess.MachineNameかMainWindowTitleあたりで起動中のアプリから探し出すとして、 メッセージはどうやったら引っ張ってこれるでしょうか? キーボードのどのキーが押されたか?の情報は必要ないです。 マウスもクリックかスクロールされたときに拾ってくれればいいです。 調べると、SendMessageやらWin32APIを使うとかそういう話が出てきて 自分でコーディングするにはちょっと敷居が高い感じです。 で、グローバルフックで検索かけたら、指定アプリではなくとにかく全部フックしてくれるサンプルが見つかったんで、 これそのまま使って後はカレントウィンドウがどれかを調べればどこにメッセージが送られてるかは一応判断できるな、とは思ったんですが もっと簡単で効率いいやり方ってあるのでしょうか
>>530 ない
やりたいことに対する解決方法を見つけてる感じだけどそれを避けてとなるとあきらめろ
特定のウィンドウでフックしてもいいけど、1アプリでウィンドウ1こじゃないしな
533 :
デフォルトの名無しさん :2010/01/31(日) 12:31:31
>>532 うん
もうメッセージ監視のレベルがアプリじゃなくOSと同等のことをしないと無理
モニターしたい部品のハンドルなりを調べて、そこへ送られてくるメッセージを
常に監視もしく間に入ってモニターしながら透過的に送り届けるとかしないと
無理だろし
「手始めに簡単なアプレットを作ってみよう」→「OS操作の補助を」→「グローバルフックがうんぬん」 その作ろうと思うもの自体から間違ってると思うよ。それならまだ簡単なゲームのほうがまし。
>>528 完全に個人的な好みだがこれがよかった
オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
tp://www.amazon.co.jp/dp/4822281957/
その本は…
538 :
デフォルトの名無しさん :2010/01/31(日) 14:05:39
データグリッドビューの、右端の列幅だけ、コントロール幅を超えて右ドラッグして広げることができません。 コントロール幅20 列1の幅10、 列2の幅10 にしています。スクロールモードはBothです。 もともとは2列ともコントロール幅に収まっていますが、列2のみ広げたい場合があります。 その際は列2の幅を右へドラッグして広げてもらい、スクロールバーを利用して閲覧してもらいたいのですが、列2の幅を広げることができません。 列1は広がります。 2つの列コレクションのプロパティに相違はありません。 どうすれば列2を広げることができるでしょうか。 よろしくお願いします。
正直、日経BPの本で満足できた例しがない とりあえず継承やら委譲やらの基本的なことが理解できないらな 別なオライリー読んだ方が遠回りでも近道
「別なオライリー」ってなんだ・・・??
541 :
デフォルトの名無しさん :2010/01/31(日) 14:53:40
継承ってそんなに難しいかね Form系のコントロールで考えるとよくわかると思うけど hogohoge : Label とあって何も追加コード書かなければ機能的にはLabelと同じクラスができる
だからなんだよ
・どうやってやるか? -> 簡単 ・それで何ができるか? -> まぁまぁわかる ・何のためにやるか? 効果的にやるためにはどうすればいいか? -> この辺については難しい ってことじゃね?
継承は簡単だと思ってる奴は中級者 継承は難解だと思ってる奴は初心者か上級者
545 :
デフォルトの名無しさん :2010/01/31(日) 15:00:46
>>543 設計上の判断は難しいな
書いてる上でこれは多用するから継承クラス化した方がいいなとか
継承するより委譲した方がいい場合もあるっていうしな。 どういう場合かを簡潔に述べられないからまだまだ初心者なんだけど。
>>545 多用するだけなら委譲で充分
インターフェースの継承と実装の継承は分けて考えた方がよい
って教科書に書いてありましたー><
ユーティリティ関数が使いたいばかりに、フォームを継承したような腐ったコードを 見たことがある。 確かに「どうやったら継承ができるか」はわかってるんだろうけど、「継承の使いどころ」を 理解してない例。
俺は上級者だけど、継承ってそんなに難しく感じないなぁ
既存のクラスを勝手に継承していいものかよく悩む そのクラスをフィールドにもつクラスを作るか(しかしこれだと使いづらいかも)、 ヘルパークラスでしのぐか
むしろ慣れてくると継承を避けるようになるよ
(1) 合成 (2) 継承 (3) 委譲 (4) 侵略 (5) 奪回 (6) 奔走 (7) 実装 (8) 皇帝
例えば、豚を継承したと考えてみろ。 途端に継承という概念が理解できる。
継承にしても委譲にしても必要になったときに 「使わずに実現できないか」を考えるようにすれば 「いつ使えばよいか」も自ずと絞られてくるのではないかな
>>550 継承することを前提に作られたクラスからしか継承しない
これが一番無難
>>560 神!神!もっと評価されるべき!!!!111
つ「ハンマーを持つ人には、すべてが釘に見える」
継承するか委譲するか?なんてやってる先には ドメインモデルで設計するかあえてドメインモデル貧血症を選ぶかなんてのが最前線で盛り上ってるんだよな。 オブジェクト指向が銀の弾丸じゃないってのはもう完全に共通認識になってると思う。
そこでF#ですよ
最前線の話はブログとかで良く読むけどさあ、 自分の会社との差があまりにもありすぎてどっか遠い国で起きてることにしか思えん。 DDDとかTiDDとか本当に仕事で使ってんの??
本では.NETの開発者の意見でインターフェイスより継承が推奨されてた
562 :
デフォルトの名無しさん :2010/01/31(日) 15:28:15
継承よりインターフェースの方がわかんね
インターフェイスは制約をかける意味合いでしか使ってないなぁ。
>>561 それはインターフェイスにすると後でメンバを追加できないというバージョン管理上の問題から。
実装継承とインターフェイス継承の問題とは別。抽象クラスに実装が書かれてるからといって
実装継承というわけじゃない。
継承かインターフェイスか悩んだときはインターフェイス。
XPとかって理論としては面白いけど抽象的だし 実際に運用する段階になったら現実的じゃないと思うわ C#で運用してる会社とかあるのかね Railsとかそっち方面じゃないの
MS的には多重継承が必要でなければ抽象クラス推奨 でも決して「実装継承推奨」という意味ではない
569 :
デフォルトの名無しさん :2010/01/31(日) 15:47:55
C#じゃ少ないけどJavaで良いからデザパタの本読むと良いと思うよ デザパタ自体を全て実践しろとは言わないが、クラスの使い方という意味で勉強になる
でもさ、拡張メソッドのおかげで実装まで付いたインターフェースも作れるようになったんだよな。
>>566 今時完全にウォーターフォールでやってるとこの方が少なくない?
完全にアジャイル開発じゃなくても、一つのプロジェクトで数回リリースの形を取る
(=インテグレーションサイクル)方が多いと思うよ。
572 :
デフォルトの名無しさん :2010/01/31(日) 16:08:18
流れ変えてもうしわけないがなんでtabControlのタブ周りはあんなに糞なんだろ 上前提でできてるようなもんだよな 下にすると明らかにおかしいし 左右もなんで複数行を強いるんだとかさ
>>572 君の説明能力も糞じゃないの?w
何がいいたいのかさっぱりわからん
>>571 それはそうだろうけどアジャイルではないよね
XP見たいなプロジェクト管理者に責任だけを押しつけるようなやり方って
大規模な開発案件じゃ統制効かないような気がするんだけど
575 :
デフォルトの名無しさん :2010/01/31(日) 16:21:52
>>573 windows2000もしくはそれと同等のUI設定なら特に問題はないんだが
XPのLunaなどを有効にするとタブの描画が上を前提にしてあるのが
タブとタブページの境目が変になるんだよ
こんなのは使ったことがあってかつ表示方法をいくらか試してないと気が付かない
わかってる人だけに伝わればいい
>前提にしてあるのが 前提にしてあるのか
578 :
デフォルトの名無しさん :2010/01/31(日) 16:52:50
>>538 ですが、どなたか教えてください(T_T)。
リストビューでは、どの列も、リストビュー本体の幅を超えて列幅が指定できます。
ヘッダーの右端境界線を右へ右へドラッグすれば、スクロールバーも同調して広がり、各列の列幅を自由に広げることができます。
データグリッドビューについてもそれができると思ったら、ヘッダーの境界線を、データグリッドビューの視覚上の右端より右へドラッグして各列幅を広げることができないんです。
どうすればリストビューのように広げることができるでしょうか。
581 :
デフォルトの名無しさん :2010/01/31(日) 17:03:54
1行ごとに分かれてる場合 1行読んで先頭が <A HREF= と一致するかチェックする 一致したら最初に出てくる > を探す 最初に出てきた > の後ろからさらに</A> ・・・という風にやるか正規表現使うか
>>574 XPは大規模開発には向いてないってどのアジャイル本にも解説してるぞ?
584 :
デフォルトの名無しさん :2010/01/31(日) 17:14:36
>>578 言いたいことがやっとわかった
dataGridViewはカラム幅を変える際のマウスの移動範囲をクライアントサイズ内に限定してるのか
585 :
デフォルトの名無しさん :2010/01/31(日) 17:24:45
仕様だからしようがないんじゃね? あとはDataGridViewのソースを手に入れてカラムを摘んだ際のマウス移動範囲の 判定してるロジック部分をオーバーライドするとかで対応は無理・・・かな? と思いつきで言ってみる
あ! と思いつきで言ってみる
587 :
デフォルトの名無しさん :2010/01/31(日) 18:35:23
>>580 htmlの場合、正規表現しか駄目でしょ
>>587 Elementで取得できると思ったけど
厳密にはそうだけど実際はdom使えるよ
XML関係のローダにブラウザでやってるような無理やりパースする機能が欲しい  含まれてるだけで読めないとか面倒くせえんだよ
nbspと言いたいのだろうけど見えんw
592 :
デフォルトの名無しさん :2010/01/31(日) 19:06:35
まあ元がHtmlってわかってるならHtml解析でもいいな タグならXmlの方でも読めなくはないんだろうけど 問題は階層になってないのが痛いな
594 :
デフォルトの名無しさん :2010/01/31(日) 19:16:25
というか専ブラ作るならそれくらいの文字列処理できるロジック 組めないとsubject.txtとdatのような中途半端なタグが残った 文字データは処理できないぞ
595 :
デフォルトの名無しさん :2010/01/31(日) 19:16:49
殆どの場合domでOKだけど、最初から正規表現で考えた方が早かったりする
WEBやったことが無い人には正規表現が鬼門だったりする
597 :
デフォルトの名無しさん :2010/01/31(日) 19:19:53
細かいな・・・
599 :
デフォルトの名無しさん :2010/01/31(日) 19:23:16
同列だからなんなの? ここではAタグは完全に別物じゃん。 <B><A HREF="...">...</A></B>とかならともかく。
OpenJaneのソース読んでみれば
602 :
デフォルトの名無しさん :2010/01/31(日) 19:26:45
板データ取り出すだけなんだからIndexOfで充分だろ。ウェブブラウザでも作らす気か
604 :
デフォルトの名無しさん :2010/01/31(日) 19:28:02
>>600 言いたいことがわかってないようだ
BとAを別々に列挙した場合Bを大見出しでつけるのは多分不可能だと思うよ
そもそも、カテゴリを取りたいなんて一言も出てない件。
>>604 おー。理解できた。確かにそれはDOMじゃ不可能だね。
607 :
デフォルトの名無しさん :2010/01/31(日) 19:35:33
>>605 わかってる
ただあえて2chのメニューを持ってきたところで深読みしつつ書いてるだけ
タダ単にURL欲しいなら正規表現で取り出すか
>>581 だ
俺が書いてるから
>>593 未だにtidy使ってるわ
試してみようかな
わざわざ言うな
イテレータ使いたいけどEnumerable<T>の拡張メソッドまで使いたくない場合どうすればいいの? IEnumerable<T>使うと要らんものが増えすぎて嫌
IEnumerator<T>を実装する。 それだけだと足らないので、GetEnumeratorも書く。 それでforeach使えるはず。
あんがとぉ
え、ちょっと待て IEnumeratorインターフェースって要らねえの?
614 :
613 :2010/01/31(日) 20:00:49
間違えた IEnumerator × IEnumerable ○
要らないんだな、これが。
そこそこ短いコードでありながら、初心者から中級者・上級者にステップアップするのに 参考となる優良コードが見られるサイトって無いですか?
クックブックくらい買おう
618 :
デフォルトの名無しさん :2010/01/31(日) 20:24:29
>>587-589 DOMにはHTML用の規定もあるのに何を
何の前置きもなく特定のパーサの実装に限定するなよ
>>604 >>606 何でDOMだけA,Bを別々に列挙する話になっているんだよ
正規表現でもA,Bを抽出する正規表現で別々にマッチングして列挙したら同じだろ
>>613 IEnumerableを実装するときでさえ、
あえてインターフェイス実装ではないGetEnumeratorを作ったりもする。
621 :
デフォルトの名無しさん :2010/01/31(日) 20:50:45
>>619 じゃあ
>>579 のパターン書いてやれよ
Bに対するAがツリー状にでてくる正規表現ってやつを
619から何か必死さを感じるな。 もうじき死ぬのかもしれん。
CookBook
え?
シンドブック
ピピルマー
630 :
デフォルトの名無しさん :2010/01/31(日) 22:53:36
>>584 試しにやってみたけど確かにカーソルがコントロール範囲外に行かないね。
リストビューではできるのに、なぜなんだろ…。
631 :
デフォルトの名無しさん :2010/01/31(日) 23:04:58
>>630 ColumnDividerとか言うらしいのでこいつ関連のイベントでクライアントの右端にマウスカーソルが
来たらカラムを広げてスクロールイベントを発生して・・・とか考えて調べてみたがろくな情報がなくて放置
633 :
516 :2010/02/01(月) 03:12:45
>>517 >>518 なるほど
自動変換の規則がよく分かってないのかもしれません
例えば、stringはchar[]に自動変換できないくせに、
なぜかデリゲートで渡すときには
stringがLPCTSTRに変換できたりして
あと、IntPtrとint*の違いもよくわかりません
こういうのって体系的にまとまってないでしょうか?
634 :
516 :2010/02/01(月) 03:13:53
IntPtr、int*、ref intも同じに見えますね
635 :
デフォルトの名無しさん :2010/02/01(月) 03:18:18
>>634 IntPtrとかrefあたりも自分たちがいじってる部分ではハンドラみたいな物でしょ
最終的な内部の方でDLLなんかとやり取りする部分ではじめてポインターとかに
化ける感じ
そこでしか必要ないもん
なので見た目上はint*と似てるけどぜんぜん違うと思うよ
636 :
デフォルトの名無しさん :2010/02/01(月) 04:18:28
637 :
デフォルトの名無しさん :2010/02/01(月) 10:30:19
vb6から移行しました。 formのコントロールについて質問です。 vb6では各コントロールのTabIndexプロパティを0から振っていけば、起動 時には0にフォーカスが来ていたのですが、C#では上手くいきません。 TabIndexとは別のもので設定するのでしょうか?
あ、違うのか。駄目ならLoadのタイミングで コントロールにFocusしたりはした?
いや、タブオーダーで設定できるよ。 ダブってたりすると、Contorl.Add()した順番が生きるみたいだけど。
641 :
デフォルトの名無しさん :2010/02/01(月) 11:34:56
637です。 TabIndexではなくタブオーダーだったんですね。解決できました。 早く使い方になれないとまずいですね。
うん。まずいよ。
C# 2008ExpressEditionでの相談です。 ACCESSの1テーブルのデータをデータグリッドビューで表示することはできました。 データグリッドビューでの変更や行追加もできますが、テーブルにそれを反映できません。。 ACCESSのように即時変更や行追加できなさそうなことまでは調べがつき、 ボタンを押したときに以下のメソッドを順に呼び出しています(例外は発生しません)。 DataGridView.EndEdit(); BindingSource.EndEdit(); TableAdapter.Adapter.Update(DataSet.テーブル名); 何かが足りてないと思うんですが、八方塞がりになりました・・・ご教授くださいませ。
逆引き555のなんとかでも立ち読みしてきたら
>>643 datagridviewのdatasourceとdatamemberはちゃんと設定してんの?
647 :
643 :2010/02/01(月) 15:18:57
>>644 そですね、帰りに立ち読みしてきます。
>>645 ヒントありがとうございます。
datagridviewのdatasourceにはBindingSourceをセットしています。
datamemberには何もセットされていません、指摘後に何かをセットししようとしましたが一覧に「なし」しか表示されませんでした。。
調べてみます。
>>646 ヒドス
>>647 本来は何もしないでも反映される。
datasourceにdataset、datamemberにdatatableを設定。
デザイナでdataset作ってないなならソース上で指定。
gridviewからdatasetへは自動だがdatasetからテーブルに反映されるにはコードがいるからね
650 :
643 :2010/02/01(月) 15:42:33
>>648-649 いろいろとヒントをいただきありがとうございます。
ただ大変申し訳ありません・・・デバッグ実行するとMDBファイルが Debugフォルダにコピーされて
それに対して変更や行追加をしていることが分かりました。
恥ずかしい限りです、TableAdapter、TableAdapterManager、DataSet、BindingSourceを勉強します。
本当にありがとうございました。
651 :
デフォルトの名無しさん :2010/02/01(月) 17:25:47
すみません VC#2008にて、ビルドにより埋め込まれる/埋め込むことが可能な情報ってどのようなものがありますか? リリースexeファイルを右クリックしてプロパティ→バージョン情報 で見える情報で全部ですか? 何も設定しないでビルドすると、バージョンは1.0.0、言語は「ニュートラル言語」のようになっていますが、 これらを好きなように指定できるところってどこですか?
ソリューションエクスプローラのプロジェクトのプロパティで何やかんやする
で?
いや、で?って言われても・・・。
/ニYニヽ (ヽ /( ゚ )( ゚ )ヽ /) (((i ) /::::⌒`´⌒::::\ ( i))) /∠_| ,-)___(-,|_ゝ \ ( ___、 |-┬-| ,__ ) | `ー'´ /´
「そんなことを聞くレベルの奴がそんなことしてどうするんだろう」って質問が多いね
いいだろ別に。 君達は只々オラクルのように答えていればいいんだよ!
>>651 どのようなものがあるか?は
>>652 の通りなんやかんやしてみる
バージョンと言語はそのプロパティのアプリケーションのアセンブリ情報...ボタン押せば変えられる。
AssemblyInfo.cs弄ってもいいけど
659 :
デフォルトの名無しさん :2010/02/01(月) 18:28:59
IDないから成りすましもいるので面倒だよな>プログラム板
まあ成りすましされるケースのほとんどは質問が変な時だけどな
C#で万能オラクルは作れますか?
このスレだけターゲットにするなら、常に「お前には無理」ってだけ反応すればいいから簡単。
開発されてしまった\(^o^)/
読むのに半日以上かかるような長大ソースではなく、電車に乗ってる間くらいで読むことができる 達人が書いた模範的なC#コードをふんだんに読めるところって無いでしょうか? 一般的なプログラム本には書かれていないプロならではのTips的なことを学びたいです。
そんな魔法みたいな都合のいいコードはありません
>>666 github(gistでもいい) とか Google Code Search とかどうよ
Mavenみたいに依存ライブラリを自動で拾ってきてくれるのってない?
ない
別々のスレッドで生成された複数のクラスで1つのQueue<object>インスタンスを共有しているとする QueueにはSyncRootが無いわけだが、単にlock(queueの参照)すると何か問題起こるだろうか? 別にobject Syncでも用意すべき?
>>671 Queue<T>をICollection<T>にキャストしてみ。
SyncRoot使えるから。
本当だ…サーセン
SyncRootって何ですか? lockじゃ何がだめなんですか?
>>674 コレクションクラスが持ってるlockステートメントでロックするための専用のメンバ。
結局lockで使うことに違いはない。
コレクションをlockするのはだめってことなんですか? オブジェクトならなんでもいいと思ってたorz
.NET1.1以前の非ジェネリックコレクションクラスはSynchronizedメソッドでスレッドセーフなラッパーを作る機能があった そのラッパーの中でロックに使われてるオブジェクトを取得するためにSyncRootがある .NET2.0以降のジェネリックコレクションではSynchronizedは無くなったので必要なくなった
結論としてlock(list)とかしていいの?駄目なの?
ジェネリックコレクションではおk
じゃあlockしまくるよ(`・ω・´)
必要に応じろよ
簡単に説明すると、 あるコレクションcと、それをラップしたコレクションw1、w2があるとして、 単純にw1、w2をロックしたのではcへのアクセスは同期されない そこで、w1、w2のSyncRootがc.SyncRootを返すように実装されていれば、 w1.SyncRoot、w2.SyncRootをロックすればcへのアクセスは同期される
なるほど
うんうん(`・ω・´)
コレクションをラップ? C#は奥が深いな なにこれ?
(´・ω・`)・・・
結局,コレクションの同期はサポートしない方針に変わったのでどうでもよくなった 同期したかったら各自で勝手にやれってこと
>>687 そんな、呆れてないで教えてくださいよ、旦那
コレクションをラップってなーに?
委譲じゃないの
ArrayListなどの古いコレクションでは各メソッドをオーバーライドしてラッパーとして機能させてしまうこともできたけど ジェネリックコレクションではそういうことはできなくなってる コレクションをIList<T>などを通して扱う場合には意味がある(ラッパーが入る余地がある)けど 実際そういうのをロックすることはあんまり無いでしょう
>>691 勉強中の初心者です。1行目までは一応理解できたつもりでいますが
ジェネリックコレクションではそういうことはできなくなってるというのが、なぜかわかりません。
ジェネリックコレクションではできない原因となる、古いコレクションとの差異をご教授下さい。
よろしくお願いします。
ジェネリックコレクションにはvirtualメンバがない だからジェネリックコレクションをインターフェイスを通したりせずに List<T>やQueue<T>などとして明確に型指定して使う限りはラッパーは紛れ込まない
fileSystemWatcherを使ってあるフォルダーを監視して、メールが送られてきたらスタートボタンを押すという、一種のリモートスタート機能を実現したいんですが、 fileSystemWatcherの中でForm上のコントロールを制御しても、動作が保証されないって書いてあって、さてどうしたらいいんでしょう?というのが質問です。 なにか簡単な方法はないでしょうか?
なるほど。virtualメンバがないということなんですね。 ありがとうございました。
696 :
693 :2010/02/01(月) 23:11:44
補足 System.Collections.Generic名前空間の主要なジェネリックコレクションに限った話ね
>>694 どこにどういう風に書かれてたのか知らないけど
InvokeかBeginInvokeしろとかって意味とは違うの?
var ret = a ?? b ?? c ?? d ?? string.Empty; なんぞこれ.. ret には何が入るのさorz
Formを継承するのってやぼい設計なの?
701 :
デフォルトの名無しさん :2010/02/02(火) 00:33:38
>>700 デザイナで作るとForm継承したクラスにずらずらと書きますがな
>>699 最初のnullでないのが入る、全部nullなら空文字列
>>698 ほとんど一字一句変わらないレスをしようとしてたw
704 :
デフォルトの名無しさん :2010/02/02(火) 02:12:53
>>700 外観を統一するってレベルなら有りじゃないの
標準コントロールの外見のことをいってるんだろうか…? WPF使えば?
MSのコンポーネントの動作に疑問があってふとソースが公開されてて入手可能 と聞いてたのでダウンロードしてみたんだがEEバージョンユーザーなのに落ちてくるんだが 大丈夫なのか?
息継ぎしろ
708 :
デフォルトの名無しさん :2010/02/02(火) 06:28:02
で?
公開されてるもんなんだから、ダウンロードできて当然だろ?
EEでもトレースできるよ
そんなことよりソースからSyncRootとか抜き出して使ってもいいもんかね? ソース見たらたまたま俺が書いたコードと一字一句違わなかったんだが
サブスレッドからメインスレッドのメソッドを呼び出すには どうしたらいいでしょうか?
714 :
デフォルトの名無しさん :2010/02/02(火) 08:40:53
テキスト
サブスレッドから呼び出す といいたいが、もっと詳しく書かないとだれも質問を理解できないと思うよ
716 :
デフォルトの名無しさん :2010/02/02(火) 08:42:06
717 :
694 :2010/02/02(火) 08:55:56
なるほど。わかりました。いやわかっていない。もうちょっと調べてみます(´・ω・`)
718 :
デフォルトの名無しさん :2010/02/02(火) 10:31:56
フォルダを選択して、その中にある画像をスクロールバーを使って 順番にピクチャーボックスに表示するプログラムを作ろうとしてい ます。 ScrolBar1.Maximum = files.Count; で画像の数をセットし private void ScrolBar1_Scroll(object sender, ScrollEventArgs e) { PictureBox1.Image = Image.FromFile(files[ScrolBar1.Value].ToString()); } でスクロールされる度に画像を表示したいのですが、ScrolBar1.Value が常に0になってしまいます。どこか記述がおかしいのでしょうか?
>>718 スクロールバーの代わりにトラックバーつかっとけ
そもそもスクロールバーはそういう用途に使うもんじゃない
files.Countが0でも返してるんじゃねーの?
721 :
デフォルトの名無しさん :2010/02/02(火) 11:17:23
>>719 深く考えずにスクロールバーを選んだのですが、トラックバー
に変更してみます。
>>720 files.countは3で、ScrolBar1.Maximumにも3がセットされてい
るのですがダメなんです。
ちょっと試してみたよ。 LargeChangeの値がMaximum以上だとそうなるね
.LargeChangeを1だな
724 :
デフォルトの名無しさん :2010/02/02(火) 11:35:55
725 :
デフォルトの名無しさん :2010/02/02(火) 11:37:47
726 :
デフォルトの名無しさん :2010/02/02(火) 12:03:15
>>722 トラックバーに変えてみたりしていました。
LargeChangeの値を1にしたら上手く動作させることができました。
ありがとうございました。
727 :
デフォルトの名無しさん :2010/02/02(火) 14:42:34
c#ってリバースエンジニアリングが容易と聞いたのですが そうなるとVC++で書くとかになるんでしょうか?
つ 難読化 程度問題だからコストとつき合わせて考えろ。
729 :
デフォルトの名無しさん :2010/02/02(火) 14:46:52
>>728 難読化ですか
確か無料版には付いてこない機能ですよね
外部の物もあるようですが無料は.netの対応バージョンが古かったりと
そういえばVC++も無料版だとMFCが付いてこないとか聞いたのですが
これが無いとwindowsの画面を作るのに支障があるんでしょうか?
言っちゃわるいけど、君程度の知識の人がそんな質問してどうすんの? って気になってしまう…
731 :
デフォルトの名無しさん :2010/02/02(火) 15:04:06
世の中すべて勉強です 初心者スレで見下すのはどうかと
そもそも何のために難読化したいのか? ソースパクられるの心配とかならアホだぞ。
>>729 絶対に君のソースを盗み見しようという人は現れないから安心しなさい
C言語だろうがJAVAだろうが、労力次第では解読されるけど
低能制作者・作、というのは最強の対策だからね
とりあえずProのデモ版落としてきて難読化・逆コンパイルしてコード読んでから考えれば
自分のコードが他人から見て盗みたくなるものかどうかは やってみれば本人が一番実感できるようになるんじゃね? 別に初心者が難読化しちゃいけないわけじゃないし
あ、質問の中心がそもそも難読化じゃなかったっけか
737 :
デフォルトの名無しさん :2010/02/02(火) 15:26:32
C/C++の経験はあるのですがwindows環境で組むのがはじめだったので 手始めにc#に手を出してたのですがリバースエンジニアリングの話もあったりしたので どうせならC++でと思ったもので
C++でもC#でも好きにしろ。でもここはC#スレだ。 とりあえず、C++/CLIはやめといたほうがいいな。
739 :
デフォルトの名無しさん :2010/02/02(火) 15:36:49
プロ(笑)のみなさまは難読化で対応されてるんですねw
商売でコンポーネント売ってる人なんかは割と腐心してるんじゃないかなぁ。 客向けにシステム一から組む人なんかは汎用的じゃないから心配いらんだろうけど。
本当に守りたい情報やロジックはサーバーサイドに置いとくもんだ。 とりあえずageのは最初の質問だけにしろ。
742 :
デフォルトの名無しさん :2010/02/02(火) 15:42:55
という感じで自称プロ(笑)が申しておりますw
744 :
デフォルトの名無しさん :2010/02/02(火) 16:01:59
745 :
デフォルトの名無しさん :2010/02/02(火) 16:03:23
ああ、dat取りに行く話じゃないのか どっちにしろURLのパターンが決まってるなら正規表現かけたほうが早い
取り込み中すみません。 今C#関連の本を読んでいて、Dispose関連の記述でどうもよくわからなかったんですが マネージドリソースというのはCLRが管理するメモリ領域という理解で良いのでしょうか? それから、アンマネージドリソースも、CLRの手が届かない領域…?とどうも理解が及びません。 このような素人用の解説をどなたかおねがいできませんでしょうか?よろしくお願いします。
747 :
デフォルトの名無しさん :2010/02/02(火) 16:25:45
picturebox上に配置したtextboxをマウスで移動できるようにと DragDropEffects dde = textbox1.DoDragDrop(textbox1, DragDropEffects.Move); をtextbox1_MouseMoveに記述しているのですが、思うように動かす ことができません。MouseDownで今の座標を取得してMouseUpで場所 を変更したいと思っています。 上記のコードの直後にddeを確認するとNoneが入ってしまっています。 どのように修正したらよいでしょうか?
748 :
デフォルトの名無しさん :2010/02/02(火) 17:03:09
750 :
746 :2010/02/02(火) 17:13:14
>>749 ありがとうございます。参考にさせていただきます。
>>746 別にメモリやOSのハンドルなどに限らず,使い終わったらGC任せにしてないで
すぐに返さないと問題が発生するようなものの総称
仮にマネージコードだけで完結してるとしてもそういう状況はありうる
752 :
デフォルトの名無しさん :2010/02/02(火) 18:21:55
>>748 ありがとうございました。このやり方でもできるんですね。
あとはPicturebox内でだけ動かせるような制限を考えなければ
ぶるっちょ( ´∀`)だお
プリンタに出力するときに e.Graphics.PageUnit = GraphicsUnit.Millimeter; を使って位置指定をミリメートルに設定したのはいいんですけど .DrawLineで線を引くときに1ミリより細い線を引く方法が分かりません。。。 教えてください。 よろしくお願いします。
今年一番の笑い話だ
756 :
693 :2010/02/02(火) 21:52:20
Graphics.DrawLine(Pen, Single, Single, Single, Single)のオーバーロードがあるから 普通に少数で指定すればいいんじゃないの
オーバーロードて何のこっちゃ。 普通にpenそのもの幅を設定するだけだと思うけど
758 :
デフォルトの名無しさん :2010/02/02(火) 22:00:33
前回終了時の状況によっては起動時は非表示でタスクトレイに常駐するだけで 一瞬も表示しないウインドウを作りたいのですがどのようにすればいいでしょうか?
759 :
デフォルトの名無しさん :2010/02/02(火) 22:02:19
>>757 浮動小数点(floatかdoubleかしらんけど)で指定可能なDrawLineもあるってことじゃないの?
そりゃGraphicsUnit.Millimeterで基準をミリメートルにした上でintで与えてたらそれ以下は
引けないわな
760 :
754 :2010/02/02(火) 22:04:19
0.5っていう風に少数で指定したらエラーが出たんですよ。。。 で、0.5を1/2って入力したらいけましたw ちょっと悲しいけどよかったです。
よくわからんw Penでもfloat指定できるし、DrawLineも座標系にfloatあったぞ
だから設定するのはpenの幅なんですよ、って言ってるのに池沼か。 そもそもそうでなきゃ“Pen”がペンのメタファになってないじゃないか。 何をいってるんだよ本当。
1/2って0にならんか
765 :
デフォルトの名無しさん :2010/02/02(火) 22:10:57
ああ、、もしかして小数点指定する際にFつけてないとか・・じゃないよね? 1.0とかそのまま指定するとdoubleと認識するようで1.0Fとかしないと IDEがうるさいよ
一番うるさいのはコンパイラだよ
>>760 0.5はdoubleだ
1/2はintだ
768 :
デフォルトの名無しさん :2010/02/02(火) 22:12:24
わかってない奴は黙れ
770 :
754 :2010/02/02(火) 22:13:34
>>765 うわあああああああああああああ
Fつけたらいけました。
ありがとうございました。
他の人もありがとうございました。
VB6の感覚でやってたらダメだな・・・
VB6なんか頭打って忘れろ
この際他の接尾辞も覚えておくことをお勧めする
なんかこの流れ見たことあるような気がする。デジャブ?
いつ?
776 :
デフォルトの名無しさん :2010/02/02(火) 22:19:26
>>770 というかエラーメッセージ読みなよ
キャストしないと駄目な際のメッセージと同じ警告でてるでしょうに
旧VBにも一応リテラル接尾辞はあったはずなんだがなー ていうかまずエラーの中身確認しようよ
778 :
754 :2010/02/02(火) 22:19:29
よくみたら、エラー一覧にDoubleからfloatに変換できませんってでてますね。 こんなことで5時間は悩んだ気がする・・・ 2ちゃんがあってよかったw ふぅ
779 :
デフォルトの名無しさん :2010/02/02(火) 22:20:31
エラー 2 引数 '2': 'double' から 'float' に変換できません。
ULとか使ったことないわ
781 :
デフォルトの名無しさん :2010/02/02(火) 22:26:42
そういえば、グラフィックスいじってて疑問に思ったのがほとんどのレベルで小数点はdouble扱いなのに レンダリングや印刷のところになるとfloatがでてくるのはDirectXなどのラッパーだからなのかね?
さあ・・・
GDI+がそうなってるから ほぼDirect3D剥き出しなWPFでは逆にdoubleで統一されてる
DirectXのラッパーってなんだ・・・? ManagedDirectXの事か?
785 :
デフォルトの名無しさん :2010/02/02(火) 22:30:48
WPFはレイアウトにも浮動小数点使いまくるからfloatでは精度が足りないんだろうな
WPFマジいらねえ
WPFはあんなに出来がいいのに… 使わないともったいないぜ
789 :
デフォルトの名無しさん :2010/02/02(火) 22:55:02
>>788 おもしろいけど、あれはさらにソースコードつけて配布してるような感じになってない?
Listをバインドすれば勝手にTreeViewに反映されるとか
>>789 >あれはさらにソースコードつけて配布してるような感じになってない?
これの意味がわからん。
WPFはもう終わってるだろ
VS2010はWPFです
OOPを意識した事も無い人がよくFormの下にずらずら書くよね そう言う人達にはWPFを使うのは辛いと思う
WPFだってWindowの下にずらずら書けるよ Designer.csがXMLになっただけ
795 :
758 :2010/02/02(火) 23:24:51
自己解決しました
だけって、、テキストバインディングが出来る事によって設計手法が大きく変わるんだからそれに合わせた開発をしようよ・・・
MSに踊らされるのはごめんだ
WPFについてこれない人多そうだな MEFあたりの技術は知らない(わからない)人が更に多そう
799 :
デフォルトの名無しさん :2010/02/02(火) 23:29:44
WPFでFormの下にずらずら書くようなやり方になるとは思えないくらいのレベルなんだが
使うのがつらいっていうかメンバ覚え直すのが面倒で
>>798 MEFってなに?
ぐぐったらメトロイーサネット・・・とかでてくるしw
>>801 Managed Extensibility Framework
Form.TextがWindow.Titleになってるだけでイライラ度パない。
804 :
デフォルトの名無しさん :2010/02/02(火) 23:37:02
>>803 そういう名前レベルの互換性ないよね
まるで俺が設計するクラスの名前のようだ
良くも悪くもピュアOOPに近づけようとしてるんでしょ Textじゃ何を指してるか曖昧すぎてわからないからね
まあTextなんてのはWin32の影響受けまくってて微妙だったのでTitleの方がすっきりする
あとイメージ関係の扱いが強烈に煩雑なのがな
Imagingに関しては言えてるかも知れない。 MSとしては何でもやれるように汎用性を持たせたかったんだろうけど 何でもやれる必要性がある人って少ないのよね。 特に移行段階では。
809 :
デフォルトの名無しさん :2010/02/02(火) 23:58:00
>>802 ありがとう
面白そうです
勉強中の身でためになりました
あとDIコンテナというのもあるですね
あるですね
emunってどこで宣言すべきだと思う? 全てのクラスから参照できるよう全てのクラスの外で宣言すべきだと思う?
発想が逆だろ 必要な範囲から見えればそれでいいじゃねえか
>>807 クラスいっぱいでよくわからん。MSDN見ても要領を得ない
複数クラスで共通の汎用的なものなら外で、特定の単一クラス限定ならそのクラス内でいいんじゃないの?
でいいんじゃないの?
>>812 >>814 共通のemunを使うのはとあるクラスの中とメイン関数の中の二カ所。
これだったら全てのクラス外で宣言しないといかんかなぁ、と思って。
メインにだらだらコードを書くな。
オレは分け方悩んだらメインに入れてる 5万行くらいだけどファイル管理も楽だよ
うごきゃいい
たしかに動かなかったら品質も保守性もへったくれもないわな。
MyClassでしか使わないからといってMyClass.MyEnum.Hogeのように 外から内部型にアクセスさせるのは原則ガイドライン違反だよ
確かに、クラス内の集合的な識別子(enum/class/struct)は普通は外部に公開はしないわな。 するなら最初からそのクラスの外側に並べて書けばいいわけだし。
名前空間で縛って外に出せばいい あれJaneに次スレ候補ボタンなんかあったっけ?
名前空間にかかわらず,同一ライブラリ(もしくは同時に使うことが 想定されるライブラリ群)で同じ名前の型が存在するのはガイドライン違反だ 結局わかりやすくて区別しやすい名前を付けろということ
>>824 System.Drawing.Font
SlimDX.Direct3D9.Font
普通にかぶってますがなにかー
というかほぼ同時に使うものだちゅうねんめどいわー
ガイドライン違反といっても所詮ガイドラインでしかないよね 基本的なクラス類が重複する場合はこまるよね FormとMDX両方使いたいときに座標関連(Pointだっけ?)が両方で大量に定義されていて大変だったな 上のほうで座標が何でdoubleなのかって書いてあるけど答えはfloatだと精度不足だからです 昔からプログラムやってる人にはおなじみですが float a = 0.0F; for(int i=0;i<10;i++) { a += 0.1F; richTextBox1.AppendText(a.ToString()+"\n"); } で実行結果は 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8000001 0.9000001 1
>>827 置換結果は戻り値です
string result = stTarget.Replace("2ch.net/", "2ch.net/test/read.cgi/");
MessageBox.Show(result);
2chブラウザ作ってるの?
829 :
デフォルトの名無しさん :2010/02/03(水) 12:26:50
>>826 たったそれだけの足し算でそんな誤差でるのか
>>828 >2chブラウザ作ってるの?
そうとしか
>>826 なんでdoubleかじゃなくてなんでGDI+でfloatなのかって話だったような
>>829 0.1は2進数では表現できないからね
結果の最後の1も1.0じゃないし…
(a==1.0F).toString()がfalseになる
832 :
デフォルトの名無しさん :2010/02/03(水) 12:34:29
>>831 最近そっち方面やってないので忘れちゃったけど誤差吸収するための
なにかあったよね・・シグマじゃないや・・・
834 :
デフォルトの名無しさん :2010/02/03(水) 12:43:11
思い出した EPSILONか
というか、内部表現が2進数の浮動小数点数を10進数ベースの小数の計算して 誤差がどうとか、アホとしか言いようがない。 計算誤差が嫌ならdecimal型を使いなさい。
836 :
デフォルトの名無しさん :2010/02/03(水) 12:57:08
2chブラウザ作るやつ多いな 俺も作ったけどデータ取ってきたり表示したりする部分は どうにかなるが最後まで決まらないのがUIなんだよな・・ よく見るタイプ、ガジェットタイプ、proxyタイプ全部作ったけど いまだに納得いくのができない
>>835 その辺は許容誤差と計算速度のトレードオフでは?
初歩から1日1つ聞いていって何日したらものになるかちょっと興味がある
最終的出力の座標だけなら単精度で十分すぎるくらいでしょう WPFではコントロールのレイアウトやアニメーションの計算なども 全て一貫して小数でやってるから精度が必要
841 :
デフォルトの名無しさん :2010/02/03(水) 13:03:00
842 :
デフォルトの名無しさん :2010/02/03(水) 13:06:24
>>839 初歩もいろいろあるからなあ
他言語で開発経験があってC#という道具の使い方をマスターしてない初歩な人か
多言語すら経験のないC#が処女言語な初歩じゃあ偉い違う
俺は前者だけど2chとのやり取りについてまとめたサイトがあることを知らないで
やったのでView部分は別にして内部の処理は1週間くらい
関数のリターン値を、intやdoubleやshortなど違った型に出来ませんでしょうか?
846 :
デフォルトの名無しさん :2010/02/03(水) 13:10:40
で、ここまでは本体部分だけの話なんだけどスキンとかスクリプトを動かすとなると HTML、CSS、Javascript、正規表現とwebに関する知識もいる こいつらとIEコンポーネントの癖も知らないといけない proxyやるならIEとFireFoxで動かないスクリプトの書き方があるとかも 理解してないと問題の切り分けすらできないけどね
849 :
デフォルトの名無しさん :2010/02/03(水) 14:57:45
Visual C# 2008 Expressにて、
WebBrowserコントロールでブラウザ機能を内蔵したプログラムを作成しているのですが、
「履歴に残さない」「キャッシュからリードしない」という指定を付けてブラウジングする方法を探しています。
検索して探した結果、
.Net2.0の時点では、navigate2メソッドにて引数を渡すことで実現できたように書いて有りますが、
http://capsulecorp.studio-web.net/tora/cs/mshtml/WebBrowser.html 現行のVisual C# 2008(.Net3.5)ではnavigate2メソッドは無いようです。
同じようなことを実現剃る方法ってありますか?
そのページと 同じようにやれば navigate2メソッド 使える
VS2008の設定について教えてください。 { を入力すると対応する } を自動で挿入してくれる機能は設定にありますか? コード入力時に { を入力すると } を入力するまでずっとエラーメッセージがでるのがうざいです。 eclipse だと { や ( ” などを入力すると自動で閉じる側も入力されるので、同様な操作にしたいのです。
>>851 {を書いた時点で}も書けばいいじゃん
{} って書いて→ { 間に書き足す }
スニペット使えば
ifとかwhileとかforとか大抵の制御構文はコードスニペットで 自動でブロック作ってくれるじゃん メソッド定義や配列などの初期化なんかそこまで頻繁に使うものじゃなし
メインフォームにプログレスバーがあって、そのうえにユーザーコントロールを貼り付けたんだけど、 そのユーザーコントロールから、メインのプログレスバーを利用したい場合は、どうしたらいいのでしょうか?
>>856 メインのプログレスバーのインスタンスをユーザーコントロールに渡せばいい。
>>857 ありがとうございます。早速ためしてみます。
List<string>型の配列から特定の文字に合致する項目を削除しようと思っています。 List<string>型の配列は既にソートがかけられているものとします。 【方法1】 .RemoveAll() にdelegate関数を引数として渡して特定の文字と一致する項目を削除させる。 【方法2】 .BinarySearch() で特手の文字と一致する配列のインデックス番号を調べ、 .RemoveAt() でそのインデックス番号の配列を削除する。 とではどちらの方がより高速に処理できますか?
速度を追求すると痛い目見るぜ
測ったわけじゃないけど、合致する項目が多ければ直感的には1の方が速いだろうな
でもマジレスすると
>>859 みたいなところがボトルネックになることはまず無いので気にしないのが正解
あまり気にするなということですね、ありがとうございます。
>>860 チューニングに浪費した時間プライスレスですね分かります
そもそも動いてない段階でチューニングもクソもない 全く意味がない
画像と数値が混合した人別のデータがあるんだけど、これをお手軽にデータベースにするにはどんなワザを使えばよいですかね?
画像もデータベースに入れたいの?
コンソールアプリを作ってるんだけど、たとえばヌコクラス(Class Nuko)を作ってオブジェクトを多数作成するとする。 #名前、 性別、 年齢、 毛色数 たま、 ♂、 5、 2 ミーちゃん、 ♀、 2、 3 田子作、 ♂、 13、 1 ・ ・ ・ ・ こんな感じでざっと1000匹に対応して1000個のクラスオブジェクトを作るとする。 上記の属性はテキストファイルにでも保存するとして、問題はそれを読み込んでヌコクラスの オブジェクトを作る際なんだけどみんなならどうやる? Main()メソッドの中でテキストから読み込んでNukoクラスのオブジェクトをfor文で回して作る? それともテキストを読み込んでNukoクラスを1000個生成するのに専用のクラスを別途作成する? どういう流儀でやるべきか、そこんところがよう分からんのよ(´・ω・`)
どうでもいい 別の専用のクラスを作るとしてもそのクラスの中でやることは同じだろ アプリケーションの規模や、その処理をどう使うかなどによるので一概には言えない
どういう流儀よりも何したいのかだろ
>>866 そう。画像というかサムネールなんだけどね。バイナリでバーっとファイルに落とすのも今ひとつだし、なにか便利な物があるのかなーと思って。
forも専用クラスも作らずXmlSerializer使います
intとint[]をそれぞれメソッドの引数にとり、メソッド内でそれぞれの値を変更した場合 メソッドの外に戻ったときそれぞれの値は変更されていますか?それとも渡したときのままですか?
そのくらい試せハゲ 前者変わらない、後者変わる
>>869 何したいのかも分からんのよ(´・ω・`)
後者は変わるの?
じゃあプログラム辞めろ
intは値型だがint[]は参照型だから変わるよ
たとえばデータを読み込む専用の抽象クラスを定義して それをCSV形式用のクラスやXML形式用のクラスなどが継承するようにすると いろんなフォーマットに対応したりできる そういうのが必要なければ読み込みメソッド1個で十分 結局使い方による
>>868 別のクラスつくってそこで読み込みメソッドを新たに作る?
読み込んだあと1000個からなるNukoクラスの配列を作って
実際に処理するところにコピーするわけ?
うーむ・・・
>>874 少なくとも使い回ししないのならクラス作る意味が無い
メソッドで十分
( -ω-)スヤスヤ…
>>878 なるほど・・・
Main()メソッドの隣に読み込み専用のReadText()メソッドでもstaticで作ってそこで読ませると。
ReadText()メソッドは引数としてNukoの配列を参照渡ししてそいつに読み込んで生成したオブジェクトを
返させるわけね、こんな感じに↓
static void ReadText( Nuko [] nukkonuko )
{
・・・・
}
つか
>>867 って単なる練習でしょ?
練習中に流儀とか気にしなくていいから心の赴くままにやりなさいよ
遊びで作るなら、 DataTable.ReadXml( for( new nuko( row[ i ] ); くらいで十分じゃないか? 確かこんなのがあったよね。
static Nuko[] ReadText() { ・・・・ } それならこっちの方がいい 読み込む前に配列の要素数とか決められないだろ
>>886 > 読み込む前に配列の要素数とか決められないだろ
そっか、だったら param を追加すべきだったか(´・ω・`)
static void ReadText( param Nuko [] nukkonuko )
{
・・・・
}
try{ using(FileStream stream = File.OpenRead("nukonuko.txt")){ Xmlserializer serializer = new XmlSerializer(typeof(Nuko)); return (Nuko[])serializer.Deserialize(stream); } }(FileNotFoundException){ return new Nuko[0]; }
1000の単位だと、DB使いたくなるな。
つ NHibernate
>>887 もしネタじゃなくて本気で言ってるんだったら、当分クラスなんか忘れて今すぐ超入門書に戻りなさい
おいおいお
XmlSerializerはクラスもプロパティもコンストラクタもパブリックじゃないといけないから シリアライズ用のクラスを別途用意することになったりして扱いにくい
なんだ、構ってちゃんか。そろそろ終了で。
>>877 > intは値型だがint[]は参照型だから変わるよ
なんとorz
それ知らないでプログラム組んだら偉いことになりますね
参照型はref/outの接頭語を付けて受け渡しすることを厳守する、という決まりを貫かなかったのはなぜでしょう?
参照型の値渡しだから決まりも糞もない
それって悪名高いポインタと同じことでは?!
キャストできないから問題ない
ref/outはできる事の範囲が違うだろが
これだから低能は
907 :
デフォルトの名無しさん :2010/02/04(木) 00:29:27
まったくだ
319 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 11:56:14 参照の値渡し 参照の参照渡し 要ref/out 値型の値渡し 値型の参照渡し 要ref/out この程度のことを何度も何度もいい加減ウザイんだが
ポインタが悪名高いって、何がどうして悪名高いのか全く理解してねえだろ。 人聞きの悪い。
ListView のオーナードローで質問です ListView.DrawSubItem イベントハンドラにおいて、非選択状態・選択状態・選択状態(非アクティブ)の 三つの状態を判定して、前景色と背景色を変更して描画しています それと同時に、項目ごとに水平方向の配置を StringAlignment.Far などと設定しているんですが 例えば StringAlignment.Far だと右側にベターっとひっつきます オーナードローでなくお任せの場合や、DrawString ではなく DrawText で表示する場合は テキストの右側に少し余白がいい感じで表示されます この余白を DrawString でも表示したいんですが、どうしたら良いでしょうか?
ポインタは悪だー!ポインタを許すなー!
最近visual C# 2008を使い始めました。 小さなプログラムを作って練習していますが、 新しく作成するたびにいちいちプロジェクトを作成するのは面倒です。 そこでコマンドプロンプトからコンパイラを呼び出そうとしましたが、 それがどこにあるかわかりませんでした。 皆さんは例えばhello worldレベルの小ささのプログラムを作成するとき、 いちいtプロジェクトを作成して対処していますか? それともIDEを使わずに対処していますか?
913 :
デフォルトの名無しさん :2010/02/04(木) 00:45:38
プロジェクトを使いまわせばいいだろ
そんなん作らないから知らん。
簡単なコード懸賞ならbutton_clickに書けばいい
>>910 知らんけどStringFormat.MeasureTrailingSpaces
StringFormatFlagsのマチガイ
C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
自己解決してました。
どういたしまして。
どういたしまして。
レベルの低いスレですね
それでいいのだ
925 :
910 :2010/02/04(木) 01:17:59
>>916-917 ありがとうございます
ちょっとやってみましたが変化なしです
ただ、正しく理解していないせいかもしれませんので
もうちょっと調べてみます
文字列末尾に半角空白入れるとかDrawStringに渡すRectangleの左右を少し絞るとかすれば?
グループボックスのenableをfalseにしたら中のコントロールのenableもfalseになるけど trueにしたときはならないのね・・・
入り口開け閉めしてるだけのようなもんだから、中の状態は変わらんわ
929 :
910 :2010/02/04(木) 01:53:33
>>926 報告しようとしたら既にレスが
ご指摘の通り、右寄せと左寄せの項目に関しては
Rectange の Reft と Left の値を調整して DrawString するようにして
希望する動作を得ました
ありがとうございました
>>928 調べてみたらデザイナで一つのコントロールのEnableをfalseにして
それをコピーしてたからEnableがtrueなのとfalseなのがまざってたよ・・・
ありがとう
>>908 参照の値渡し → int[]
参照の参照渡し 要ref/out → ???
値型の値渡し → int
値型の参照渡し 要ref/out → ref/out int
上から2番目の用途って何ですか?
var x1 = new int[] { 1,2,3 }; test1(x1); var x2 = new int[] { 1,2,3 }; test2(ref x2); void test1(int[] d) { d = new int[]{ 3,4,5 }; } void test2(ref int[] d) { d = new int[]{ 3,4,5 }; }
>>932 > void test1(int[] d) { d = new int[]{ 3,4,5 }; }
> void test2(ref int[] d) { d = new int[]{ 3,4,5 }; }
どっちも結果は同じですか?
実行してみろクソハゲ
>>933 値渡しと参照渡しの区別が付くようになったら分かるよ。
>>932 void test1(int[] d) { d = { 3,4,5 }; }
void test2(ref int[] d) { d = { 3,4,5 }; }
こうしたらどっちも結果は同じじゃね?
938 :
デフォルトの名無しさん :2010/02/04(木) 09:50:02
ClickOnceにてWindowsフォームアプリケーションを作成し、ユーザーに利用してもらっていますが、ユーザーが増えてきたため、バージョンアップが行われる都度に何らかのアナウンスをしたいと考えています。 現在のアプリケーションの更新方法は、 ・アプリケーションが実行されるたびに更新バージョンがないか確認する。 ・確認するのはアプリケーション開始後 にしています。 ここで、次のようなことは可能でしょうか?もし可能でしたらどのようにすればよろしいでしょうか。 ・アプリケーションの起動時に更新バージョンがないか確認する。 ・ただし、更新バージョンがないか確認する通信中のステータスを表す小窓は表示しない。(毎回この小窓が表示されるのが煩わしいと思うユーザーがいるため) ・更新バージョンがあるときは、メインフォームのステータスバーに「新しいバージョンがあります。再起動してください。」と表示させる。 お手数ですが、よろしくお願いいたします。
>>938 いや、それを自動でやってもらうためのClickOnceなんだが……。
毎回起動のたびに配信サーバーにバージョンチェックしに行ってるだろ?
940 :
デフォルトの名無しさん :2010/02/04(木) 10:12:17
>>939 バージョンチェックしに行ってますが…何か?
clickonceなんか使うより自分で作ったほうがいいよ
942 :
デフォルトの名無しさん :2010/02/04(木) 10:19:11
picturebox(親)の上にpicturebox(子)を配置して、親の上でだけ自由に 移動できるプログラムを作ろうとしています。 以前教えてもらったサイトを参考に下記のようにコードを書きました。 Point mouseDownPoint = Point.Empty; private void PictureBox1_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { Rectangle moveRect = new Rectangle(0,0,240,320); //ドラッグとする移動範囲を超えたか調べる if (moveRect.Contains(e.X, e.Y)) { PictureBox1.Location = new Point(PictureBox1.Location.X + e.X - mouseDownPoint.X, PictureBox1.Location.Y + e.Y - mouseDownPoint.Y); } } } _MouseDown()でx軸y軸を取得、Rectangleで親のサイズを指定して動きを 限定したかったのですが、親サイズから出て(隠れて)しまいます。 コードをどのように修正すれっば良いのでしょうか?
すれっば
944 :
デフォルトの名無しさん :2010/02/04(木) 10:31:51
>>939 さんへ。
>>938 です(※
>>940 の人は別人です)。
わがままかもしれませんが、
・起動時に裏で配信サーバーにバージョンチェックをしに行く。
・その際に通信ウィンドウを出さない(毎回表示されるとユーザーがいい印象を持たないかもしれないため)。
また、その時点では最新バージョンへの更新を行わない。
・新しいバージョンがあればフォームのステータスバーに
「最新のバージョンがあるので再起動してください。」と表示させる。
・再起動時に自動で最新バージョンを取得する。
という流れを描いているのですが、無理でしょうか…。
ClickOnceに用意されているAPIを自分で呼べばいい
>>938 ,944
つーかそんなせんでもいい行儀の悪いことをわざわざすんな。
# 通信ウィンドウを表示しないとか。
# 表示するのがClickOnceという仕組み。
# 元々サーバー上にあるソフトウェアをオフラインにダウンロードして実行するという形式だから
前のバージョンからの更新分の表示については、こんな方法はどうだ?
・更新履歴の情報をリソースに蓄えておく
・アプリケーション設定ファイルに前回起動した自分自身のバージョンを記録しておく
・前回起動したバージョンと今のバージョンが違う場合には、差分範囲の更新履歴を起動時に表示する
te
picturebox1(親) picturebox2(子) と仮定すると picturebox2.Parent.Locationとか picturebox2.Parent.ClientRectangleとか したほうがいいかもね picturebox2の親がなんであろうがOKになる ただしControls.Addしておかないと親が居ないのでこけるけど
あとこういうのってゲーム作ったことあると簡単なんだけどね・・・
親の表示範囲(ClientRectangle)から子を出したくない場合は
子の左上頂点が親の範囲表示範囲内にいるかどうか判定して
居なければその範囲内に戻せばいいだけ
まず左上付近の判定
多分左上が(0,0)はいじれないと思うので
>>948 の例だとpicturebox2.Topとpicturebox2.Leftがマイナスになってれば0に戻す
//左上処理
if(picturebox2.Left < 0) picturebox2.Location = new Point(0,picturebox2.Top);
if(picturebox2.Top < 0) picturebox2.Location = new Point(picturebox2.Left,0);
//右下の処理
int AW = picturebox2.Parent.Width - picturebox2.Width;//もしかしたら幅なので座標系として見る場合は-1いるかも
int AH = picturebox2.Parent.Height - picturebox2.Height;//もしかしたら高さなので座標系として見る場合は-1いるかも
if(AW > picturebox2.Left) picturebox2.Location = new Point(AW,picturebox2.Top);
if(AH > picturebox2.Top) picturebox2.Location = new Point(picturebox2.Left,AH);
ごめん右下はこれだ //右下の処理 int AW = picturebox2.Parent.ClientRectangle.Width - picturebox2.Width;//もしかしたら幅なので座標系として見る場合は-1いるかも int AH = picturebox2.Parent.ClientRectangle.Height - picturebox2.Height;//もしかしたら高さなので座標系として見る場合は-1いるかも
951 :
デフォルトの名無しさん :2010/02/04(木) 11:51:39
>>946 >>945 さん
>>946 さん
ありがとうございます。
立ち上がったままPCを操作するような慌ただしい状況下にあるユーザーが多いので、起動時の通信ウィンドウを出さずに更新情報を見に行き、
リアルタイムにより新しいバージョンがあることを通知したかったんです。
コードで最新バージョンが何かをサーバー上(レンタルサーバー上にアップしています)
に見に行く方法があったりもするのでしょうか。
APIの命令を記述することは今までやったことがないのですが、
何か良い参考書やサイトはありますでしょうか。
たびたびすみません、よろしくお願いします。
952 :
デフォルトの名無しさん :2010/02/04(木) 11:54:02
印刷プレビューダイアログボックスを使わずに フォーム上に印刷プレビューコントロールを配置してプレビュー表示したいと思っていますが、 印刷プレビューダイアログボックス内の虫眼鏡による拡縮機能を利用するにはどうすればよいでしょうか。
953 :
デフォルトの名無しさん :2010/02/04(木) 12:11:37
>>942 ごめん
>>948 >>949 は参考程度にしておいてくれ(不等号の向き間違ってたりする、恥ずかしいw
windowsの場合はMouseイベントは純粋に移動だけ行って
pictureboxのLocationChangedイベント内で下記処理を行ったら思うように動いた
void picturebox2_LocationChanged(object sender, EventArgs e)
{
int wPic2Left = picturebox2.Left;
int wPic2Top = picturebox2.Top;
//wPic2Left += e.X - mousePoint.X;
//wPic2Top += e.Y - mousePoint.Y;
//左上処理
if (wPic2Left < 0) wPic2Left = 0;
if (wPic2Top < 0) wPic2Top = 0;
//右下の処理
int AW = picturebox2.Parent.ClientRectangle.Width - picturebox2.Width;//もしかしたら幅なので座標系として見る場合は-1いるかも
int AH = picturebox2.Parent.ClientRectangle.Height - picturebox2.Height;//もしかしたら高さなので座標系として見る場合は-1いるかも
if (AW < picturebox2.Left) wPic2Left = AW;
if (AH < picturebox2.Top) wPic2Top = AH;
picturebox2.Location = new Point(wPic2Left, wPic2Top);
}
954 :
デフォルトの名無しさん :2010/02/04(木) 13:09:25
>>948 さんに教えてもらったやり方でいろいろ試していました。
>>953 レスありがとうございました。この方法で親の枠内でだけ子が動けるよ
うになりました。
この時、枠から外に出ようとすると子枠のちらつきが起きてしまいます。
子のlocationが枠から出たら戻すので起こるのかなと思いましたが
_mousemoveに移動してみたりrefreshを入れてみたりしていますが、とて
も難しいです。
>>954 LocationChangedじゃなくLocationChangingイベントがあれば
Locationを変更しようとしたときに干渉できるのでその後起こる
であろう描画イベント前に位置補正できるんだろうけどね
LocationChangedイベントだとLocationを変えた後一旦描画して
から呼ばれる感じなのでどうしてもねえ
Paintイベントで補正もやってみたけど余計変になった
Formを継承して自分でプログレスバーを作って、main formから呼び出すとちゃんと動くんだけど、 それを他に作ったユーザーコントロールから使うと、ダイアログは出るんだけど、バーが表示されません。 どうしたらよいでしょうか?
2ちゃんで聞いてみる
958 :
デフォルトの名無しさん :2010/02/04(木) 13:42:21
959 :
デフォルトの名無しさん :2010/02/04(木) 13:43:36
960 :
デフォルトの名無しさん :2010/02/04(木) 13:50:49
C++で書いたDLLをC#で使う場合の注意事項など を解説したサイトとかありますでしょうか たぶんメモリ関連が一番の注意事項だと思うのですが よくわかりません
一番の注意事項はAny CPUならDLLを32/64両方用意する 用意しないならx86で作る、じゃないかなあ。
962 :
956 :2010/02/04(木) 13:56:47
事故解決しました。 DoEventsを通っていませんでした。
DoEvents……アレな匂いが漂ってきたぜ
>>961 Any CPUというのがよくわからないのですがx86(つまり32bitDLL)として作っておいて
OSやCPUの32bit互換機能に頼って使えるようにしておくということですかね?
Any CPUに関してはVS2010になるとexeに関してはx86とするとか
あまりいい検索結果はなかったので結構重要なことなんですね
>>954 別解
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
mPos = e.Location;
Point p = this.PointToScreen(pictureBox1.Location);
p.Offset(e.Location);
Cursor.Clip = new Rectangle(p, new Size(pictureBox1.Width - pictureBox2.Width + 1, pictureBox1.Height - pictureBox2.Height + 1));
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (mPos == Point.Empty) return;
pictureBox2.Left += e.X - mPos.X;
pictureBox2.Top += e.Y - mPos.Y;
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
Cursor.Clip = Rectangle.Empty;
mPos = Point.Empty;
}
966 :
デフォルトの名無しさん :2010/02/04(木) 14:28:46
PrintPreviewコントロール(スクロールバー表示中)の上でホイールを回したり PageDownが効くようにするにはどうすればいいでしょうか。
イベントハンドラで好きなように処理すれば
969 :
デフォルトの名無しさん :2010/02/04(木) 14:56:32
970 :
デフォルトの名無しさん :2010/02/04(木) 15:07:45
>>965 レスありがとうございました。思ったとおりの動きができました。
>Point p = this.PointToScreen(pictureBox1.Location);
>p.Offset(e.Location);
>Cursor.Clip = new Rectangle(p, new Size(pictureBox1.Width - pictureBox2.Width + 1, pictureBox1.Height - pictureBox2.Height + 1));
ここは初めてみるものなので、これから調べてみます。
本当にありがとうございました。
971 :
デフォルトの名無しさん :2010/02/04(木) 15:17:22
>>970 なるほど
ボタンを押してる間はマウスの移動範囲を限定するわけか
972 :
デフォルトの名無しさん :2010/02/04(木) 15:18:07
便乗だが
>>965 を使わせてもらおうと思ってぐりぐり動かしてたら
マウスジェスチャーに反応するランチャーに一旦アクティブを取られた場合に
限定したクリップが解除されるな
ランチャーの設定はマウスジェスチャーで呼び出しできて
カーソルがランチャー上から外れたら自動でたたむという感じ
なのでボタンは押したままなんだよね
974 :
デフォルトの名無しさん :2010/02/04(木) 16:04:16
えっ
おっ
ぬ
978 :
デフォルトの名無しさん :2010/02/04(木) 18:00:06
終わるというのがわからん
>>979 既存のブラウザの検索機能の一部が気に入らないんだけど
一から書くのが面倒な人とかにすれば.netのexeはオープンソースで
やってるのも変わらないからねえ
使ってもらう楽しみじゃなくソースありがとうじゃあねじゃちょっと寂しい物があるよね
>>978 そういえばJaneはメニュー部分もつまんで動かせるけど、.NETのだと出来ないっぽい?
一番上固定はいいとしても、右の空いたスペースにアドレスバーとか詰め込みたくなるね
982 :
デフォルトの名無しさん :2010/02/04(木) 18:07:38
>>981 どうにでもできる
部品としては使いこなしてないので上ででてるコントロールを摘んで・・・という
コード書いちゃう気がするけど所詮はFormの上のパーツだからねえ
DockStyleをNoneにして摘んだ際の移動コード書けばなんでも動くよ
983 :
デフォルトの名無しさん :2010/02/04(木) 18:15:32
984 :
デフォルトの名無しさん :2010/02/04(木) 18:26:09
コントロールのフロートとドッキングをサポートすると何が面倒ってZオーダー の管理なんだよな・・・
>>980 初めからオープンソースでやればいい話じゃない?
何せこい話してるんだか
わたし女だけど難読化したソースが素でよめる男の人って…
987 :
デフォルトの名無しさん :2010/02/04(木) 18:49:52
>>986 難読化されてるとはいえクラスの形とか元に戻るんだから
機械語で解析する苦労を考えると楽だろう
復元したソースをコンパイルすることだってできるんだか
ライブラリ呼び出すだけのソースなら楽だろうな。解読する価値があるのかは疑問だが。
プリンタにA4用紙をセットして↓のような出力をしたら、中央にくるはずが e.Graphics.PageUnit = GraphicsUnit.Millimeter; e.Graphics.FillRectangle(new SolidBrush(Color.LawnGreen), 30, 40, 150, 6); 5mmくらい右にずれたんですけど、これはプリンタの余白が5mmくらいあって ずれたということですか? どう考えていいのか・・・ よろしくお願いします。
990 :
デフォルトの名無しさん :2010/02/04(木) 19:37:55
君か とりあえず前提となる数字データ A4 - ISO 216 用紙サイズ(210mm×297mm) eの元は何なの? 関連しそうなので思いつきだがPaddingとかあったね
2ちゃんブラウザくらいならソース解析するより 自分で作ったほうが早いな 昔VB6で作ったけど簡単だった。たいした機能なかったけど。
>>990 ありがとうございます。↓です。
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
993 :
デフォルトの名無しさん :2010/02/04(木) 19:45:40
>>993 e.MarginBounds.Leftは100になってて、100×0.254=25.4mmだから印刷できる範囲に入ってるんですよね・・・
995 :
デフォルトの名無しさん :2010/02/04(木) 20:07:37
そもそもその100ってインチなの?
第一プリンタの設定なんて個々で違うから下記のようなテストコード書いてどうなってるか見てみないとわかんないよ
PrintDocument pd = new PrintDocument();
textBox1.AppendText(pd.DefaultPageSettings.PaperSize.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.Bounds.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.Margins.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.PrintableArea.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.PaperSource.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.HardMarginX.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.HardMarginY.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.Landscape.ToString() + Environment.NewLine);
textBox1.AppendText(pd.DefaultPageSettings.PrinterResolution.ToString() + Environment.NewLine);
こんな感じで今試した
http://uproda.2ch-library.com/210608eQU/lib210608.png
ふーん
構造体の面罵変数ってなんで初期化できないの? struct person{ private int age=30; } クラスだとできるのに構造体だとこれができない理由は何?
>>995 結果は↓でした。
[PaperSize A4 Kind=A4 Height=1169 Width=827]
{X=0,Y=0,Width=827,Height=1169}
[Margins Left=100 Right=100 Top=100 Bottom=100]
{X=13.33333,Y=11.66667,Width=800,Height=1137.667}
[PaperSource オートシートフィーダ Kind=AutomaticFeed]
13
11
False
[PrinterResolution Medium]
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。