ふらっとC#,C♯,C#(初心者用) Part35
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
4 :
デフォルトの名無しさん :2008/12/17(水) 22:20:18
>>3 がわかってるならなんで993はあんなくだらない質問をしたのか
大文字の使い方にVB臭が
for(int i=0;i<回数;i++){ try { なんやかや; break; } catch{ なんやかや; } finally{ なんやかや; } } こんなんでいいんじゃね
>>6 昨日から調べてるんですが有効な情報を見つけられなかったので。
>>9 ありがとうございます。
WebRequestやらFileStreamを何度も作るのは嫌ですが
ループで括るのが簡単ですよね。
throwの使い方がいまいちよくわからないのですが
この場合に利用することはできないでしょうか?
gotoといい,テンプレ的質問だねw 「例外は本当に例外的なときに使うものであって普通の制御に使ってはいけない」
>WebRequestやらFileStreamを何度も作るのは嫌ですが え?
おまいら見事なスレタイをつけてくれた993さんなんだから もっと優しく教えてやれよ
14 :
デフォルトの名無しさん :2008/12/17(水) 23:00:23
なんで?
良く見かける機能で エクスプローラの空白部分をダブルクリックすると 上の階層に上がると言うのがありますが どうやったらできるのでしょうか?
>>15 ランチャーソフトで言えば
Clock Launcherとかに搭載されてます。
19 :
デフォルトの名無しさん :2008/12/17(水) 23:23:40
Color ActiveColor = Color.Gray; int intARGB = (int)(ActiveColor.ToArgb); こうやると、 エラー: メソッド グループ 'ToArgb' を非デリゲート型 'int' に変換することはできません。 このメソッドを呼び出すことはできません。 となりました。単純にint型の値で受けて、数値を変更してから 使いたいのですが、どのようにしたらよいでしょうか。
20 :
15 :2008/12/17(水) 23:24:03
22 :
デフォルトの名無しさん :2008/12/17(水) 23:29:02
>>21 そうだったのですか!!
わかりました、やってみたら確かに解決しました。
ありがとうございました!!
>>19 ランチャーか…メッセージフック臭いなあ
本当にメッセージフックだとC#から手が出ないんだよね
DLLにできないから
前スレ
>>994 > なんだか分かりませんが
> 元コードのほうは正規表現つかってんじゃない?
> C#のほうは単純にstringを置換してるだけっしょ?
> Regexクラス使わないと駄目じゃん
前スレ
>>1000 > buffer.Replace("\n", @"\X0e");
>
> は何もしてないよ。戻り値捨ててるやん
> stringクラスは不変だからね
すっかり忘れてましたorz・・・
ご指摘ありがとうございます(´・ω・`)
25 :
15 :2008/12/17(水) 23:52:55
>>23 メッセージフックと言うのですね。
なんか難しそう・・・・
他に方法あったら知りたいですが・・・
ちょっとメッセージフックについて調べてみます。
前スレ991のコピーです C#で簡単なデーターベースを扱いたい場合は何を使うのが一般的ですか? 用途は、ファイルにタグ付けみたいなことをしたいのです。 あらかじめファイルのリストを登録しておいて(1000アイテムぐらい)、 〜タグが付いているファイルを列挙するのが主な目的です。 # えっちな画像をタグ管理するソフトだと思っていただいても構いません ちなみにデーターベースの経験全く持ってゼロです (遙か昔、DelphiからBDE経由でParadoxDBのデータベースをちょっと触ったことぐらいしかありません) 規模としてはテーブル一つあたり1000〜4000項目 位を登録する予定です。 また、画像用、音楽用とテーブルを用意するつもりですが、 一つのテーブルにまとめて 画像タグ、音楽タグ などをつけた方が良いでしょうか? (そうすると 3万近くの項目を扱わなければなりません) データーベースサーバを必要としないシステムが良いです。 また、友人にソフトウェアを渡す場合もあり得るので、出来るだけ単体で配布できるものが良いです。 この用途で一番お手軽な方法は何でしょう? SQLite(一応追加で入れてみた)? SQL Server Compact ?
VisualStudio2005 でプログラムを作っています。 c#でexcelを操作するプログラムを作りたいのですがテンプレのサイト等を参考にしたのですがよくわからなかったのでこちらに書き込ませていただきました 知りたいことは 1・console アプリケーションでexcelの操作はできるのか 2・できる場合、必要な初期設定についてどうすればいいのか (プロジェクト→参照→COM→officeなんちゃらの参照でいいのならばusingについてから教えてください) 3・プログラム内で作成した3種類の数値をexcelに渡し折れ線グラフを作成する。 4・プログラム内ではfor文で約1000回データを作成するので1000個分のグラフを作り、保存したい 以上の4つです。よろしくお願いいたします。
なんかVBAでも使った方が簡た(ry
>4・プログラム内ではfor文で約1000回データを作成するので1000個分のグラフを作り、保存したい 終わりませんw
>>26 別にいいけどmdbでも全然大丈夫じゃね?
解説サイト読んでもイマイチよく分からないんだけどデリゲートって結局何やってるの? javascriptで obj.hoge = function hogefunc() { 〜〜 } とかこれと同じようなイメージ持ったんだけどこんな認識でいいの?
うん
ありがとう そういう前提で解説サイトのデリゲートの項目を読めば理解が進みそうだ
Rubyのブロック構文とかClosureと同じようなもんでしょ?違う?
Rubyは触ったことないんで…すまぬ、すまぬ…
メニューストリップアイテムのセパレータの上をマウスが通過する時にフォーカスがドロップダウンの一番上に戻されるんですが何が原因か全く不明 バグか?
そりゃバグでしょうよ。 あなたの書いたコードのね
フォームエディタの話なら確かに怪しい挙動してるな。 メニューにText入力してる時に勝手に決定されたりフォーカス外れたりとか。
tryやcatchで{}が省略できないのは何故ですか?
Windowsアプリで、メッセージが来るまで効率よくかつ反応よく待機するには MsgWaitForMultipleObjectsだったかを呼び出すしかないですかね? メッセージが来るまでただ待ちたいだけです。 これってフォームアプリから呼び出すのに特に注意事項とかありますかね? ネイティブの世界に明るくないので問題あるのかよく分からない。 マネージドな世界だけで出来ればそれにこしたことはないんですが、ちょっと無理そうで…
>>41 catchを使わないtryの意味って何すか?
try
Hoge();
catch (HogeException e)
throw e;
みたいな感じで書きたいんでしょ
できてもおかしくはないな
>>43 finally
tryはブロックだからな
if else if ... else if else と try catch() ... catch() finally は似てるよね的な感じか。
C#で作ったソフトって メモリ使用量が多く見えるのですが? どうなんですかね?
仮にもプログラマならタスクマネージャなんかに頼るなよ あの表示を減らすだけならウインドウを最小化したりSetProcessWorkingSetSizeを呼び出したりすれば 簡単に減らせる
1Gも2Gも4Gもメモリつみながら数十M程度のメモリ使用量でもぎゃンぎゃン言われる風潮は何なんだろうな
form1.Opacity = Convert.ToDouble(domainUpDown1.Text); コンパイルはできるけどエラーがでる。 なぜなんだろうか?
何のエラーかいちいち聞かないといかんのか・・
domainUpDown1.Textがdoubleの数値を表す書式になってないんじゃないの
54 :
50 :2008/12/18(木) 23:23:35
わかりました。 ちょっと考えます。
>>47 ソフト自体のメモリ使用量じゃないよそれ。
ガベコレはいったん多めにメモリ取っておいた方が実行効率いいんだし。
50MBくらいの画像に対して画像処理するプログラム作ってますが 途中でメモリが足りないというエラーが出て落ちます。 メモリは3GB積んでいるのでそうかんたんになくならないはずなんですが。 ↓こんなプログラムです for(int i=0;i<画像の枚数;i++) { Bitmap bmp = new Bitmap(); //↓ここで画像処理 //↑ bmp.Dispose(); GC.collect(); } どの画像に対してやってもループ2〜3回目で落ちてしまいます。 ガベコレしてもメモリの空き容量が全然増えないのがなぞです。 アドバイスお願いします。
Disposeが重要で,GCは全く関係ないよ GC.Collectは無くても変わらない ここで画像処理 の中にリソースの掴みっぱなしがあるとか
GCは不要なんですか ちなみに↓こうするとなぜか問題なく動きます for(int i=0;i<画像の枚数;i++) { Bitmap bmp = new Bitmap(); //↓ここで画像処理 //↑ bmp.Dispose(); GC.collect(); MessageBox.Show("プギャー");//←これを挿入 } タスクマネージャーでメモリ量を監視していると メッセージボックスを表示させた瞬間にメモリ量が いっきに減ります 不思議でしょうがないです(・・;)
似たようなプログラム作って数万枚の画像を処理してるけど 512MBのメモリが足りなくなったことなんてないな DisposeのタイミングはCLR依存のはずだからDisposeしたら すぐに解放されるわけではないよ
その画像処理ってのがクサイにきまってんじゃん
>>42 WinFormsのメッセージループをMsgWaitForMultipleObjectsで置き換えるのか。
たとえ今上手く動いても、.NetFrameworkの実装が変わって動かなくなる可能性もあるし
俺なら怖くてできないな。
> マネージドな世界だけで出来ればそれにこしたことはないんですが、ちょっと無理そうで…
別スレッドで WaitHandle.WaitAny で待機して、
シグナル状態になったら、UIスレッドにメッセージを送信するんじゃダメなほどの効率が必要なの?
>>59 > DisposeのタイミングはCLR依存のはずだからDisposeしたら
> すぐに解放されるわけではないよ
そんなわけないだろ何のためのDisposeだよ
Disposeのタイミング→GCのタイミングならわかるけどこの場合GCは関係ない
C#とJAVA、 どっちがカンタン?
言語のレベルでは大差ない
C#のほうが構文多いけど よく使う範囲では大体同じ
初心者が学び始めて すぐに使えるようになるのはどっち?
個人的にはC# 窓アプリ以外は
使うって何に使うのよって話
ナンパに使います
C#はVSのインストールだけで環境が整うのが大きい
foreach (DataRow dr in ds.Tables[1].Rows) { listView1.Items.AddRange((ListViewItem[])dr.ItemArray); // ←どうやってキャストしたら良いでしょうか? }
キャストは無理 継承関係もないしキャスト演算のオーバーロードもないからな Enumerable.SelectからToArrayするか、素直にListViewItem[]をnewしてfor回して一つずつ代入
いくつかのコンポーネントが配置されたFlowLayoutPanelに、追加でコンポーネントを挿入する
方法を教えて下さい。
http://msdn.microsoft.com/ja-jp/library/z9w7ek2f (VS.80).aspx
を読むと、挿入したいコンポーネントを選んでマウスを持ってくると、挿入バーが
表示されるように書いてありますが、それらしいものが表示されません。
もしくは最後尾に追加したコンポーネントを移動させたいのですが、他のコンポーネントが
移動してくれません。何か設定とか有りますでしょうか?
C#のプログラムをネイティブコードのexeにしたら実行速度はどのくらい変わりますか?
やってることが同じなら原理的に変わらない
>>73 俺も仕方無いので、最後尾に入れてから挿入したいところ以降のコンポーネントを全部
移動させたりしてる。こんなはず無いよね。
非同期アクセスに対応したListやDictionaryクラスは 用意されていないでしょうか?
>>79 たぶんないから SyncRoot を取得して lock
81 :
73 :2008/12/20(土) 11:32:02
>>78 あああ〜、その通りです。
ドラッグするのですね。
ツールボックスでクリックしてカーソルを持って行っても黒線は出ないのですね。
配置済みのボタンを移動させても黒線が出ますね。
実際にやりたいのは、配置各種設定済のパネルを移動させたいのですが、それだと
なぜかどこへ持っていっても黒線が出なくて困っています。
でも、ボタンで実際の動きが分かったので、パネル側の設定か何かの問題で黒線が
状態になってるかも知れないのでいろいろ試してみます。
ありがとうございました。
散々使ってるメソッドのパラメータを後で増やすと書き換えるのが大変ですが何か対策方法はありますか?
>>82 ・オーバーロード
・引数専用の型を作る(ex. EventArgs)
プログラム初心者で、Windowsでのプログラミングはほぼ初めてです。 とある人が公開してるアプリケーションで、プロジェクト一式も公開されているものがあります。 その中には hoge.csproj hoge.sln hoge.suo hoge.config AssemblyInfo.cs [image]フォルダ と、dllファイルが複数ありました。こちらでそのプログラムがいじれるのかと思っていましたが、 各種csファイルが含まれていないので無理なようでした。 ここに含まれていたdllだけでも使用したいのですが、dllファイルをみれば そのdllファイルの使い方などが分かるものなのでしょうか? どうググれば、その方法がわかるでしょうか? C#の質問ではないとは思いますが、これを機にC#覚えようかと思っています。 よろしければご教授ください。
>>86 そもそも、そのDLLの使用は許可されているの?
普通は人が使う事を想定しているのなら、ソースコードなりドキュメントなりが公開されていると思うのだが
今作っているプロジェクトをコピーしておいて それをベースにした新しいプロジェクトを作りたいとき どうすればいいですか?
>>88 今作っているプロジェクトを丸ごとコピーしてそれをベースして作ればいい
RGBで反対の色を簡単に取得する方法はありますか?
「反対の色」を定義したまえ
白←→黒であります
前にも見たなぁ。定義を出せと言われて例しか出せない奴。 仮に、それが例ではなく定義と言うならこんなコードになるんだぜ? switch(色) { case 黒: return 白; case 白: return 黒; default: throw new ArgumentOutOfRangeException(); }
ワロタ 緑の反対は紫でいいのかね?
反対って color ^ 0xFFFFFF のことか?
>>90 補色のことでしょ。補色って言葉を知らなくてもネガって言えばいいのに。
Color構造体からRGBの各値は取得できるんだから、それらの1の補数から
FromArgb()するだけじゃないのか?
ダイアログ系コントロールに漏れなく付いてくるヘルプボタンを消す裏ワザを教えてください
SetWindowLongPtr
灰色の補色は?
100 :
デフォルトの名無しさん :2008/12/21(日) 15:19:44
こんにちは 今までプログラミングの経験は皆無だったのですが、javarcript→C#と勉強をしています。 ほぼ独学なのですが、いい勉強法がありますでしょうか? 今は例題が載った参考書を買ってサンプルを組み立てつつ理解を深めるという形をとっています。 皆さんのご意見をお願いします。
そういうサンプルを作るような学習は意味ない 自分の作りたいソフトを試行錯誤しながら作るのが一番
サンプルなら改造から始めればいいんじゃないのか
> 自分の作りたいソフトを試行錯誤しながら作るのが一番 そこから始めるとほぼ確実に途中でプログラミング全般を諦める
なんのためにC#を学習するかってことじゃないか
とりあえずはHello worldからだな 一通り出来たらHallo workに行くと・・・
>>87 作者さんのミスだったようです。全ファイル公開していただけました。
お騒がせいたしました。
108 :
87 :2008/12/21(日) 21:24:59
>>107 そうか、作者のミスだったのか。
ライセンス無視して使おうとしてるのかと思ったぜw
WinFormsの使い方詳しく載っているところは?
MSDN
MFCからC#に移ってきたけど めちゃくちゃわかりやすくて感動した
むしろMFCのわかりにくさが異常 全然APIをラップできてないからなw
MS製ライブラリはバランスが悪いよな 激しく低レベルで取扱注意 or 別物なぐらい高級で機能不足の二つ どっちも深い知識がないと使いこなせないw
まあ、バージョン3から使えば大丈夫だよ。
後者に決まってんだろ 頭湧いてるのか
117 :
デフォルトの名無しさん :2008/12/22(月) 17:45:56
.NET = 激しく低レベルで取扱注意 と読み換えたら笑ってしまったw
しかし .NET はむしろそのふたつ共存だよなあという気が… だから糊とか言われるわけで
ContextMenuStripのメニューの並び順の設定ってどうやるんだっけ? 久しぶりにMSDN見たが読みにくすぎで笑った
(´・ω・`)しらんがな
C++からC#に移行したいんだけど C++の基本的要素(使用可関数やらなにゃら)は引き継げるかな? とりあえずSTLは引き継ぎたい
>>123 C++/CLIでSTL作って、C#でアクセスすることによってその効果を適用することができるの?
CLIはあんましわかんないわなあ・・・
無理 最低限のインターフェイスのみ どーしてもSTL使いたいっていうわがままで迷惑な人向け
便乗だけど、C#ってなんでSTLないの? もちろんそれに代わるすごいのが用意されてるんだよね? C#はじめようかと思ってショックなんだが
System.Collections.Generic+LINQこれ最強
>>116 皮肉ったつもりなんだけど真に受けたの?
>>113 WinFormsとWPFにもあてはまる
Visual C# 2008 Express EditionのIDEの使い方 ちゃんと解説されているサイトってない?
>>124 その記事にC#から使うって書いてあるだろ
>>124 それはC#でSTLを使うんじゃなくて,物好きで迷惑なアホがC++/CLIでSTL/CLRを使った
クラスライブラリを作っちゃった時に,何とかそのライブラリをC#から使う方法
VB6互換用のコントロールもCぁから使えるでしょ。 usingさえすればそれと一緒。
残念ながらそれとは全く違う。 STL/CLR自体はテンプレート使ってるからC++/CLI専用。 VisualC.StlClrはアセンブリをまたいでC++/CLIはもちろんC#などから STL/CLRのオブジェクトにアクセスするための単なるインターフェイス集。
それとは少し違うな。 C#から使う場合はファクトリをC++/CLIで書かなくてはいけない。 ソース見てないけど、.NET互換のGenericじゃなくてtemplateの機能を使ってるんじゃないかな。 C#から使える機能はSTL/CLRの一部だけ。
だが俺の考えは違った
いや合ってる
C++で作ったDLLをC#から使うにはどうするの
ふつうに
C++/CLI extern "C"でネイティブDLL作ってP/Invoke COM
PDFを入出力するフリーのライブラリないですか?
>>141 質問する前に、「pdf .net」で検索してきな
独習C#を買ってやってるんですが、うまくいきません。 テキストでは C:\>csc example.cs でコンパイルしろと書いてるんですが、これではエラーが起こってしまいます。 C:\>csc example.cs.txt だとしっかり??動くんですが、なんでかよくわかりません。 ちなみにプログラムは初めてやります。ご教授おねがいします。
メモ帳か何かで保存するときにファイル形式をテキストファイル(*.txt)にしただろ そんなんでよくプログラミングやろうと思ったね
つ 登録されている拡張子も表示する
そのレベルで独習C#は挫折しそうだなw まずはピュアなC#の本じゃなくてVisual C#の本買ってきて Visual C# Expressをダウンロードして遊んだ方が続くんじゃないかな
テレビとか漫画に影響されて始めましたってレベルだな
何に使うのか全く分からないまま独習C#で文法だけ覚えるのは正直辛いと思う
すみませんでした。 ありがとございました。
つかC#をコマンドラインでコンパイルなんて初めて見た。 最初からIDEで何か問題あるか?今時個人でmakefileもないだろう
あのねぇ、ちょっと前まではExpressEditionがなくて SharpDevelopとかしかなかったの。 初学者はコマンドラインでコンパイルしたり、サンプルからリソースエディタみたいなのビルドして リソースファイル作ったりとかしてたの(T_T)
c#のプログラムってかんたんにリバースエンジニアリングされちゃうんでほ?
>>152 ソースコードに戻せるという意味ならそうだよ。
C#ビルダー使ってたからそんなことしてない
別に逆コンパイルされて何の問題が?って感じだなあ 商用なら対策用ソフトが高価だが売ってるし
今はEEがあるじゃん
コメントとかも戻るの? 俺、コメントに顔文字とか使ってるんだけどw
戻ったらコメントじゃねえ
だよね。安心したw
>>159 (・∀・)いや、安心している場合じゃないぞw
C#のプログラムってLinuxでも動く?
wineでおk
久しぶりにPInvokeすると低レベルな所の使いにくさが際立つな。
そーなのか
VC#で作ったプログラムを公開・配布したいときは binフォルダの中のReleaseフォルダの中の.exeファイルを配布すればいいのですか? objフォルダじゃないですよね・・・?
>binフォルダの中のReleaseフォルダの中の.exeファイルを配布すればいいのですか? それでおk
168 :
デフォルトの名無しさん :2008/12/24(水) 13:53:39
( ´,_ゝ`)プッ
foreachが便利とかって時々聞くんですが forに比べてそんなに便利なんですか?
>>171 例えば配列要素を全て合計するような単純なイテレーションなら
foreach を使ったほうが速い。
foreachにもループ回数カウント機能あればいいのに
その要素を指すインデックスにアクセスしたいんだろ。
>>172 速いっていうのは実行速度が?
それともコーディングが?
IEnumerator自分で実装したことがあればそんな愚論は絶対に吐けないと思うw
配列に対するforeachは最適化されるよ 確かfor (int i = 0; i < array.Length; i++)も同様に最適化されるんだったとおもう
>>173 C# 4.0 だと
public static IEnumerable<dynamic> WithIndex<TSource>(this IEnumerable<TSource> enumerable)
{
int index = 0;
foreach (TSource item in enumerable)
{
yield return new { Index = index, Item = item };
index++;
}
}
みたいなことができるっぽい。
今の段階だと dynamic の部分で適当にクラスを作成するしかないかな?
何かうまい抜け道がある気がするんだが。
ArrayEnumeratorって、 普通にインデクサを使ってアクセスしているのに何故高速かと思ったら最適化されているんだ。
>>180 とんでもなく遅そうだなそれ
わざわざdynamicにする意味がわからない
struct IndexItemPair<TSource> { public int Index { get; } public TSource Item { get; } }
とか返せばいいだろ
foreachにこだわらなくてもこういうのでいいんじゃないの
static void ForEach<TSource>(this IEnumerable<TSource> source, Action<TSource, int> action) {
int index = 0;
foreach (TSource item in source) action(item, index++);
}
>>180 こうでいいじゃん
public static void ForEach<T>
(this IEnumerable<T> e, Action<TSource, int> action)
{
int index = 0;
foreach(var item in e)
{
action(item, index);
index++;
}
}
というか 4.0 だの新しく作るだの考えんでもメソッド形式なら 確か Select, Where 辺りのオーバーロードにあった気がする んだが
foreachってforより遅いだろ
>>184 そういうのを本来の用途から外れて無理に転用するのはお行儀が悪い
items.Select((item, index) => { item.Hoge(index); return null; });
とか書かれてても何がしたいのかわからんでしょ
>>186 その例は使い方悪すぎ。書くならこう
var items =
source
.(略)
.Select((value, index) => new { Index = index, Value = value });
foreach(var item in items) {
item.Value.Hoge(item.Index);
}
Selectは遅延評価で、ForEachは即時評価じゃないとダメだからな
ちなみにポインタ使った最適化になる。 >IEnumerator自分で実装したことがあればそんな愚論は絶対に吐けないと思うw あほう
191 :
デフォルトの名無しさん :2008/12/24(水) 21:53:18
ファイルの書き込み完了前に、そのファイルをコピーしたいと思っています。 その場合、ファイルのサイズが書き込み完了になるまでわからないのですが、 その書き込み完了をどのようにして判定すればよいでしょうか? FileStreamとBinaryReaderを使って成長中のファイル(書き込み完了前のファイル)を読み出したい と思っています。周期的に更新時間をチェックし、更新時間が変わらなくなったら、という判定を 考えていたのですが、もっと適切な方法はあるのでしょうか? 助言をいただけたらと思います。
>>182 ,183
戻り値を IEnumerable<dynamic> にした理由は IEnumerable を返したかったから。
enumerable.WithIndex().Hoge(...) みたいなことがしたい。
まあ
>>182 の言うようにインデックスと実体のペアを返すので十分良いけど。
>>190 配列に対するforeachと,for (int i = 0; i < array.Length//Lengthプロパティを使うのが大事; i++)
の形のforはどちらも最適化されてほとんど同じ速度になる
なんねーよ知ったか乙
変わるとしたらJITコンパイラ側で変わるのかね?CILでは違うコードを吐くはずだから
全く同じじゃないけどよく似たILになるよ 素直にやったらIEnumeratorを操作したりするようなコードになることを考えれば, 差はほとんどないと言っていいと思う
よくねーよ 型付けするだけで数百倍速くなるぞ
>>198 まだ実装もされていない機能についてどうしてそんなことがいえるんだよ
リフレクションで実装するって明言されてるから
匿名型はIDynamicObject実装してdynamicのときはディクショナリとして振る舞うようにするとか …まあ無いだろうな
そんなことするくらいならメソッドの戻り値にvarを認めた方がマシだ
てか
>>187 で何か問題があるんか
そんな素人じゃないんだから100倍遅くなるような設計するわけないだろう 常識的に考えて
型自体を引数として関数に渡す方法ってあるか? private void hoge(TYPE type) { type v=new type(); } みたいにコンストラクタを呼び出したいだけなんだが
void Hoge<T>() where T : new() { T t = new T(); こんなんだっけ
>>204 void Hoge(Type type)
{
object o = Activator.CreateInstance(type);
}
T が既知なら
>>205 の方法で。
whereとか初めて見た どんな意味だ
>>208 へえこんなんあったのか
よくシリアライズ関係のクラスで引数無しのコンストラクタを
渡してコンパイルエラーになるのが謎すぎたんだけどこれのせいかよ
それはまた別だと思うよ
もうC#2.0でいいっていう気がしないでもない ついてはいくけどさ
C#2.0には戻れんわ・・バージョン上がる度に便利になりすぎ
ラムダ式とLinqが便利すぎる
215 :
デフォルトの名無しさん :2008/12/25(木) 09:34:01
>>214 確かに3.5とかすげぇ便利でいいと思うんだよ・・・・
でもな・・・・でもな・・・・
現場にWin2000が現役ではびこってるからつかえねぇええええええええええええ!!!!!
あああああああ
まじめんどくせぇ・・・・
Linq使えば楽なのにとか思うところが多々あるから困る
スタティックリンクとかできないんだっけ?
System.Core.dllのローカルコピーを配れば動くかもしれないけどライセンス違反 MONOからパクってくれば
え?そうなの? なんでボーランドみたいにスタティックリンクライブラりないんだよ
Silverlightではランタイムに含まれてるdllは最小限になってて 必要に応じてローカルコピーで配れということになってるな
220 :
デフォルトの名無しさん :2008/12/25(木) 16:44:48
型に対応するMaxValue等を取得するのに object getTypeMaxVal(Type type) { if (type == typeof(byte)) retun byte.MaxValue; if (type == typeof(short)) return short.MaxValue; if (type == typeof(int)) return int.MaxValue; //省略... } の様なメソッドで求めているのですが、もっと簡単な方法があれば、 ご教授願えれば有難いです。
そのメソッドをどう使うか次第、かな
○ご教示 ×ご教授 日本語からやりなおそうな
223 :
デフォルトの名無しさん :2008/12/25(木) 16:51:53
flexgGrid(グレープシティ)使っていて、グリッド編集時にエラーメッセージ として最大値や最小値の範囲を表示したいのです。 それと、DELキーにより型に対応した初期値も設定したいのです。
>>220 type.GetField("MaxValue").GetValue(null);
遅いので頻繁に必要なら結果はキャッシュしておいてね
225 :
220 :2008/12/25(木) 16:55:30
TypeCodeでテーブルにしといたら?
テーブルにするにしろ,その値を取得する方法をそもそも聞いてるんでしょ
if で分岐するのが速いと思う。測定してないけど。
C#では文字列の連結が演算子のオーバーロード不要だと・・・ 信じられん・・・
文字列の+は逐次2つずつ連結するんじゃなくて最適化されるからな
変数が無いメソッドはstaticにするのが通例なんですか?
引数と他のstaticメンバのみに結果が依存するメソッドはstaticにする 「状態に依存しない」ってこと
インスタンスを扱うのか、クラスを扱うのか
>>222 「ご教授」でもいいんだよ。
2chの誤用厨(ちょうどお前さんのような)が騒いでるのとは違って。
こういう恥ずかしい馬鹿が最近多くて困るまったく。
というかstaticって必要ですか? 意味が無いような気がするんですが
インスタンスの意味がない場合に使うんだよ たとえばMath.Sinはいつどこでどんな状況で使っても引数の値だけで結果が決まるんだから インスタンスがあると逆に不自然 インスタンスっていうのは「状態」を表すんだよ
>>235 Math.Max(x, y)を実行するためにMathのインスタンスが必要と思うか?
>>234 「ご教授」は体系的に教えることを言う
下手クソな自己擁護乙
>>238 それは2chの誤用厨が勝手に言ってるだけだよ。
違うってのならソースある?
いわゆる「一流」の辞書にそんなこと書いてないから。
たかがネットでそこまで言葉の定義に厳密になる理由が無い。はい次
では、必要の無いインスタンスがあると全体的なパフォーマンスが落ちるというイメージでいいのですか?
>>241 パフォーマンスは関係ない。
意味的に変だからやらないだけ。
つーかその変のことはコード書いてる内に自然とわかってくるから
今は深く考えなくてもいいかもしれんよ。
(new System.Math()).Sin(pi);
staticについては現時点で80%ほど理解できたと思います ありがとうございます privateの意味が無いような気がするんですが、これはコーダーがケアレスミスしないようにするためのものなんですか?
テレビ見るときにどうして映るのかいちいち意識してるか? ブラウン管テレビだろうとプラズマハイビジョンテレビだろうと液晶テレビだろうと リモコンのボタン押すだけだろ? そういうことだ
どういうことだよw
つかそこまで初心者なら本一冊読め。いちいち全部聞くな。
publicにして困るようなことが思い浮かばないんです
>>248 それは「作る側」の視点に立ってるから。
使う側の視点に立てばおのずとわかる。
もしTVの裏にピンジャックが100個付いてたら、どれが映像入力端子で
どれが音声入力端子か見分けるだけでも一苦労するだろ。
外から見えるのは必要最小限の物だけでいいってこと。
ここは答える側が初心者ってオチ?
不要なものが見えちゃうと融通が利かなくなる 最小限のものだけが見えているからこそ ブラウン管テレビもプラズマハイビジョンテレビも同じように扱える なんでもかんでも中身が見えてて触れたら,マイナーチェンジでちょっとだけ仕組みを変えただけで 使ってた人から「せっかく操作方法覚えたのになんで変えるんだよ!」と文句言われることになる
>>239 「一流」の辞書とやらの定義を出してごらんよゴミ君
使う側のためにピンジャックにガム突っ込んどくわけですね!
254 :
デフォルトの名無しさん :2008/12/25(木) 21:02:53
public void Xope(int x,bool i) { if (i) { A[x] = A[x] *A[x]; } else { A[x] = A[x] * A[x] * A[x]; } } これやると、必ずA[x]*A[x]の方も実行されてしまうんですが・・・。
されねえよ。
そりゃiがtrueなんだろう
bool で i とはいかがなものか
258 :
デフォルトの名無しさん :2008/12/25(木) 21:42:17
{ textBox5.Text = i.ToString(); if(i) 確認したらfalseでも実行されてしまうんですが・・・
ストップ実行しろ馬鹿
tr/ト/テ/
261 :
デフォルトの名無しさん :2008/12/25(木) 21:45:44
A[x]=2の時、 A[x]=A[x]*A[x]とは,A[x]=2*2=4ですよね? A[x]=A[x]*A[x]*A[x]とは、A[x]=2*2*2=8ですよね? これがA[x]=4*4*4=64となってるんです
されねえっつってんだろ プログラム全部上げろ
bool = 1; とか?
264 :
デフォルトの名無しさん :2008/12/25(木) 21:55:55
private void button18_Click(object sender, EventArgs e) { NI_Frag = true; Atype(Counts); } private void button19_Click(object sender, EventArgs e) { SAN_Frag = true; Atype(Counts); } }
265 :
デフォルトの名無しさん :2008/12/25(木) 21:57:02
public void Atype(int x) { Cal(x); Dott(Dot); A[x] = F[x] * Dott(Dot); if (NI_Frag || SAN_Frag) //&&:論理積AND { Xope(Counts,NI_Frag); } } public void Xope(int x,bool i) { textBox5.Text = i.ToString(); if (i) { A[x] = A[x] *A[x]; } else { textBox6.Text = i.ToString(); A[x] = A[x] * A[x] * A[x]; } }
frag vt., n. 〔米俗〕【軍】破砕性手榴弾(で嫌な上官を暗殺する).
267 :
デフォルトの名無しさん :2008/12/25(木) 22:05:33
コードの順番は265→264の順ですが・・・
if (NI_Frag || SAN_Frag) //&&:論理積AND
NI_Frag = false; が見当たらんよ
他のプログラム(たとえばメモ帳)にキーボード入力をさせるにはどうすればいいですか? たとえばプログラムを起動したらメモ帳にabcと入力される とかってふうにしたいんですが
271 :
デフォルトの名無しさん :2008/12/25(木) 22:09:56
public void Clear() //入力情報消去 { KETA = 0; Dot = 0; NI_Frag = false; SAN_Frag = false; D_Frag = false; Counts++; for (int j = 0; j < KETA; j++) { f[j] = 0; } }
272 :
デフォルトの名無しさん :2008/12/25(木) 22:11:38
private void button14_Click(object sender, EventArgs e) { Frg = 1; //textBox4.Text = "+"; if (SAN_Frag || NI_Frag == false) { Atype(Counts); } Clear(); } 必ずClear()は実行されてるんですが
>>273 ちょっと分かりません。
もう少し詳しく教えてくれませんか。
>>275 ありがとうございます。
メリークリスマス^^
これはひどい 変数名で発狂しそう
レスごとに分けられても誰も見ないが、気持ち悪いしどうでもいいか
なんかいろいろダメだな
LINQってそんなに便利なの?
使う人には
LINQなかったらSelectするのにListをNewしてAddとかしなきゃならんのだぜ Whereもそうだぜ 考えられんよ
284 :
デフォルトの名無しさん :2008/12/25(木) 22:52:42
>>279 一番外で宣言してるので何とか回っているようです・・・
ありえない。C#は再宣言を禁止してる
まずデバッガの使い方を覚えなよ
287 :
デフォルトの名無しさん :2008/12/25(木) 22:56:21
もう一度考えて明日また連絡します。
C#ってすごい便利な言語だなぁと思う C++とかjavaとかイマイチ
>>288 お前に整数型を使えなくする呪いをかけた・・・
解いてほしければC++の文字列連結の苦労を学んで来い・・・
+ で連結できるじゃん?
昔苦労したお メモリまわりと文字列まわりがだるすぎる
292 :
デフォルトの名無しさん :2008/12/25(木) 23:38:25
細かい検索条件を指定出来るページがあります。 そこから検索結果の画面に遷移し、検索結果以外に指定した条件を全て検索結果のページに表示したいのです。 そこでキャッシュを使って状態保持を行ったのですが、上司にリソース使うからあまり使うなと言われました。 キャッシュ以外に何かいい手段ありませんか?
なんのことやらさっぱり。 ファイルにでも書き出せば?
294 :
デフォルトの名無しさん :2008/12/26(金) 00:14:20
ページを挟んで状態を保持するのにはキャッシュ以外に有効な方法はありますか?ということです
もしかして、ASP.NETの話か? ならスレ違い。HTTPの勉強でもしとけ
そんなところにキャッシュ使うアホがあるかよ リソースとかのレベルの問題じゃねー
自分以外に誰も見向きもしないようなDLLを作る意味はあるの?
ASP.NETってなんですか? どんだけ複雑なんですか・・・
>>239 「一流」の辞書には誤用厨なんてことも書いてありませんが
301 :
デフォルトの名無しさん :2008/12/26(金) 14:45:34
C#2.0で質問です。 呼び出し元 フォームA フォームBがあり それぞれがフォームCを呼び出します。 このときフォームCはモードレスで開かれます。(ダイアログではない) それで、フォームCを閉じるときにA,Bの全く違うフォームへ閉じたことを知らせたいのですがどうすればよいでしょうか? コールバック的な感じで処理を行いたいのですが・・・ インターフェイスの実装でできそうですが、それ以外で何かあるでしょうか?
Formのイベントと同じようにDelegateを用意して関数を設定しておけばいいような
普通にCのFormClosedイベントでいいんじゃないのか
304 :
デフォルトの名無しさん :2008/12/26(金) 15:42:45
>>302 でりげーと経由で呼び出すということでしょうか?
ちょっとその方法が思いつかないというかなんというか…
実力不足で申し訳ない
>>303 FormClosedかClosingあたりでA,Bそれぞれに伝えたいんです。
その実装方法ということなのですが・・・なにか読み違えてますか?
WPFでウィンドウをふたつ開こうとしています。 Window1.xaml.cs のなかで、 Window2.window2 window2 = new Window2.window2(); window2.Show(); としたところ、ウィンドウは表示されるのですが、 ウィンドウの中身が真っ白の豆腐になってしまいます。 開発画面では配置したオブジェクトは見えているし、 Window2だけを単独で開けば、きちんと内部が表示されます。 こんな症状につける薬をどなたかご教示いただけないでしょうか。 よろしくお願いします。
AやBはその「全く違うフォーム」を知ってるんでしょ? それならコールバック的な仕組みを使う意味はないよ AやBが普通に「全く違うフォーム」に定義したメソッドを呼べばいい
307 :
306 :2008/12/26(金) 15:51:50
勘違いしてた
AやBが開いたCが閉じられるときにAやBからイベント発生
→Cが受け取ってAやBに定義したメソッドを呼び出す
みたいにすれば
>>305 Window2.window2って一体何なの
ごめんなさい
>>307 の"Cが受け取って"は"呼び出し元のフォームが受け取って"と読み替えてくれ
309 :
デフォルトの名無しさん :2008/12/26(金) 15:58:07
>>307 やっぱ単純に適当なデリゲート作ってイベント発行して
そのイベントでそれぞれが駆動
ってやった方が簡単でわかりやすそうなのでそうやってみます。
C#で私にお茶をいれるプログラムをつくりたんですが、 機械を動かすにはどうすればいいのでしょうか?
Objective Jum
312 :
デフォルトの名無しさん :2008/12/26(金) 16:22:38
>310 そうやっていつかは、攻殻機動隊よろしくアンドロイドが人間を支配するんだな。
>>309 イベント作ってと言うけど,どうやってイベントを紐付けするつもり?
アがイを作って,イの変化をアが受け取りたいときに,
イがアの具体的な型を知らなくても済むようにするための仕組みがイベントであって,
イがアの具体的な型に依存するならイベントを使う意味はない
イにアのインスタンス渡してイがアのメソッド呼べば済むこと
そのへん理解してる?
>>307 二つ目のウィンドウにつけた名前です。
<Window x:Class="Window2.window2"
Title="window2" Height="300" Width="450"
としてます。
>>315 普通にやればできる
できないということは,君が出してきてない部分でなにかおかしいところがあるということ
まずなんでWindow2じゃなくてWindow2.window2クラスなの
>>314 デリゲートという言葉を知っているならそれぐらいは知ってるだろ、常識的に考えて
それにイベントはコールバックができるのだが?
>イベント作ってと言うけど,どうやってイベントを紐付けするつもり?
+=演算子で
お前こそイベントを理解してないじゃないか
318 :
デフォルトの名無しさん :2008/12/26(金) 17:09:04
>>314 まさにおっしゃる通りで
>アがイを作って,イの変化をアが受け取りたいときに,
>イがアの具体的な型を知らなくても済むようにするための仕組みがイベントであって,
これがしたかったのです。
恐らくこの場合これが最適な方法なのではないかと
PS
最初に考えていたのは結局呼び出し元のインターフェイスを意識する必要があるため
無駄な型の意識や実装が生まれるものでした。
>>316 コメントありがとうございます。
おっしゃるとおりかなと思います。
まずなんでということですが、そこにアプリケーション名を入れていて、質問のために便宜的にWindow2としてみました。
いやだからAが作ったCのイベントをどうやってBが受け取るのかが問題なんだろ Cのインスタンスを管理するクラスを作ってそれぞれに渡すとかしないといけないと思うんだが
ところで 1) Cを閉じたら、存在する全てのA,Bへ通知したい 2) Cを閉じたら、ただ一つの呼び出し元=親へ通知したい どっちかで全然違う気がする。 悩んでるってことは1なんかな? そうするとただインターフェースを使うってだけじゃなくて 親群を登録しておいて通知するためのクラスを使うとかみたいな仕組みが要るような
後者は考えるまでも無いから前者だけ A, Bに同一のCのインスタンスを渡せばいいだけだから、 A, BのコンストラクタかプロパティでCを受け取れるようにすればいい こんな阿呆なことは考えてないだろうが、 もし、任意に生成したCのインスタンスからA, B両方に通知したいなら、 Cにstaticイベント作って、OnFormClosedから呼べばいい
staticイベントは後片付けしないと確実にメモリリークするから一番避けるべきパターン
C++で newは後片付け(delete)しないと確実に(ry とかいうのか、お前さんは
また宗教戦争が始まりました
staticイベントのメモリリークを避けるためにWPFにWeakEventパターンというのがあるくらいだぞ
327 :
デフォルトの名無しさん :2008/12/26(金) 18:30:40
deleteしすぎるとぬるぽ
SafeDeleteマクロ作ってたなぁw
WPFウィンドウを開いたときに、別のウィンドウを開くには、 xamlのWindowセクションにどう書けばいいですか? 別のウィンドウのxamlファイル名はWindow2.xamlです。
無理。かどうかは知らないけど普通はやらない。コード書く。 Window2のLoadedイベントあたりで開けばいい。
>>330 間違えた
Window2ではなく元のウインドウのLoadedイベントで別のウインドウ(Window2)を開く
.NETのクラスと自分で作ったクラスの見分けがつかなくて気持ち悪い
隣の子と自分で作った子の見分けがつかなくて気持ち悪い
>>330 、331
Formと同様に、元のウィンドウのLoadedイベントに書くんですね。
その場合なんと書けばいいんでしょう?
ファイル名?
ウィンドウ名?
xamlのx:Class名?
Formなら、
Form2 openForm = new Form2();
openForm.ShowDialog();
でいいのですが。
今、チェートを作成しているのですがメッセージボックスで表示される数字にかなりの誤差が 生まれてしまいます。これを出来るだけ近い数じにするにはどうしたら良いのでしょうか?。 decimal mag_x = chart_width / listView1.Items.Count; MessageBox.Show((mag_x * listView1.Items.Count).ToString()+"=="+chart_width.ToString());
336 :
335 :2008/12/26(金) 21:12:33
(decimal)を入れたら上手く行きました。
>>334 x:Class="Window2"なら,
Window2 window2 = new Window2();
window2.Show();
>>337 thanks!
ひとつめのWPFウィンドウ
private void button1_Click(object sender, RoutedEventArgs e)
{
WpfApplication1.Page1 Page2 = new WpfApplication1.Page1();
Page2.Show();
}
ふたつめのWPFウィンドウ
<Page x:Class="WpfApplication1.Page1" xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation " xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml " Title="Page1" Height="300" Width="450" Name="Window2" Background="Transparent">
<Grid>
<Image Margin="0,0,0,0" Name="Image1" Stretch="None" Source="Image1.png" Opacity="100" SnapsToDevicePixels="True" Panel.ZIndex="1" />
<Image HorizontalAlignment="Right" Margin="0,12,38,112" Name="image2" Source="Image2.png" Stretch="Fill" Width="104" Panel.ZIndex="7"/>
<TextBox Background="Transparent" Height="23" Margin="113,95,195,0" Name="TextBox1" VerticalAlignment="Top" Panel.ZIndex="8" />
<TextBox Background="Transparent" Height="15" HorizontalAlignment="Right" Margin="0,103,65,0" Name="TextBox2" VerticalAlignment="Top" Width="51" Panel.ZIndex="10"/>
</Grid>
</Page>
としてます。
ところが、Page2.ShowでShowの定義がないといわれるうえに、ボタンを押しても、ふたつのめのウィンドウが空白になる、というのが現在の困っているところです。
どうぞ助言をお願いします。
多倍長計算ってできますか?
>>338 なんでウインドウを開きたいのにPageなんだ
プロジェクトに新しい項目を追加するときにウィンドウを選べ
>>339 標準では用意されてない
.NetFrameworkとかいう本まったく意味がわかりません。 最後に読む本だということはわかりました。 最初に読む本を教えてください・・・・・
サイタ サイタ サクラガ サイタ
.NETプログラマには必読と言っていいような本だけど、初心者がいきなり読んでも意味が分からなくて当然。
・Visual C# の使い方と一緒に簡単なアプリケーションを作って学ぶなら
マイクロソフト公式解説書 ひと目でわかるMicrosoft Visual C#2008アプリケーション開発入門
http://ec.nikkeibp.co.jp/item/books/A01000.html ・C# だけでいいよって事なら「独習C# 第2版」が良いけど、NET Frameworkについては別にネットか書籍で覚える事になる。
プログラミング未経験(VisualStudioを使った事がない)なら、ひと目で〜を読んでから、独習C#で言語仕様を学ぶといいんじゃないかね。
おれは「ひと目で〜」ちょっと立ち読みしてでたらめっぷりに吹いた記憶があるのだ…
C#上下の1万以上のやつがお勧めだったらどうしようかと思ってました。 ひと目にしますありがとうございました。
・・・・・・・・・・・・・・・
>>340 そうですか
多倍長は自分で作るしかないのか・・・
.NET 4.0で入るよ、多倍長整数。 ただ、出るのは2009年末から2010年初頭だけど。
今後C#はシェア増えそうですか?
今でもモリモリ増えてますよ(^^)
javaとC#だったらどっちが有望?
J#
言語としてはC#の方がだいぶ有望
Javaは停滞している
ジャバマイロードってなんだったっけ? 思い出せないスペルが違うのかな
java7で宣伝されてた拡張ってほとんどが没になりそうなんだっけ
listview.view = Details の時に最後のアイテムを見える範囲に表示するように したいのですが listview.items[listview.items.count-1].selected = trueでは ならないようです。 どのようにしたら上手く行きますでしょうか?。
Javaにもう将来性ないよ。 SUNがひどすぎる。 伸び盛りでMSの天下取れるかってときにWindowsにJava VM入れるなとか言って自爆して、 標準化して盛り上げていこうってときに「仕様をオープンにはしません」とか言って自爆して。 しかも今は、SUNが瀕死だし。 銀行系にSUNの機器多く納品してたからサブプライム問題直撃で。
>>358 ListView.EnsureVisibleかListViewItem.EnsureVisible
Selectedいじる必要は特にない いじってもいいけど
>>360 ありがとうございます。
アイテムの表示を確実にしたら良かったのですね。
362 :
デフォルトの名無しさん :2008/12/27(土) 11:43:32
継承するクラスがデフォルトコンストラクタを確実に持つようにすることってできないですか? abstract class A {} class B : A {} って感じで、リフレクションかActivator.CreateInstanceで確実にクラスBをインスタンス化してAとして使いたいんです Bは実行時にならないと分からなくて、もしアホがBにデフォルトじゃないコンストラクタだけ書くと Activator.CreateInstanceは失敗しますよね。。
別に実行時エラーでいいんじゃない ISerializableでもそうだし
コンパイル時には無理だな Aのコンストラクタで if (this.GetType().GetConstructor(new Type[0]) == null) throw new Exception(); とかするくらいかな 「デフォルトコンストラクタを実装すること」くらいは継承する人に責任持たせていいと思うよ
Visual Studio 2008 expressで質問です。 Buttonとかのコントロールを継承したクラスを作ると、 そのクラスのファイルがデザイナ付きと勘違いされてしまいます。 ソリューションエクスプローラでファイル名をダブルクリックすると エディタではなく、デザイナが起動された上に 「コンポーネントが足りねえ!」みたいな文句を言ってきます。 そうじゃない!ただのクラスだ! と、どこかで設定する方法はないでしょうか?
>>365 発想が逆じゃないのか?
「どこかに正しく動作させるための設定がある」んじゃなくて、
「君が何かおかしなことをやっている」んだろ。
普通はそんなふうにならないから。
そのクラスをソリューションに追加する時に、「ユーザーコントロール」として追加しといて、
その時作成されるパーシャルクラスをほったらかしにしてるとかそんなオチじゃないのかな。
>>366 普通にクラス作ってるよ。
いっぺん、ためしてみて。
ただのクラスに、
スーパークラスとしてButtonを追加するだけで、
ソリューションエクスプローラの動作が代わるから。
ああ、そのことを言ってるのかw だったらその >「コンポーネントが足りねえ!」みたいな文句を言って る画面に何か書いてあるでしょ?よく読んでみ。 あるいは、ソリューションエクスプローラで対象ファイルを右クリック
>>368 いや、デザイナを起動したいわけじゃないんだ。
作っているのは、あくまで、完全手書きのクラスだから、
ソリューションエクスプローラでダブルクリックしたら、
今まで通りにエディタで開いてほしいんだ。
だけど、スーパークラスに、Buttonとかを指定するだけで、
ソリューションエクスプローラが勝手にに「デザイナありだ!」と
判断しちゃって、ダブルクリック時にデザイナを起動してしまう。
これをストップしたいのです。
ソリューションエクスプローラでファイルを右クリックして ファイルを開くアプリケーションの選択 を選んで CSharpエディタ に変えれば? 他のも全部ダブルクリックするとコードが開くようになっちゃうけど,普通その方が便利でしょ
>>370 ありがとう!
デザイナを使う方が圧倒的に少ないから、
この方が便利だ。
この設定で使っていくことにします。
372 :
362 :2008/12/27(土) 13:12:00
>>362 Activatorじゃないとダメなのかな?
public static T CreateInstance<T>() where T : A, new()
{
return new T();
}
これでA継承、デフォルトコンストラクタをコンパイル段階で検査できるけど。
それも実はActivatorだったりする
それ呼び出すときにTの型は分かってるんだから
Bにデフォルトコンストラクタがあろうとなかろうと問題ないわけで
>>362 みたいなことにはならない
375 :
373 :2008/12/27(土) 15:46:20
>継承するクラスがデフォルトコンストラクタを確実に持つようにすることってできないですか? とりあえず、これに主眼を置いてみた。 >それも実はActivatorだったりする これは初めて知った!勝手に ジェネリクス>Activator みたいな実行速度的ヒエラルキーを作っていたよ。勉強になったありがとう。
>>340 アドバイス感謝します。
結局、どこに問題があるのかわからないのですが、プロジェクトをぜんぶ作り直しました。
コードじたいは、ほとんどそのままで動いたので、コードにミスがあったのか(その可能性もある)、それともそれ以外のファイル名などの整合性の問題なのか釈然とはしませんが、作り直すきっかけはウィンドウにするというところにありました。
作り直して、ファイル名などもきれいに修正できました。
ありがとうございました。
>>375 ジェネリクス>Activatorなのはその通りだろ
ただコンストラクタはジェネリクスしようがないからActivatorになってるだけで
>>371 [System.ComponentModel.DesignerCategory("")]
とかボタン継承したクラスにつけてみ
>>374 の
>それ呼び出すときにTの型は分かってるんだから
>Bにデフォルトコンストラクタがあろうとなかろうと問題ないわけで
のこれが理解できないんだけどどういう意味?
373のコードはnewの制約してるじゃん。
Bクラスを定義するだけならそのTに合致してなきゃならない理由がない その制約はインスタンスを作る側にしか意味がない
>>381 レスありがと。
ああAの派生クラス(を書く人)にデフォルトコンストラクタを強制する
仕組みにはなってないってことを
>>374 は言いたかった訳ねなるほど。
そう、そのメソッド呼ばないとチェックにならんのよ。 しかも静的にその対象クラス(派生クラス)を参照しないとできないのよ。 意味ないでしょ?
>>379 おお!これぞ、パーフェクトな解決法です。
ありがとう!!
//TSelfには自分自身を設定すること class A<TSelf> where TSelf : A, new() {} class B : A<B>{} まあこんな感じになるんじゃないか
ちゃうわ //TSelfには自分自身を設定すること class A<TSelf> where TSelf : A<TSelf>, new() {} class B : A<B>{} こうか
それさ、基底クラスがひとつにならないから多分駄目だろ
>>387 何言ってるかよく分からんが基底クラスは一つだぞ
ただTSelfに自分自身を設定することを強制する方法にはなってないな
基底クラスの実体がA<B>とかA<B2>とかばらばらになるってこと。 多分目的に合わないと思うんだけど。 さらにジェネリックじゃない基底を作ることはできるけど そうするとそっち継承することもできちゃうので結局意味ないし。 あれ?なんかデジャヴ…
class A {} class C<TSelf> : A where TSelf : C<TSelf>, new() {} こうだな C<TSelf>の基底にAがいないと扱いに困る
まあ実用上はそうなるな ジェネリクスの共変反変がサポートされればそのままかけるんだけども
>>389 > さらにジェネリックじゃない基底を作ることはできるけど
> そうするとそっち継承することもできちゃうので結局意味ないし。
class A {
internal A() {
}
}
class C<TSelf> : A where TSelf : C<TSelf>, new() {
protected C() {
}
}
で外部アセンブリでのAからの直接派生を禁止できたりする
いやそれでいいのか? まあ自アセンブリ内からしかAを使わん前提ならいいけど。
本人無しで話進めすぎだろw
基底は別にinterfaceでもよくないか? interface IA{} class A<TSelf> : IA where TSelf : A<TSelf>, new(){}
>>392 そもそも、Cから派生できるので意味がない
class C<TSelf> where TSelf : C<TSelf>, new() { }
class C1 : C<C1> { }
class C2 : C<C1> { C2(){} } // C2 は new() 制約を満たしていないがエラーにならない
お前ら馬鹿だな。 A の派生クラスがデフォルトコンストラクタを持たないときに コンパイルエラーになるようなコンパイラを作ればいいんだよ。
ここはC#スレですので独自言語の話はご遠慮願います
400 :
362 :2008/12/28(日) 08:59:04
ども。 Aはプラグインがもつ属性クラスに渡すローカライズ情報源のひな型にするつもりだったんです。 属性が持ってる文字列をローカライズ可能にしたいなって思ったことから始まりました。 (なんか初心者なんで手当たり次第にやってますけど、こんなんでいいのかなんて思いますが。) ------------ // プラグイン作者のコード [HogeAttribute( typeof( B ) )] public class HagePlugin : INantoka {...} class B : A { public override string Author{ get{...} } public override string Description{ get{...} } ... } ------------ 実行時にというかAssemblyをロードして型からAttributeを取得したたときに、 Bから実行環境のCultreにあった文字情報を持ってこさせる予定だったんで、 Bがデフォルトコンストラクタをもってないときは「作者名 : バーカバーカ」と表示することを検討中です
401 :
デフォルトの名無しさん :2008/12/28(日) 09:45:01
Form上でキーが押されたときはイベントで処理できるとして、Form以外の場所でキーが押されたことを感知するにはどうすればいいですか?
ASP.NETってなんですか?
デザイナで10個のpanel0〜panel9を置いて、配列hyouji[10]の要素が1か0かで それぞれを表示・非表示したいと思ってます。 1個ずつなら if (hyouji[0] == 1){ panel0.visible = True; } でできるのですが、for文を使ってpanel0〜panel9を表現する方法が分かりません。 よろしくお願いします。
Panelの配列も作っとく
>>406 そもそも本当にhyoujiなんて配列が必要かどうか、冷静に再考した方がいいんじゃないのか。
>>407 うっ、検索するとそれらしいことも書いてあったのですが、デザイナで作った物を配列に
する方法が分かりませんでした。
強引に
for (i = 0; i<10; i++){
if (hyouji[i] == 1){
****.visible = True;
}
}
の****部分を文字列変数とかにしてできないかなと思ったのですが、うまく行きませんでした。
やっぱり、無理でしょうか。
あと、デザイナで作ってからあとで配列にするというのはどうすればいいでしょう?
>>408 ユーザーが画面構成を設定できるようにしたいのですが、その設定情報を配列にして
記憶させようとしています。プログラムを短くしたいと言うのも有りますが、、、
411 :
406 :2008/12/28(日) 16:51:46
>>410 これの後半の
「すでに配置されているコントロールをリフレクションで検索する」
でできるのかな。
でも、私にはちょっと難しいかも。頑張ってみます。
皆さん、有難うございました。
ちげえええええ 2番目の >上記の例では、Visual Studioのフォームのデザインが使えないという欠点があります。 >次にフォームのデザインでフォームにボタンコントロールが5つ(Button1〜5)追加されており、それらを配列として扱う例を示します。 見れ。 新しく配列作って、デザイナで作った奴を代入するだけだ。 簡単だろ。
Dictionary<Panel,bool> dic = new Dictionary<Panel,bool>() { { panel0, true }, { panel1, true }, { panel2, true }, : }; foreach (KeyValuePair<Panel,bool> item in dic) { item.Key.Visible = item.Value; } 遅レスですが、こんなんで。
414 :
406 :2008/12/28(日) 17:20:40
>>412 あ、代入するだけなのね。分かりました。
>>413 何となく分かりました。
重ねて、どうもです。(みんな優しい。つД`))
つーか、普通に動的に配置するんじゃ何が不満なの
複数個あるメニューアイテムをラジオボタンのように常に一つだけがチェックされている状態にするにはどうするのがいいのでしょうか? スマートな方法が思いつきませんでした
>>416 そんな悩む問題か?
・一つ前の「チェックされたメニューアイテム」が特定できる場合は、そいつのチェックをクリア
・そうでない場合はそのグループに属する全部のメニューアイテムのチェックをクリア
してからクリックされたのをチェックするだけだと思うんだけど
>>416 MSDNのMenuItem.RadioCheckのところにサンプルコードある。
>>417 高級言語だと自分で考えた方法がなんでも泥臭いと思ってしまいます
>>418 デザイナに表示されないプロパティであったんですか
調べてみます
ありがとうございました
( ^ω^) … (⊃⊂) (^ω^ )⊃ アウアウ!! ⊂ミ⊃ ) / ヽ
コピペ君って馬鹿だな、まで読んだ。
>>420 >高級言語だと自分で考えた方法がなんでも泥臭いと思ってしまいます
言語とライブラリを区別しような
*MenuStrip
Drag&Dropでコピー中のファイルにアクセスするにはどうすればいいんだろう? FileStreamでFileAccess.ReadとFileShare.ReadWriteに設定しても 例外が発生してしまう・・・ そもそもDrag&Drop中のファイルのアクセスは無理なのかな?
お馬鹿な確認だけど、アクセスするファイルはコピー元だよね?
コピーではなく移動中なのではないかと
>427, 428 レスThanks. あれ?コピー元って質問がくるってことはコピー先は当然、アクセスは 不可能ってこと? 1GB程度のファイルを、D&DかCtrl+Vであるフォルダにコピー(もしくは移動)する ことを考えてる。そのファイルをコピー中でもアクセスしたい。 無理なのかな・・・?
430 :
426 :2008/12/28(日) 22:06:15
連投すいません。 コピー先のファイルにアクセスです。
コピー先は、コピーが完了するまで(ファイルシステム的には)存在しないのだから むしろ当たり前じゃないんだろうか。
え??
433 :
426 :2008/12/28(日) 22:42:14
>>431 > コピー先は、コピーが完了するまで(ファイルシステム的には)存在しないのだから
> むしろ当たり前じゃないんだろうか。
Explorer上ではファイルアイコンが見えているから一応ファイルシステムには
登録されたものと思っていたよ。違うのかな。
そもそも、今回のようなことを行う場合、皆さんはどうやって
実現しているのだろう。
>あれ?コピー元って質問がくるってことはコピー先は当然、アクセスは不可能ってこと? これはひどい
できるかできないかは解らないけど、物理的に考えて書き込みが終わってない所に アクセスしたら例外は起こると思う。D&Dはとりあえず置いといて 普通にファイルコピーをしつつコピー先のデータにアクセスできるか試してみては? できないのであれば、自前でコピー処理を書いて(一定量メモリに読んで別ファイルに出力) メモリ上に読んだデータを利用するのが楽かと。ランダムアクセスでなければ。
ファイルコピーの実装次第じゃね?
みんなありがとう。不適切な質問の仕方をしていたならごめんでした。 とりあえず、435さんのいうように、D&Dコピーに固執せず まずは色々やってみます。
エクスプローラのコピーの動作では書き込み完了するまで排他ロックしてるんだろう。
C#にグローバル変数は存在しなひ
>>440 staticなpublic変数 に置換してください
>>439 多分王道だよ。MSDNでもこんな感じだった。
class Form1 : Form
{
private static Form1 _form1Instance = new Form1();
public static Form1 Form1Instance { get { return Form1._form1Instance; } }
private Form1(){}
}
こうしておけばForm1を他で勝手に作られないし、nullを代入されることもないよ。
>>443 せっかく解答していただいているのに説明不足で済みません
staticなpublic変数をtext1としています
それでForm1からForm2をモーダルで表示するんですが
Form2で設定した値をDialogResultで取得するときに
text1でやり取りするというのは邪道でしょうか?
static class data
{
static public string text1;
}
public Form1 {
Form2 _Form2 = new Form2();
_Form2.ShowDialog( );
if ( _Form2.DialogResult == DialogResult.OK )
Form1.txtbox.Text = text1;
}
// Form2 //
private void btnOK_Click( object sender, EventArgs e )
{
text1 = txtID.Text;
Form2.Close( );
Form2.Dispose( );
}
説明が下手くそで分かり難いと思いますがよろしくお願いします
趣味で書いたソースで人に見せるものじゃないなら、別にいいんじゃないか
お前が王道を行くなら俺は覇道を行く
王道 安易な方法。近道。「学問に―無し」
邪道とか気にするならやるな。 邪道だとわかっててやるなら構わない。
自分もForm間のデータの取り扱いをどうすればいいか知りたいです 前に質問したときは親切な人がプロパティのクラスを作って PropertyChangedを使ってバインドすればいいって教えてくれたけど プロパティの数が多いときなんかはどうも・・・
ものにもよるけど、MVCとか。
textbox.Textプロパティをpublicにしちゃう
Textプロパティだけをパブリックにする方法ってあるんですか? コントロールをパブリックにしてしまうとVB厨と言われて煽られるような気がします
うん 煽るよ
簡単にリバースできる言語で細かい事を気にする必要があるのだろうか?
年末年始だからって酒の飲みすぎだよ
リバースはトイレでね
ド初心者ですが、コントロールをパブリックにするのはいけないのですか? いけないにしても、textboxのtextプロパティを他のフォームで知るにはこれが一番簡単ですよね? て言うか、これしか知らないorz
入門書を読んでからにしたほうがいい
privateなコントロールってあるのか?
Control型のフィールドをパブリックにするって話だろ 当然プライベートにもできる
>>457 コントロールに限らず、公開範囲はケースバイケースだと思うよ。
・メリット
プロパティの分、コードを書かなくて済む
・デメリット
バグが発生した時、調べる範囲が格段に広くなる。
変更する時、どこで使われている箇所を調べる範囲が格段に広くなる。
特にpublicだと外部から使用される事を容認しているので最新の注意が必要。
そのクラスを使う側にしてみたら、公開されているので自由に使って良い、
と判断される。
メリット、デメリットが解っているならpublicもありと思うよ。
ただ、publicを安易に進めるベテランは居ないと思う。
仮にいるなら俺はその人を疑う。
>>444 これじゃいけないのかな?
public class Form1 : Form
{
private TextBox textbox = new TextBox();
// まぁ名前は適当で。
public void SetTextBoxString()
{
Form2 _Form2 = new Form2();
if ( _Form2.ShowDialog( ) == DialogResult.OK )
{
this.textbox.Text = _Form2.ResultText;
}
}
}
public class Form2 : Form
{
public string ResultText { get; set; }
private void btnOK_Click( object sender, EventArgs e )
{
this.ResultText = txtID.Text;
Form2.Close( );
Form2.Dispose( );
}
}
Dispose 済みじゃね?
464 :
462 :2008/12/29(月) 16:52:54
465 :
462 :2008/12/29(月) 17:41:55
public class Form1 : Form { private TextBox textbox = new TextBox(); // まぁ名前は適当で。 public void SetTextBoxString() { Form2 _Form2 = new Form2(); _Form2.CallDialog( delegate( string resultText ) { this.textbox.Text = resultText; }); } }
466 :
462 :2008/12/29(月) 17:42:40
続き。 public class Form2 : Form { private Action<string> OnOkFunc = null; public void CallDialog( Action<string> Func ) { this.OnOkFunc = Func; this.ShowDialog(); } private void btnOK_Click( object sender, EventArgs e ) { if ( this.OnOkFunc != null ) { this.OnOkFunc( txtID.Text ); this.OnOkFunc = null; } this.Close( ); this.Dispose( ); } } ‥自分でもムキになりやすいタイプだと思う。
コマンドラインランチャー作ってるんだけど パス先のファイル(アプリケーション)を開く関数ってない? 〇〇〇{@"c:\Program Files\Jane Style\jane2ch.exe"); こんな感じで
C#的に関数と言うとP/Invokeで使うもの System.Diagnostics名前空間のProcessクラス
C#的には高階関数の引数に渡すデリゲートも関数と呼ぶらしいよ
470 :
467 :2008/12/29(月) 18:30:24
thx こんな感じかな Process.Start(@"c:\Program Files\Jane Style\jane2ch.exe"); あともう一つ quoted stringをString型変数に適用したいときは ex) String i = "c:\\Program Files\\Jane Style\\jane2ch.exe"; textBox1.Text = @i; こんな風にできる?
> quoted stringをString型変数に適用したいときは 冷静に考えろ
String s1 = "c:\\Program Files\\Jane Style\\jane2ch.exe"; String s2 = @"c:\Program Files\Jane Style\jane2ch.exe"; if(s1!=s2) { MessageBox.Show("工エエェェ(´д`)ェェエエ工"); }
いかん ちょっと首吊ってくるwww
左にリストボックスかツリービューがあって選択すると右のコントロールのレイアウトが変わるタイプの 設定ダイアログをGUIエディタで作りたいんですがどういう風にやるのが一般的ですかね?
ユーザーコントロールかな
ありがと、それで作ってみる
右にPanelを同じ位置に置いといて 左の選択で該当PanelをBringToFrontしてもできるな
ツリービューで選ばせるくらいなのにそんな拡張性のない方法はちょっと…
で、コントロールのアクセスをパブリックにしない場合はどういう方法がいいの?
ユーザーコントロールに適切なプロパティを定義すればいいだけだろ
質問です。 private struct MyPoint { int X; } List<MyPoint> P = new List<MyPoint>(100); 等として構造体(もしくはクラス)の配列Pを作成したときに、 そのメンバXを配列として簡単に取り出す方法はありますでしょうか? (P[].Xではなくてint型の配列X[]を取り出したい) for文で回せば可能なことは分かるのですが、実際には 構造体(クラス)のメンバがかなり多く、配列の要素数も大きいため、 毎回そうするのは非効率な気がして・・・ 申し訳ありませんが、よろしくお願いします。
ちょっとスレチなんだけど、昔「VisualC++はVisualC++で作られています」 っていうメッセージがあったんだけど、あれどういう意味? 開発途中のVC++でVC++のシステムを組んだの? あれ意味が分からなくて頭痛かった
>>481 forで回すのが一番実行効率の良い方法
実行効率は若干落ちるけどコーディング効率の良い方法としては
int[] X = P.Select(p => p.X).ToArray();
>>481 言ってる意味がわかりません。
存在しない、欲しい、でも作りたくない?
作られずに存在するのは神だけじゃないのか?
>>483 回答ありがとうございます。
とりあえずforで回す方法で実装してみます。
配列の要素数が可変かつ10000以上になるのでちょっと心配ですが・・・
>>481 class MyPointXList //: IList<int>
{
private List<MyPoint> innerList;
//中略
public int this[int index]{get{return innerList[index].X;}}
}
487 :
481 :2008/12/29(月) 22:25:37
>>484 分かり辛くてすいません。483さんの
int[] X = P.Select(p => p.X).ToArray();
のような書き方を探していました。
残念ながら実行効率の面で不利みたいですが。。
Cで書いたらよかんべ
つうかコーディングのシンプルさとパフォーマンスとどっちを重視してんのよ? まあパフォーマンスったってコピーは避けられんが(コレクションのラッパーではだめな場合)
最速を求めるなら, Emit系APIでList<T>._itemsを直接取得するメソッドを生成 それを使って取得した配列の要素にポインタでアクセス かな
491 :
481 :2008/12/29(月) 23:02:22
>>486 回答ありがとうございます。
おそらく私がやりたいことそのものズバリだと思うのですが、
勉強不足で意味が理解できません・・・
IList・・・インターフェイス?抽象クラス?
ちょっと詳しく調べてみます。ありがとうございました。
ほんとかよww
最適化されるから、あんまり変なことしないほうがいい
List<T>だから配列のようには最適化されないよ インデクサの呼び出しが入るしコピーもされる 可能なら配列で持つようにした方が速い
>>491 おいおい
んじゃ別に配列じゃなくてもラッパーでよかったってことかな?
496 :
481 :2008/12/29(月) 23:40:31
Emit系API・・?ラッパー・・?分からなさすぎて泣けてきたorz.... 簡単に調べただけだと何のことだかサッパリ。 とりあえず、やりたかったことは↓のような感じです。 色々教えて頂いたのに理解できなくてすいません。勉強して出直します。 class MyClass { int X; int Y; int Z ... } //こんなクラスがあって List<MyClass> P = new List<MyClass>(); //newして P.add(); P.add(); P.add();… //動的に要素が追加されて Method(X[]); //1秒おきに別のメソッドにint型の配列X[]を渡して P.add(); P.add();… //動的に要素が追加されて Method(Y[]); //2秒おきに別のメソッドにint型の配列Y[]を渡して P.add(); P.add();… //動的に要素が追加されて(以下繰り返し)
>>490 は冗談だから忘れてくれ
ラッパーでできそうな気はするけど
>>481 の意味がわからないレベルならまだ気にしなくていいと思う
そんなに非常識な大きさでなければ1秒おきなら毎回配列にコピーしても大丈夫だろ
1秒以上かかったらまずいということでは……
演算処理した大量のデータ(txtファイルで数MBくらい)をtxtファイルにWriteLine();で書き込むプログラムを作っているのですが 本来書き込まれているべきの最後の数行分が何故か書き込まれていません。 データの途中で切れている感じです(7.550とかが7.5だけ出てくるみたいな) どなたか何故このような現象が起きるのかご存知ないでしょうか。VC#2008EEです
それだけでわかるわけねーだろこのタコ。もっと詳しく(ry ・・・って言いたいところだがそれ Close し忘れの典型的症状。 FileStream は using してるか?
>>496 X, Y, Z, …の関係性がいまいち分からんが、
1. 複数のデータ項目X, Y, Z, …(このtupleをMyClassと定義)があって、
2. 追加はtupleで同期的に(i.e. MyClass単位)行うが、
3. 利用は項目ごとに個別のデータ群として扱う
ということか。であれば、最初からデータを項目ごとに分けて保持して置けばいいんじゃないか
class MyClasses : IList<MyClass> {
private List<int> _X = new List<int>();
:
public MyClass this[int index] {
get { return new MyClass(_X[index], …); }
set { … } // NotSupportedException 投げるのも可
}
public void Add(MyClass data) {
_X.Add(data.X);
:
}
// IList<T> の残りも実装
public IList<int> X { get { return _X.AsReadOnly(); } } // 必要に応じて下記を利用
// public int[] X { get { return _X.ToArray(); } }
}
>>501 仰る通り、StreamWriterのCloseがされてないみたいでした!ありがとうございました!
Closeしないと何で数行だけ書き込みがバグるのか不思議です
>503 Closeよりも問題なのはFlushだよ。 内部でバッファがあってキャッシュされてるのでその分がFlushが呼ばれないと書き込まれない。 CloseするとFlushされてから閉じられるので書き込まれる。 とりあえずusingにしておけ。
C#で初期化式を複数書きたいときは、どうすればいいのでしょうか? for( int a = 0, double d = 0; a < 10; a++ ) こんな感じのを書きたい。 でも、エラーになる。 for( int a = 0, b = 10; a < 10; a++ ) 両方intなら、これで文句を言われないのですが。
できないとおもう 両方intでも普通そんなことしないよね おとなしくループの外でやりましょう
文法上forのfor-initalizerにはtypeを一回書いたらもう書けない。諦めれ。
>>506 やっぱり無理ですか。
変数のスコープがループ内のみのときは
C99やC++では、割とよく使っていたのですが。
>>508 そんなにスコープを気にするなら
{
double d = 0;
for (int a = 0; a < 10; a++)
{
}
}
みたいにすれば。
でもそんな細かいことは普通気にしなくて良い。
まあ、そんな滅多に必要にならないし、
たまにならスコープ気にしないか、
>>509 かで十分な気がする。
そもそもC++でもC99でも
>>505 の前者の書き方(複数の型)はできないぞ。どこの拡張だそれ、VCでも無理だし。
it's D
Dでも無理w
>>509 手抜きのときはたまにそれやる
ただし、そういうことする場合は、普通に考えればメソッド抽出できるし、
VSならリファクタリングで一発なので、まじで手抜きのときしかやらないけど
515 :
デフォルトの名無しさん :2008/12/31(水) 11:01:12
contextmenustripで「終了(X) CTRL+Q」の"CTRL+Q"みたいにショートカットを当てたいときはどうすればいいですか?
>>515 デザイン時の話なら、その項目でプロパティ出してShortcutkeysとShortcutKeyDisplayStringと
ShowShortcutKeysを設定。
stringに対するforeachは遅いからfor使えというパフォーマンスガイドラインが昔はあったと思うけど, 今は改善されてるの?
バイナリでのファイルの書き出しができません ググって探したのですが BinaryWriter w = new BinaryWriter(File.OpenWrite("dd.dat")); w.Write(読み込んだバイト配列); w.Close(); としましたが、テキストで保存されているようで notepad等で文字がそのまま読めます。 どのようにすればいいのでしょうか?
その「読み込んだバイト配列」には何が入ってるの? 入ってるバイトデータがそのまま出てるだけだと思うが。
byte[] 読み込んだバイト配列 = new byte[ファイルの長さ]; reader.Read(読み込んだバイト配列, 0, 読み込んだバイト配列.Length); 読み込んでるのは数字や日本語文章のテキストファイルです デバックでとめてみると配列には整数が入っています。
おーけー、バイナリエディタでdd.datを開けてみような
522 :
デフォルトの名無しさん :2008/12/31(水) 15:02:08
>>516 うまくいきました。ありがとうございます
ワロス
何がおかしい
バイナリの意味が分かってないみたいだな テキストエディタで開けなくしたいだけならDeflateStreamでも使って圧縮したら
理解できていないようです w.Write((int)123456789); だとわからない文字になるのですが w.write("123456789"); だと空白文字の後123456789となります あるソフトでテキスト形式(主に数字)からバイナリに 変換するのがあるのですが ファイルも小さくなりわからない文字 になるのですが圧縮してるということですか?
どうしてるかはそのソフト次第 圧縮かもしれんしキー固定の暗号化かもしれんしBASE64かもしれん
(;゚Д゚);゚Д゚);゚Д゚)ジェットストリームポカーン
BASE64だと大きくなるし、シーザー暗号のたぐいだとサイズは変わらない。ということで、圧縮かな。
530 :
デフォルトの名無しさん :2008/12/31(水) 16:55:18
XPと.NetFrameWork3.5で、 Accessのデータベースファイルdata.mdbを 実行ファイルと一緒に配布して使いたいと思っています。 OleDbConnectionを使用して OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb"); といった具合で使用しているのですが、 インストール先のPCには.NetFrameWork3.5がインストール されていればOKなのでしょうか? それともAccessのソフトもしくは その他のファイル(Microsoft.Jet.OLEDB.4.0?)が 必要なのでしょうか? もし別ファイル必要ならば、 別のやり方を使って.NetFrameWork3.5のみで 動作させることはできますか? よろしくお願いします。
>>530 OLEDBプロバイダが必要。って、最新のMDACでは含まれてないんだっけか。
デシマルってなんすか?!w intとちがうんですかwwww
百人一首の中のの坊さんの名前じゃないの?
日本の船の名前とか?
そういやデシマルよりdoubleの方がはるかに表せる数の範囲は多いんだよな
すまん、教えてくれ。 ↓だとコンパイルエラーになる。配列をコンストラクタで初期化したい場合、どうすりゃいいの? AutoResetEvent[] diposeWait = new AutoResetEvent[3] { AutoResetEvent(false), AutoResetEvent(false), AutoResetEvent(false) };
オブジェクトを作るときは必ずnew コンストラクタ呼び出しは必ずnew
>>537 自己解決しました。ありがとうございます。
でも↓はいまいち納得出来ないかも・・
AutoResetEvent[] diposeWait = new [] { new AutoResetEvent(false), new AutoResetEvent(false), new AutoResetEvent(false) };
ん?何が納得できないの?
ちなみにコピーコンストラクタとメモリの解放
そんなC++の呪縛は忘れて良い
忘れた頃に Null Pointer Assignment...
NumericUpDownコントロールでMinimum = 1としているのにValue = 0が可能なのは何故なんですか?
>>535 正負の無限大まで扱えるよ!というのは置いといて、±1.7e308とか大きすぎてもう・・
有効桁数を超えると扱い難いから滅多に使わんけどね。
有効桁数は10進数だと
float - 約7桁
double - 約15桁
decimal - 約28桁
for文で表現できないwhile文は存在する?
while (true)
for(;;) とどう違うわけ?
for(; <expr> ;) <sentense> は while(<expr>) <sentense> と等価だから そんなのはあり得ない。
do loop while(...)
それは do 文
string += intが出来るのっておかしくない? C#的に
>>552 なんで? C# 的には演算子のオーバーロードが行えるから
string operator +(string s, int i) が定義してあればその式は普通じゃね?
ことstringを含む加算演算子に関しては言語仕様に明確に規定されてる
operator +(string,string)と stringへの暗黙の変換が定義されてるんだろ
>>555 operator +(string,string)もstringへの暗黙の変換も定義されてないよ
string s; int i; で、s += iは、おそらくs = string.Comcat((object)s, (object)i);になっているのだと思う。
通常のクラスやstructにはstringへの暗黙の変換が定義されてるけど 実際に定義を書いて[Obsolete("",true)] といった属性をつければstringとの+もコンパイルエラーに出来るぜ
>>558 暗黙の変換なぞ定義されてないってば
Object.ToStringは必ず存在するけど
演算子のオーバーロードが定義されてたらそっちの方が優先されるだけ
暗黙の変換が定義されてるってのは
Hoge hoge = new Hoge();
string huga = hoge;
が成り立つってことだぞ
そういやそうだな なるほどそういう仕組みか
なんでs++は出来ないの?
事故解決しました
>>529 Base64の文字列をデコードしてバイナリファイルで保存するんじゃね?
ちなみに、桜エディタにはuudecodeとbase64デコーダが付いてる。
メーラならその辺のデコーダは一通りそろえてるだろ。
Base64は「数字の羅列」にはほど遠いと想うが
bin hexなら数字が並んでるように見えるんじゃね?
(かつて1度だけbinhexで送られてきてBeckyで自動解読されなかった記憶がある)
自動で圧縮してくれるテキストエディタも昔考えたことがあったが、
ファイルの互換性ないし、圧縮するほど長いテキストは書かないし、NTFSで圧縮サポートしてるから 一瞬で廃案になったけどなw
>535 用途が違うから単純に比べるものじゃない。 浮動小数で誤差が出ようが気にしないならdoubleで 誤差が出たら困るようなものはdecimalを使うんだよ。
別スレッドでフォームの操作してもフォームに反映させずにシミュレートだけして結果を取得するにはどうすればいいの? フォームいじると変化してしまうんだけど
ルワンダ語でもおk
フォームの操作で行われる処理だけを実行すればいいんじゃね?
コントロールを変数代わりに使ってるんじゃね メソッド呼び出しの代わりにボタンのClickイベントを使ってるとか
フォームが持ってる情報を全部まるごとパクって非表示でシミュレートしたい 作ってるときにはそれをGUIで確認できようにしたい(いわゆるデバッグモード?)から処理だけ実行ではなく
考え方が間違ってる それって結局,処理自体にはフォームは必要ないんだろ? それをわざわざフォームに依存させるのは非常に頭悪い
処理がプラグインまかせで見えない
>>569 UIとUIに持たせている情報を分離させ、その内部情報を使用して処理を行わせればいいんじゃね?
UIと内部処理を分離させる方法の一つとして、データバインディングが標準で利用出来る。
バージョンを明記していないから分からないけど、2.0以降(VS 2005以降)と仮定して、
Control(各UIパーツ) --> BindingSource --> DataSet
というような、一般的なデータ連結を行えばよい。
また、フォームが持っている情報というのが何なのか、もう少し詳細に明記した方がよいです。
例えば、テキストボックスに入力した文字列、ラジオボタンやチェックボックスの選択なのか、
または、フォームのサイズ、位置、色のような表示に特化した情報なのか。
この辺が分かるだけでも、回答の幅は広がると思う。
旧VB だと、非表示で Load とかできたからな・・・
そこまでエスパーする必要はないと思う 日本語か、その他われわれと意思疎通可能な言語で質問してこない限りは
>>572 バインドされたデータいじるときもInvokeが必要だぜ
データバインド云々というより、UI とビジネスロジックの分離とか、その辺のレベルからして 理解していないと思われ。
こうすべき、やってはいけないは別として インスタンスformAの箱庭を作るには FormA sim = formA.Copy(); で良いよな?
何そのメソッド・・・
FormA *sim = &formA;
箱庭・・?
キモいな
WndProc で WM_QUERYENDSESSION メッセージを捕捉しようとしているんですが、 フォームが開いているときはちゃんと細くできて、タスクトレイに入れているときは WndProc にメッセージがきません。 WM_QUERYENDSESSION は、フォームが開いているときにだけしか来ないのでしょうか。 タスクトレイに入れているとき ( this.Visible = false; ) はだめですか?
>>582 言ってる意味が分からない。
フォームって「タスクトレイに入れる」なんて芸当できたっけ?
できたとして、その時「フォーム」のインスタンスは存在しているの?
>>583 非表示にしてる、って書いてあるやん・・・
BSODになる例外の処理ってどうやってキャッチするの? WinXP sp3
>582 非表示にしてShowInTaskbarもfalseにするとFormの実体がなくなるようでWndProcは動作しなくなるよ。 Formの実体がなくならないように非表示にすればいいんだよ。細かい手順は忘れた。
そーいえば、再起動とシャットダウンって判別できるのかな? SystemEvents.SessionEnding で、ログオフとシャットダウンは区別できるけど。
ExitWindowsEx()、InitiateSystemShutdown()、InitiateSystemShutdownEx() あたりを フックするしかなさげ。
>>589 どもです。
ExitWindowsEx をフックすればよさそうですが、フックって SetWindowsHookEx を
使うのでよいのでしょうか?
違う。API フック。IAT の関数アドレスを書き換える。すべてのプロセスに対して行う必要があるので、 いずれにせよ SetWindowsHookEx() によるグローバルフックは必要。
WPFでTextBoxを透明にしようとしています。 TextBox Background="Transparent" としましたが、まだ枠が残ります。 枠も消したいのですが、どうしたらよいでしょう。 ご教示いただけないでしょうか。 よろしくお願いします。
593 :
デフォルトの名無しさん :2009/01/02(金) 17:30:02
WPFでTextBoxを透明にしようとしています。 TextBox Background="Transparent" としましたが、まだ枠が残ります。 枠も消したいのですが、どうしたらよいでしょう。 ご教示いただけないでしょうか。 よろしくお願いします。
BorderThickness="0" でどうか。 WPFは専用スレのが早いかも
>>594 Thanks! それでした。できました。
専用スレは初心者を相手にしてくれんのです。
BorderBrush="Transparent" というのもあるんだな。
無理です どうしてもというなら自分で作るかWPF使いましょう
>>596 BorderBrush="Transparent"でもできました。
ありがとうございます。
もうひとつWPFで質問です。
ファイルを引数などから読む場合、
xamlにはなにを書けばよいのでしょう?
バインディングらしい、というのはわかって、
.xaml
Text="{Binding Path=SetText}"
.xaml.cs
using System.IO;
string file = (@"C:\sample.txt");
string SetText = File.ReadAllText(file,Encoding.Default);
としてみましたが、文字を表示することはできませんでした。
よろしくご指導お願いします。
WPF スレ行けよハゲ
専用スレあるのにスレ違いの話題をいつまで続けるつもりだ。
WinFormsスレがあったらC#スレでもVB.NETスレでもWinFormsの話禁止になるの?
そういう仮定の話はよそでやってくれ。 次の方、どーぞー
__ , ‐' ´ ``‐、 / ̄:三} . /,. -─‐- 、. ヽ / ,.=j _,.:_'______ヽ、 .! ./ _,ノ `‐、{ へ '゙⌒ `!~ヽ. ! /{. / `! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ そんなことよりSEXしようぜ! . {.l '⌒ ゙ 6',! / :::::::::::::::/ __ . 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、 . ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ ,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 / / / :::::::::::::::: ; '´ /´\ / r'\ . i ! ::::::::::::::/ 墨 | .!::::::::/ヽ、.._!ヽ. ヽ、 { {:::::::::::;:イ / ‖i:::::::/:::::::::::::/ \ . ヽ ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: /
>>605 できる。アイコンを用意する必要があるけど。
「このような」というのは,その画像のどういうところを指しているのか教えてください
単なるFolderBrowserDialogじゃないの?
>>606-607 すみません
VistaのExplorerで使用されているような
破線(XP Luna)ではなく三角で階層を表示するような
Tree Viewです
VisualStyle依存だからなあ もうWPFで作ってElementHostでよくね
ShowPlusMinus を false にして、オーナードロー。
線の表示非表示はプロパティ1発。 △は、[+][-]画像がVisualStyleで△画像になってるだけだよね、これ。
VSって何ですか?
614 :
605 :2009/01/02(金) 20:18:49
>>613 VS
* スイス・ヴァレー州(Valais)の略称。
* versus(バーサス、ヴァーサス、VS.)
o VS (misono) - misono のソロデビューシングル。
o VS. (雑誌) - 光文社の雑誌。
o Versus (Mr.Children) - Mr.Childrenのアルバム。
o Versus (テレビ局) - コムキャスト傘下のスポーツ専門局。
o Versus (テレビ番組) - FIGHTING TV サムライのテレビ番組。
o VERSUS (テレビ朝日) - テレビ朝日の音楽番組。
o バーサス (パチスロ) - 1998年にアルゼから発売されたパチスロ(4号機)。
o VERSUS (映画) - 北村龍平監督の映画
* ファイナルファンタジー ヴェルサスXIII(Final Fantasy Versus XIII) - スクウェア・エニックスが発売予定のゲームソフト。「ファイナルファンタジーシリーズ」の1つ。* ヴァージン・アトランティック航空のIATA航空会社コード
* トヨタ・WiLL VS
* Visual Studio ⇒ Microsoft Visual Studio
* VSWR(無線工学)の略。
* ヴィダルサスーン(Vidal Sasoon)の略。
* Visual Styleの略。Windowsにおいて、XP以降の視覚スタイルをさす場合が多い。
* VIRGINIA SLIMSの略。
* Microsoft社の統合開発環境VisualStudioの略。
* 2008年の第43号から週刊少年チャンピオン(島崎カオル)で連載中の漫画。
久々にパケロスとか言いたくなった
>>615 ヴィダルサスーン ワロタ(・∀・)w そんな洗剤もありましたね
C++(Managedじゃない)で書かれたプログラムのプラグインは
C#で書くことは出来ないよね?
用はC#でDLL書いてC++で扱わせたい訳だが・・・
可能ならPlugin SDKをC++クイックブックを見ながらC#へ移植する作業を開始すrんだg
(それよりもC++でがんがったほうが良いのかなぁ。Delphiへ逃げる方が楽そうだけど・・・)
C++/CLIで仲介してやるしかない C#で書いたdllをC++/CLIから参照する形かな
できるかできないか、ということならできる。 でもソースあるなら間に別のものかませた方がいい気がする。
それギャグにしか見えないんだが
へー。こんな方法があるんだ。参考になりました。
624 :
617 :2009/01/03(土) 14:58:33
>>621 案外いけるんじゃ・・・・無いなw
CLI的にはWin32から呼び出せるようには出来るけど
MSがそれをさせないわけか
>>618 C++/CLIで作ってもNative C++から利用できるのか…
サンクス、C++/CLIの利用を考えてみるわ。
.netの心地よいStringとWinFomsが使いたかったので C++/CLIだけで作っても良いのか。(馴れなかったら速攻でC#に逃げるけどw)
(WinFormsが使いたい、というより、MFCに絶望した orz)
C++/CLIの利用は必要最小限にして極力C#に回した方がいいよ MS自身がそうやってるくらいだし
うむ、あいだを取り持つC++/CLIだな。
通常利用: C# unmanaged相互運用: C++/CLI COM相互運用: VB.NET でいいと思うよ
C#4.0では >COM相互運用: VB.NET がいらなくなるよ
1プロセスにCLRは1バージョンしか読み込めないって制限のせいで
>>621 みたいにしたのかな
4.0からはこんなことしないでもいけるようになったりする?
そしたら.netなパラダイスが来るような。
EmEditorとかのプラグインもC#で書けるようにならないかなぁ
4.0はref地獄やMissing地獄なんかがなくなってCOMが扱いやすくなるだけ
631 :
デフォルトの名無しさん :2009/01/04(日) 01:11:58
すみません、VCS2008でWebBrowserコントロールを使用したフォームアプリケーションを作製しているのですが WebBrowserが表示しているページ上の画像ボタンを実際にはクリックせずに クリックしたように動作させたいのですが方法がわかりません だれかたちけて><
>>631 日本語でOK
エスパーレスすると、DOM でよさげだけど。
633 :
デフォルトの名無しさん :2009/01/04(日) 02:23:25
おれもエスパーじゃないので、まずはクリックしたらどうなるか説明してくれや。
いわゆるひとつのクリックジャッキングってやつですか?
VC#2008上でWebBrowserコントロールを使用したフォームアプリケーションが炸裂しているのですが、 画像ページを表示しているWebBrowserコントロールの上にあるボタンをクリックせずに、 まるでクリックしたかのようにWebBrowserコントロールを動作させたいのですが方法がわかりません。 <私に実際の解決法を教える事で、愛のカタチを見せつけて下さい>
>>636 まるでクリックしたかのような動作ってどういう動作?
だから DOM で Submit なりなんなりしろよ。
639 :
デフォルトの名無しさん :2009/01/04(日) 07:52:46
>>636 フォームならフォームをHtmlElementとして
HtmlElement form = webbrowser.Document.forms[x];
で取得して
form.InvokeMenber("submit")でいける。
リンクやボタンなら webbrowser.Document.Linksや
webbrowser.Document.GetElementByTagnames("a") で 取得して
InvokeMember("Click")とすればいいよ
どうせ良からぬ目的だろうが
最近プログラミングそのものを勉強し始めた初心者です。 書籍管理プログラムを作りたくて始めたのですが、ISBNコードからネット上で 書籍名等の情報を検索してローカルのDBに格納したいのですが、プログラムから アクセスして部分で躓いてます。 どのようにすればいいのか、ヒントだけでも教えていただけないでしょうか? もしくは解説されているサイトがあれば教えていただけないでしょうか
どこまで出来ていて、どこで躓いているのか詳しく
せめてなんてサイトからデータを取得しようとしているのか わからないと答えられないよ
644 :
641 :2009/01/04(日) 21:39:22
すみません ローカルでの蔵書DBがらみはほぼできています ただISBNをネット検索をかけようと思った時点でまったくやり方がわからなくなってしまいました。 具体的にはアマゾンかgoogle書籍検索からデータの取得を考えています。 といっても他の蔵書管理ソフト(私本管理とかです)がアマゾンから所得しているというだけで 同じようにしてみようと考えてる程度なんですが。 よろしくお願いします
アマゾンに対して HttpWebRequest して、結果を取得すればいいだけじゃね? うまく考えないと、アマゾン側の変更で大変なことになるけどw
amazonってAPI公開してなかったっけ webサービス使って取得と言う筋はどうだろう
developer登録すればapiつかえる
今までずっと「しーしゃーぷ」だと思ってた…… ふらっとだったんだね。ごめん、それだけ。
なんの釣りですか?
XP(sp2)、C#2008EEを使っています。
ttp://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html こちらのサイトのコードを参考にして、
編集セルに自作テキストボックスを表示するプログラムを作成したのですが、
なぜか小文字のqだけ入力できません。
サイトのコードをコピペしてMaskedTextBoxでもやってみましたが、
やはり小文字のqだけ入力できませんでした。
※そのままコピペだと数字しか入力できないので
maskedColumn.Mask = "000";
を
maskedColumn.Mask = string.Empty;
としました。
原因わかる方いらっしゃいましたらよろしくお願いします。
652 :
651 :2009/01/05(月) 02:28:35
自己レスです。 とりあえずEditingControlWantsInputKeyメソッドの所に case Keys.Q: return true; を入れたら入力できるようになりましたが、 スッキリしないので原因わかる方よろしくお願いします。
>>639 横レスだが、HtmlElementの使い方を調べてる最中だったからdクス。
654 :
641 :2009/01/05(月) 21:23:22
641です いろいろと助言ありがとうございます。 日曜プログラマなので、せっかくのアドバイスも試せてはいませんが、いろいろと勉強させていただきました。 とりあえず、またやってみます。 ありがとうございます
class A { } class B { A a; string s; ~B() { /* aやsを使いたい */ } } C#ではデストラクタで参照型のメンバが生きている保証は無いと思うのですが メンバが回収されるのをデストラクタより遅らせる定型的なパターンとかありませんか?
GCHandle
657 :
655 :2009/01/06(火) 11:56:51
>>656 ありがとうございました。
通常のファイナライズより後に呼ばれるCriticalFinalizerObjectの特性と組み合わせて
こんなん作りました。
class DelayFinalizer<T> : CriticalFinalizerObject
where T : class
{
public T Target { get; private set; }
private GCHandle _handle;
public DelayFinalizer(T target)
{
this.Target = target;
this._handle = GCHandle.Alloc(target);
}
~DelayFinalizer()
{
if (this._handle.IsAllocated)
this._handle.Free();
}
}
再利用を目的にしてるんだったらそんな大げさなもの使わなくても IDisposable実装するだけで十分じゃね? 別にアンマネージリソース持ってるわけじゃないんだから 必ずファイナライザが呼び出されることを保障する必要はないと思うんだけど
659 :
658 :2009/01/06(火) 12:15:34
「大げさなもの」はGCHandleのことではなくCriticalFinalizerObjectのことだよ 補足
661 :
デフォルトの名無しさん :2009/01/07(水) 01:35:39
RowFilterでフィルタをかけている状態で、下記のコマンドをボタンで実行 させていますが、DataGridのフォーカスを手動で変更をしないと データベースが更新されないのです。 ※フォーカスを移動しなくても更新されるようにEndCurrentEdit メソッドを事前にかけているのですが・・・ --------------------------------- int iRow; //更新したレコード数 this.BindingContext[dbCustomer1, "M_Customer"].EndCurrentEdit(); iRow = oleDbDataAdapter1.Update(dbCustomer1, "M_Customer"); MessageBox.Show("更新 " + iRow + "件"); -----------------------------
動的に参照するアセンブリからAssembly.GetReferencedAssemblies()で得られるAssemblyNameの中で、 AssemblyNameが.NETのクラスライブラリかどうかを判別する方法はないでしょうか? .NET 2.0のみなら\WINDOWS\Microsoft.NET\〜の中にdllがあるかどうかを調べればいいのですが、 .NET 3.0以降で追加される部分は別のディレクトリにあったりするみたいなので、その部分の dllをどう調べればいいのか分かりません。 \Program Files\Reference Assemblies\〜がそうみたいなのですが、Program Filesにインストール されていること前提にdllを検索してもいいのでしょうか?
Win2KからXPにUGしたからWINDOWSじゃなくてWINNTにそれがある
WINNT351だな
>>662 GetAssemblyNameを呼んでみる
あと\WINDOWS\Microsoft.NET\〜や\Program Files\Reference Assemblies\〜は
コンパイル時に必要なアセンブリであって、実行時に使われるのではないと思ったよ
ところでどこからどこまでが「.NETのクラスライブラリ」なんだろう?
667 :
デフォルトの名無しさん :2009/01/07(水) 16:11:16
FrameWork標準の奴じゃね?
字面だけみればnativeに対する.NETの意になるんだろうが、
本人は恐らく
>>667 のつもりだろうな
参照渡しって出来るだけintとかstringだけに絞った方がいいの? インスタンスまるごととか推奨されてないの?
インスタンス以外の何を参照渡しするのやら 値渡しの方が重いだろ
>>663 ,664
すべてのPCで\WINDOWS\〜に入っているわけではないのですね…
でもここはRuntimeEnvironmentで取得できるので何とかなりそうですね。
問題は3.0以降の部分ですが…
>>665 マネージドかネイティブの判別はそれでいけるのですが、今回お聞きしたいのは
>>667 ,668の通り、.NET Framework標準のクラスライブラリかどうかの判別方法でした。
質問の仕方が非常に悪かったですね。すいません orz
すべての標準のアセンブリのAssembly.FullNameをリソースに持っといて それらと比較すれば十分じゃないの
なんでラムダ式は戻り値の型で型推論してくれるのに ジェネリックメソッドの型パラメータは戻り値の型で推論してくれないの?
>662 GACからロードされたかである程度判別できそうだけど 厳密には全ての一覧でも持っておかないと無理かもね。
マイクロソフトの電子署名がしてあるかどうか
それだとMS製であることしか分からないんじゃないか
.NET Fx 3.5なんて名前こそフレームワークだけど実質ただのライブラリだし。 結局のところ全部ハッシュもっとくしかないだろ。
>>672 ,674-677
やっぱりあらかじめテーブルとしてAssembly.FullName持っておくしかないですか…
全部のdll分調べるのはちと骨が折れそうです orz
とりあえず、dllからAssembly.FullNameを取り出すプログラムを適当に組んでみます。
ありがとうございました。
>>673 実装された時期が4・5年違うのが一番の原因。
>>678 ここの一覧をつかっていいと思う。
...soft.NET\Framework\v2.0.50727\RedistList\FrameworkList.xml
...soft\Framework\v3.0\RedistList\FrameworkList.xml
...soft\Framework\v3.5\RedistList\FrameworkList.xml
リフレクションを使って動的に属性を追加したり削除したりってできる?
できない メンバや型そのものを追加したりすることはできるけど
d
ref FormだとFormから継承されたMainFormクラスが通らなくなる Formだと通る refって何のためにあるの?
これって出来ないんだっけ? Form form = new MainForm(); Method1(ref form);
使い方理解してないなら使うな
>>681 全部型記述子経由でやるならできる。
と思う。
>>684 refは呼び出す側が渡した変数そのものに呼び出された側が値を代入するためのもの
だからMethod1の定義がvoid Method1(ref Form form) { form = new HogeForm(); }
となっているとすると,MainForm form = new MainForm(); Method1(ref form);
はMethod1を展開すれば次のようなものと等価
MainForm form = new MainForm(); form = new HogeForm();//MainFormにHogeFormを代入できない
>>685 ならformの型がFormだから通る
>>689 そういう用途で使うなら
refじゃなくてoutを使うべきだけどな
あれ?refってどんなときに使えばいいんだっけ? って話だよなw
個人的には
void pixcelProcessing(ref Bitmap target)
{
Bitmap source = target;
Bitmap dest = new Bitmap(target);
target = dest;
}
のようなときか
structを強制定期に参照渡しにして書き換えたいときにかな (今までそんなことはなかったけど)
PInvokeでいくらでも
呼び出し先で変数をインクリメントさせたいときにprivate限定で使ったりするな
いずれにせよ、参照型のrefは稀にしか使わないな。
UDP用のソケットでもref使う
refもoutも、メソッド抽出で選択範囲間違えた時とかに出てくるくらいの感覚だなあ。
bool TryHoge( out Hige hige ){} みたいなのはよくやる
>685 bool Method1<T>(ref T form) where T : Form, new() みたいに宣言してみ。
FormのコンストラクタとうFormのロード イベントって使い分けられることあるの?
InitializeComponent()
IDisposableのDisposeって、using使わないと呼ばれないんですか?
701 :
おしry ◆B81hPRrN9Q :2009/01/10(土) 09:11:52
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace test { abstract class A { protected abstract string ToString(A a); public sealed override string ToString() { return ToString(this); } } class B : A { protected override string ToString(A a) { return a.ToString(a); } } } なぜコンパイルエラー? 無限ループしてるとか実用上の問題は無視してくれ。 エラー CS1501: 引数を '1' 個指定できる、メソッド 'ToString' のオーバーロードはありません。
間違って他所のコテつけてしまったw そして空白ミスったすまん。
>>701 ToString(A) が protected だから。
base.ToString(a) は(A の ToString(A) が abstract だからコンパイルエラーだけど)呼べるが
a.ToString(a) は呼べない。
BはAに含まれるが、AはBじゃないからだと思うが。 return ((B) a).ToString(a); なら通るだろ。
>>705 それはコンパイルが通るが多態性の意味がない。
それは多態性の履き違いのような。 class B : A と同じ内容の class C : A があったとして、 a.ToString(a); は B と C どっちのコードが動くんだ?
>>707 a の型に決まってんだろw
A b = new B();
A c = new C();
b.ToString(b); b.ToString(c); // B の ToString(A)
c.ToString(b); c.ToString(b); // C の ToString(A)
サブフォルダの一覧をゲットする方法を教えてください。 いまいるフォルダ=Path.GetDirecoryName いまいるフォルダにあるファイル=Directory.GetFiles いまいるフォルダにあるサブフォルダ=??? よろしくお願いします。
質問があります。 C#で、改行を出力したいと考えています。 ひとつだけなら単に、"\r\n"でできます。 string return = "\r\n"; 改行が39個とかある場合には、どう書けばいいのでしょう? string return39 = "\r\n\r\n\r\n………"; となっていて、数え間違いをして困っています。 ご教示ください。
for (int i=0; i<39; i++) { return39 += "\r\n"; }
>>709 c# サブディレクトリ 列挙でぐぐれ
>>710 Stringのコンストラクタの(Char[], Int32, Int32)使えば?
最初に\r\nだけ入れた配列用意しといてnew String(配列,0,改行の数*2)
俺だったら改行メソッドを39回呼び出す方を選ぶけど
>>700 using使わないと自動的には呼ばれない
自分でDispose呼んでもいいけどその場合は必ずfinallyの中で呼ぶこと
どのタイミングで呼ばれるかわからない
ブロックを出るときでしょ?
生存期間がローカルスコープに限定できない, プロセスの終了にも関係なく何があっても絶対に開放しないといけないリソースを使う場合って SafeHandleの類を使うしかないの?
例えば何よ
>>710 Environment.NewLine使ってあげて。
>>716 例えばフォームアプリケーションだったら、自分のFormの派生クラスのDisposeがある。
最悪Mainでusingしてシングルトンとして扱うとか方法は考えられるはず。
あと、絶対に処理されないと本当にまずいなら、CriticalFinalizerObject派生。
>>711 ありがとうございます。できそうです。
>>712 Stringのコンストラクタの(Char[], Int32, Int32)
を試してみました。これでもいけそうです。
ただ、Charは1文字なので、\r\nのときはだめっぽいです。\rだけでならできました。
ありがとうございました。
CharとChar[]は違うけど…まあいいか
そもそも改行がn回連続するような文字列って、それ本当に必要なのかどうかを 考えるべきだと思うけどもねえ。 たぶんその文字列を必要とする「何らかの処理」が存在してるんだろうけど、 その「何らかの処理」の作り方が本当にそれでいいのか。 まあ、9割方考え方に問題があるんだと思う。
>>722 たぶん
というレスを投稿するプログラムを作ってるんじゃないかと
そんな馬鹿な
俺もそういう荒らしスクリプト作ったことあるなぁw
おまえか
犯人はっけ〜〜ん☆
2ch荒らしツールを作るのはプログラマなら基本じゃね?
.NET標準コントロールなのにバグ多すぎじゃね?
SearchOption.AllDirectories を使って固定ディスクのルートフォルダから検索すると、 UnauthorizedAccessException を投げるよね。 おそらくSystemVolumeInformationか何かを読みに行ってるんだろうね。
唐突に何わけのわからないこと言ってるんだ? しかもそんなレスが2つ続けてって・・・ ここはムーの投稿欄かよ
ログインすればいい
それがわかってるなら、なぜ「ログインするにはどうすればいいのか?」へと考えが至らないのか。
必要な情報をPOSTしてクッキー取得してそのクッキーを使ってアクセス
いらない子はレスしなくてOK
>>732 簡易WebBrowserとダウンロードボタン作って,ログイン後にボタンクリックすればいいんじゃない?
>>736 神様ありがとうございます
ぐぐって勉強してみます
どうでもいいレスして喜んでる人はもうここにはレスしないように
クッキーを使おうが使うまいが、ログインしていることには変わりなし。
最近の難しいログインフォームは、基本的に
>>738 の方法。
JavaScriptの中にログイン用の塩が埋め込まれててエンコードしたり
しないといけないから、そんなもんブラウザでInvokeしたほうが
楽だべ。(というかそうじゃないと無理なものもある)
しょせん HTTP のリクエスト。IE にできることなら他の方法でも可能。
>>741 ログイン用の…エン?
言いたいことが分かるけどなぜに塩なのかが分からんw
>>742 capita破るプログラムを考えるより、人間に任せた方が楽というのもある
> capita 言いたいことはわかるんだがアレンジが大胆すぎる
capita とかは確かにその通りだけど、それは IE がやってることではなくて、 人間がやってることだろ。
>732 ログ取れるプロキシ使うかやパケットキャプチャをしてブラウザからログオンしてみて 同じリクエスト順にGETやPOSTを投げるんだよ。 クッキーあたりに入っているセッションIDなどもサーバーから送られてくるのを使うんだよ。 どんなページもAjaxなページも基本的に同じようにやればいいんだよ。 このページは普通にPOSTを投げるだけで良さそうだけど。
理解してないからそういう発言なんだろ。
capitaってなに?画像認証みたいなやつ?
動的にコントロールを削除するのってDisposeしかないの?
イベントハンドラのオーバーロード追加できないの?
DOMパーサとJSエンジンだけの小さくて簡単に使えるパッケージがあればいいんだがな
>>750 もしかして: captcha
>>751-752 日本語でおk
>>711 サブフォルダの件、無事できました。
thanks!
755 :
デフォルトの名無しさん :2009/01/11(日) 11:00:58
フォームアプリケーションで、アセンブリリソースを追加して画像を入れたとき、 Bitmap bmp = Resources1.image1; みたいに取得したBitmapオブジェクトも解放するのは取得した側の責任ですよね?
すみません keydownイベントで、シフトキーを押すとAlt+Zキーを押したのと同等の処理をしたいのですがどうすれば良いのでしょうか?
あなたは他人に何かを説明をする気はあるのかね?
>>756 (1) Shiftキーが押されたかどうか判定し、(普通に可能)
(2) 押された場合は[Alt]+Zが押された場合と同じ処理をする
だけだろう。
逆に何が難しいのか説明して欲しいぐらいだ。
foreachの一致について教えてください。 textBoxにappleをいれると、 string[] fruits = new [] {"apple", "banana", "orange"}; foreach(string fruit in fruits) { if (textBox.Text.Contains(fruit)){MessageBox.Show(fruit + "です。");} else {MessageBox.Show("一致しません。");} } だと、appleです。、一致しません、一致しません。と3回メッセージボックスが出ます。 これを、どれかに一致したときは、一致したメッセージをだし、どれにも一致しなかったら、1回だけ一致しなかったメッセージを出す、とするには、どうすればよいでしょう? アドバイスお願いします。
リファレンスのbreak文くらい読めと声を大にしていいたい
>>761 それが、
if (textBox.Text.Contains(fruit)){MessageBox.Show(fruit + "です。");break;}
else {MessageBox.Show("一致しません。");break;}
とbreakしてみると、appleのときはappleです。と表示されてうまくいき、kiwiの場合も、一致しません。でうまくいくのですが、bananaのときにも一致しません。になってしまうのです。
if(textbox...) {flg=true;break;} ... if(flg) ...
デバッガの使い方を先に覚えよう。ステップ実行すると全て解決するよ。
アドバイスありがとうございます。
>>764 ステップインで1行ずつ実行して、bananaのときはelseに飛ぶことはわかったのですが、なぜ飛ぶのか(飛ばないようにしたいのに)わからないので、ぜんぜん解決しませんでした。
>>763 フラグを立てるのですか?
string[] fruits = new [] {"apple", "banana", "orange"};
bool flg = false;
foreach(string fruit in fruits) {
if (textBox.Text.Contains(fruit)){flg = true; break;
if (flg) {MessageBox.Show(fruit + "です。");}
else {MessageBox.Show("一致しません。");break;}
}
???
string[] fruits = new [] {"apple", "banana", "orange"}; bool flg = false; foreach(string fruit in fruits) { if (textBox.Text.Contains(fruit)){ MessageBox.Show(fruit + "です。"); flg = true; break; } } if (!flg) {...} 全部言わんと分からんのか?
if( Array.IndexOf<string>( fruits, textBox.Text ) != -1 ) { //ある } else { //ない }
どうでもいいけど
>>767 の<string>って普通省略するよね
>>768 好き好きでいいんじゃね。
省略できる型引数は省略しないと気が済まないお前や俺みたいなやつもいれば、
書かないと気が済まないやつ、まるでこだわらないやつもいるだろ。
fxcopかなんかで確か 省略できない型引数は極力作るな っていうガイドラインがあったな
>>766 全部いっていただけるとうれしいです。
string[] fruits = new [] {"apple", "banana", "orange"};
bool flg = false;
foreach(string fruit in fruits) {
if (textBox.Text.Contains(fruit)){MessageBox.Show(fruit + "です。");
flg = true;
break;
}
if (!flg) {MessageBox.Show("一致しません。");break;}
}
これで、bananaのときは、一致しません。で終わってしまいます。
if (!flg) {MessageBox.Show("一致しません。");}
とすると、一致しません、bananaです。で、まだできてないし…。
var result = fruits.FirstOrDefault(fruit => textBox.Text.Contains(fruit)); if(result != null) MessageBox.Show(fruit + "です。"); else MessageBox.Show("一致しません。"); こんなんとか
>>772 そういうときはFirstOrDefaultよりもAnyを使う
あー結果を使うのか 撤回
間違えた var result = fruits.FirstOrDefault(fruit => textBox.Text.Contains(fruit)); if(result != null) MessageBox.Show(result + "です。"); else MessageBox.Show("一致しません。"); こうか
もしかして複数の果物もありなのか var results = fruits.Where(fruit => textBox.Text.Contains(fruit)).ToArray(); if(results.Length == 0) MessageBox.Show("一致しません。"); else foreach(var fruit in results) MessageBox.Show(fruit + "です。");
アドバイスありがとうございます!
>>767 配列のなかを検索するには、こういう書き方もあるんですね。
今回は、textBoxがpineappleのときもappleに一致させたいので、使えない感じですが、勉強になりました。
>>775 できました!
感謝します。
string[] fruits = new [] {"apple", "banana", "orange"}; bool flg = false; foreach(string fruit in fruits) { if (textBox.Text.Contains(fruit)){ MessageBox.Show(fruit + "です。"); flg = true; break; } } if (!flg) {MessageBox.Show("一致しません。");} こういう書き方も出来んといかんよ
>>777 は
>>775 の方法を理解してないだろうな
そういえばどういうときにどんなLINQを使えば楽になるのかというのがいまいち分からない
ここ見てると、ああなるほど と思うときがあるんだが… 頭固いからかな?
>>780 単純にそれはコレクション操作することが少ないんじゃない?
コレクションというか SQL とかの集合演算に慣れてないだけと見た
>>778 ありがとうございます。
最初に書こうと思って書けなかったのはこれでした。
フラグとbreakについて復習してみようと思います。
>>780 おっしゃるとおり。778のフラグとbreakの方法なら理解できるのですが、775の方法は、動くことはわかるものの、まだマジカルです。
でもまあ理解はそのうちついてくると思ってます。
>>755 の便乗質問なんですが、Paintイベントなどで
e.DrawImage( Resources1.image1, ... );
なんてやると描画の度に確実にリークしてくってことですかね
いずれは解放されるからリークとは言えない……こともないか GC.AddMemoryPressureとかやってないみたいだし
staticプロパティだからキャッシュするのかと思ったら毎回インスタンス作るんだね Imageなんか勝手に全部キャッシュされたらそれこそリークだけど それならプロパティにするのは不自然だと思う
ResourceManager.GetObjectを使ってるからこのレベルで再利用されているはず。 Win32のリソースの場合ははじめからそこにあるといったイメージになるから 開放しないのが普通なのだが、CLRのリソースはわかんね。
ifの条件がふたつあり、Aの場合もBの場合もおなじ処理をする場合、ifのあとどう書けばいいでしょう? if (A) {//処理} if (B) {//処理} と書くと、重複が多いのでなんとかしたいです。 ご指導ください。
if(A || B) {//処理}
else if じゃなくて if だから、|| では繋げないのでは。
(A かつ B の時は
>>788 だと2度処理されるが、
>>789 では1度しか処理されない)
まあ、
>>788 の書き間違いかもしれないが。
もし書き間違いでないとしたら、処理を関数化することね。
その発想はなかったw では int jobCount = 0; if (A) ++jobCount; if (B) ++jobCount; for (int i = 0; i < jobCount; i++) { //処理 }
なんで、そんな斜めな回答ばっかりするんだよ。 if (A) { a = doSomething(α); } if (B) { b = doSomething(β); } だろ。初心者用だし、普通に考えて。
private void DoMyEvent() { //処理 } ----------------------------------- if (A) {DoMyEvent();} if (B) {DoMyEvent();}
君ら命名下手やね
ここはC#初心者用だと思ってたが、プログラミング初心者用だったのか
LINQつかえよカスども
プロフェッショナル用に帰れ
コンソールアプリケーションでログイン画面を作っているのですが 画面に表示しないで、パスワードを入力してもらうにはどうすればいいですか? login: userid password: **** (若しくは完全に非表示) というような感じにしたいです。 Console.ReadKey(true)をEnterがあるまで繰り返すのが一般的ですか? それとも、パスワード入力用のメソッドとかありますか?
長さの同じbyte[] の内容比較って byte[] == byte[] ではだめなのでしょうか?
メソッドの引数で即値しかとれないようにする方法はありませんか?
>>799 駄目
C#3.5ならSequenceEqualとか使えるけど
>>800 意味が分からんがenumで何とかならんか?
>>800 無料。そもそも何のためにそんなことをしたいんだ?
>>801 そうですか、ありがとう。
迂回のつもりでBitConverterにしてから比較していたのですが、
とりあえずこのまま行こうと思います。
byte[].SequenceEqual(byte[])で試してみたらfalseになりました。
使い方を調べてから出直してきます。
Visual BasicからC#に変える利点ってどのようなものがありますか?
>>804 VB6かVB.netかで違う
結論としてはほぼ一緒だが。
VB.netなら全然違うんじゃないか?新機能を除けば出来る事はほとんど同じだし
>>798 ReadKey回すしかないんじゃない?こんな感じで。
StringBuilder sb = new StringBuilder();
ConsoleKeyInfo cki;
Console.Write("Password: ");
do
{
while (!Console.KeyAvailable)
{
Thread.Sleep(10);
}
cki = Console.ReadKey(true);
if (cki.KeyChar != '\r' && cki.KeyChar != 0)
{
sb.Append(cki.KeyChar);
Console.Write("*");
}
} while (cki.KeyChar != '\r');
Console.WriteLine("\nYour Password is: " + sb.ToString());
>>789-793 ありがとうございます。
if (A || B)でできました。
処理をメソッド化するのがベターでしょうか。
こちらも試してみました。
状況に応じて使い分けたいと思います。
>>808 大丈夫かよ……
if( A || B )
の場合、AがtrueだとBは評価されないってのは理解してるよな……?
質問です。 2009/01/13 という文字列から、 2009/01/20 2009/01/27 2009/02/03 …… という文字列を得たいと考えています。 ToString()みたいな感じでToDateTimeしてAddDays(+7)とかできないかと考えたのですが、違うみたいです。 どう考えたらいいですか?
こいつからはカレンダーのにおいがするぜ!間違いねえ!
>>810 君が間違いを犯してると思う
全コードのせてみ?
>>811 え…。カレンダーってなんかまずいっすか?
コンソールで
makecalendar.exe 2009/01/13 21:00 メイちゃんの執事
と入力して結果として、
2009/01/13 21:00 メイちゃんの執事
2009/01/20 21:00 メイちゃんの執事
2009/01/27 21:00 メイちゃんの執事
2009/02/03 21:00 メイちゃんの執事
……
というファイルを作りたいと思っています。
>>812 いまコードは次のとおりです。
string[] args = Environment.GetCommandLineArgs();
File.AppendAllText("plan.txt" , args[1] + "\t" + args[2] + "\t" + args[3] + "\r\n", Encoding.Default);
でこのあとの部分で、stringを日付にして、AddDaysを12回くり返す。forで。と考えました。
おい肝心の > でこのあとの部分で、stringを日付にして、AddDaysを12回くり返す。forで。と考えました。 はどこいった
なんで日本語で書くかな〜 全部そのまま載せろ、ドアホ
ドアフォ
817 :
デフォルトの名無しさん :2009/01/13(火) 21:18:09
現在、あるExcelファイルを予め開いておき、 そのExcelからC#で作ったプログラムを起動して処理をさせる事を しています。 そのときC#で行った処理の結果を先ほどの既に開いている Excelファイルのあるシートのあるセルに 文字列として書きこみたいのですがどうすればよいでしょうか? Excel.Openだと新しくファイルを開こうとするので そうではなくすでに開いているExcelを操作したいのです。 どなたかご教授お願いします。。
>>814 いや、その肝心のところで躓いていて。
>>815 コードこれでぜんぶです〜。
まず日本語でやりたいことを忘れないようにメモしたところです。
これから日付をクリアしたら、forの使い方を調べて…。
>>819 何を言いたいのかよくわからんがプログラム書いてからこい
正規表現でぐぐればいいんじゃね?
forのところは次のようになりました。 for (int i=2; i<13; i++) { File.AppendAllText("plan.txt" , (i) + "\t" + args[2] + "\t" + args[3] + "\r\n", Encoding.Default); } これで最初の質問のargs[1]の日付を文字から日付にする方法をアドバイスお願いします。
DateTime.Parse
>>819 日付の計算の仕方がわかったら、本当にforの使い方を調べるんだな。
おじさんとの約束だぞ。
stringをDateTimeに変換するのは、 DateTime.Parse() を使う。
string s = "2009/01/13 21:00";
DateTime dt1 = DateTime.Parse(s);
Parse()というメソッドはよく覚えておけ。文字列表現を解釈するために、いろんなクラスに
存在しているからな。目を皿のようにしてMSDNライブラリを渉猟するがいい。
次は、「DateTime.AddDays()が機能しません」と言って泣きついてくるような気がするが、
それはそのとき答えよう。
その前にFormatExceptionが出る気がする
826 :
824 :2009/01/13(火) 22:13:55
>>824 なんか知らんが、あんた気色悪いよ。
いや本気で。
DateTimeに変換とか言う以前に、コマンドライン引数を""で囲わないとだめなんじゃないか?
こんなんかな。 DateTime startDate = DateTime.Parse(args[ 1 ]); using (StreamWriter writer = new StreamWriter("plan.txt")) { for (int i = 0; i < 13; ++i) { DateTime onAirDate = startDate.AddDays(i * 7); writer.WriteLine("{0:yyyy/MM/dd}\t{1}\t{2}", onAirDate, args[ 2 ], args[ 3 ]); } } 次はだれかLINQを使う例を頼む。
ああ、書いちゃった 今夜の楽しみがひとつ減った
>>832 いま、こんな感じです。
// 周期と初期値は今後対応予定。
// 日付 時刻 項目 初期値 周期
// 予定の表記は、「2009/01/20 21:00 メイちゃんの執事 2 7」
DateTime dt;
DateTime.TryParse(args[1].ToString() + " " + args[2].ToString(), out dt);
for (int i=1; i<13; i++) {
File.AppendAllText("plan.txt" , dt.AddDays(+7*(i)).ToString().Replace(" ","\t").Replace("00:00","00") + "\t" + args[3] + (i) + "\r\n", Encoding.Default);
}
TryParseの戻り値放置はダメだろ
829と見較べて勉強してました。
>>834 え!? なんですかそれ…。
あとはとりあえず ・DateTimeは時間も扱えるのでまとめてParseした方がいい。 ・DateTimeを文字列に変換する際には書式指定できる。 ヘルプで「日付と時刻の書式指定文字列」を調べてみる。
>>835 Try○○パターンは常にif (Try○○(out result)) { 成功したとき } else { 失敗したとき }
の形で使うんだよ
失敗したときはresultの値は無意味なので使っちゃいけないお約束
整理しました。こんなんでいかがでしょう。 DateTime startDate = DateTime.Parse(args[1] + " " + args[2]); for (int i=1; i<13; i++) { File.AppendAllText("plan.txt" , startDate.AddDays(+7*(i)).ToString("yyyy/MM/dd/\tHH:mm") + "\t" + args[3] + (i) + "\r\n", Encoding.Default); }
for(int i=0;...な
>>837 失敗したときの値は普通は default(T) だから(値はMSDNに明記されてる)、
変換できない文字列は default(T) とみなすということも有り得る
841 :
651 :2009/01/14(水) 01:56:17
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ こいつ まピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
ToolStripMenuとContextMenuで共通のものがあるですが 同じアイテムを使う事ってできないんでしょうか?
ContextMenuStrip使えばいいよ
たぶんひとつのToolStripMenuItemを使い回したいということなんだろうけど、 違う親にAddするともとからはRemoveされる仕様です
>>807 サンクス。だが遅かったな
俺が寝てる間(=意識がもうろうとしている状態)に小人さんが作ってくれたんだぜw 俺の小人さん乙
Console.ReadKey(true).KeyChar == 0 の場合は考えてなかったな
まあいいや
昨日はいろいろありがとうございました。 周期と初期値に対応したつもりですが、周期と初期値の引数がない場合になにも処理されないという症状に困っています。 アドバイスいただければと。 引数つきでデバッグするときにはどうしたらよいんでしょう? //予定の表記は「2009/01/20 21:00 メイちゃんの執事 2 7」 //日付 時刻 項目 初期値 周期 DateTime startDate = DateTime.Parse(args[1] + " " + args[2]); int defaultValue = 1; if (args[4] != null) {defaultValue = Int32.Parse(args[4]);} else if (args[4] == null) {} int incrementDays = 7; if (args[5] != null) {incrementDays = Int32.Parse(args[5]);} else if (args[5] == null) {} for (int i=defaultValue; i<13; i++) { string writefolderDate = (startDate.AddDays(i*incrementDays).ToString("yyyy/yyyyMM/yyyy_MMdd/")); File.AppendAllText("plan.txt" , startDate.AddDays(i*incrementDays).ToString("yyyy/MM/dd\tHH:mm") + "\t" + args[3] + i + "\r\n", Encoding.Default);
>>847 もうちょっと機能を分割したほうがいいが、、
引数付きでデバッグ開始したいなら、プロジェクトのプロパティのデバッグのとこに
開始オプション-コマンドライン引数とかあるが。
キモい。
args[4] == null って引数足りないときはArgumentOutOfRangeExceptionだぞ Lengthプロパティで確認
>>848 ありがとうございます。
>>850 ありがとうございます。
int defaultValue = 1;
if (args.Length >= 5) {defaultValue = Int32.Parse(args[4]);}
int incrementDays = 7;
if (args.Length >= 6) {incrementDays = Int32.Parse(args[5]);}
でできたみたいです。
質問があります。 周期的に行う予定で、雑誌の発売日などの場合、2週目と4週目の火曜日、というようなことがあるのですが、C#で2週目の火曜日、というのはどう書くものなのですか?
>>851 普通にメソッド化しろよ。
もう遅いとは思うが
>>853 遅いってことはないんですけど、普通のメソッド化って、どんなふうにするものなのですか?
メソッド化って、自分ではまだしたことがなく、リファクタ-メソッドの抽出でメソッドを作ったことがあるくらいです。
この場合、どこをどうメソッドにするものなのでしょう?
>>852 1日が何曜日かしらべて自前で計算したらよかんべ
>>852 そういうのはまず条件を整理するんだよ。
で、何週目かは7で割ればいいし、
DateTime 使うんなら、DayOfWeekで曜日がわかる。
>>854 やってることを分けて考えれば自然に出てくる
たとえ一回しか使われない処理でも,
はっきりとした機能単位でメソッドに分けられていたら見通しが良くなる
>>852 今月の場合だと
int i = Convert.ToInt32(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).DayOfWeek);
int n = (7 - i) + 3;
任意の月だとDateTime.Now.Monthを変えればOK。
>>852 因みに、ある月の「2週目の火曜日」と「第2火曜日」は違うと言っておく
雑誌なんかは普通は後者だと思う。前者も無いとは言い切れないが
リファクタ-メソッドの抽出なんて初めて知ったw すごいなこれw
便利ではあるが、抽出の仕方を上手い事誘導するにはコツがいる void NewMethod(ref int a, ref int b, out int c); もう、あほかとw
>>859 確かにw
第二火曜日の場合
int i = Convert.ToInt32(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).DayOfWeek);
int n = (i > 2) ? (7 - i) + 3 + 7 : (7 - i) + 3;
>>856 ありがとうございます。
う〜む。なんかこんなんなりました…。
割り算苦手…。
string[] targetDay = {"日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"};
string targetOnlyDate = DateTime.Now.ToString("dd");
DateTime targetDate = DateTime.Now;
string stringTargetDate = DateTime.Now.ToString("yyyy年MM月dd日");
if (Int32.Parse(targetOnlyDate)<=7) {MessageBox.Show(stringTargetDate + "は第1" + targetDay[(int)targetDate.DayOfWeek]);}
else if (Int32.Parse(targetOnlyDate)<=14) {MessageBox.Show(stringTargetDate + "は第2" + targetDay[(int)targetDate.DayOfWeek]);}
else if (Int32.Parse(targetOnlyDate)<=21) {MessageBox.Show(stringTargetDate + "は第3" + targetDay[(int)targetDate.DayOfWeek]);}
else if (Int32.Parse(targetOnlyDate)<=28) {MessageBox.Show(stringTargetDate + "は第4" + targetDay[(int)targetDate.DayOfWeek]);}
else {MessageBox.Show(stringTargetDate + "は第5" + targetDay[(int)targetDate.DayOfWeek]);}
>>858 うっ。ありがとうございます。四苦八苦しているうちに…。
すごいスマートです…。
>>857 、860
メソッド化については、最近必要性がわかってきたものの、もうちょっと頭を整理してから考えます。
中学生か?
targetOnlyDateいらないだろ しかもなぜかstringで毎回Int32.Parse…
C#じゃなくてアルゴリズムだよなこれは・・・
こういう嘘くさいメソッドを捏造してやればおk public static int 第nx曜日の日付を調べる(int n, DayOfWeek x, DayOfWeek firstDay) { int firstDateX = x - firstDay + 1; if (firstDateX <= 0) firstDateX += 7; return firstDateX + 7 * (n - 1); }
852は2週目の火曜日の何の型を知りたかったのだろうか
今夜も酒がうまい
privateとかpublicとかの識別子が付いてないクラスのアクセスレベルはなんなの?
わかりましたありがとう
>>868 第nx曜日の日付を調べる()
を呼び出すときの引数を教えてください。
たとえば第2火曜日の日付を求めるには?
第nx曜日の日付を調べる(2, "火", "木")
DayOfWeek型だって書いてるだろ
なんでも文字列でやりたがるお人じゃのぅ
DayOfWeek列挙体でなくて? ほとんどstringしか使ったことがないので、Intとかよくわからないのです。 両方見ても、ぜんぜん見当がつかないです。
intがよくわからないんじゃコンピュータさんとお話はできないな
機械語でお話できればok
IntPtr型ってIntの参照型ですか? それともアドレス?
インテリセンスで出るだろそれくらい・・・
キーワードとか予約語が分かりません、てレベルは来なくていいよ
>>882 ポインタをはじめとした,プラットフォームによってサイズが変わる整数値を格納するための型
そのプラットフォームにおけるポインタのサイズと同じサイズの整数型 と言った方がいいかもしれない
ありがとうございます。 IntPtrの仕様書(?)説明ではよく分からなかったので質問しました。 BitmapData.Scan0というのがよく分からなかったので
C#は変数の型を厳密に区別する堅牢な言語と最初に教わった気がする。 var世代にはもう必要なくなったのかも・・。
Scan0はポインタそのもの void*とか公開するのはさすがにまずいのでそのかわりにIntPtr 値はやっぱり生のアドレス
>>887 要は、
実態: ただの整数の別名
用途: ハンドルとかポインタとか、普通の整数のように扱われては困る値を扱うためのもの
ってことじゃないの?俺はそう思ってるけど。
ただ、整数と「意味的に」区別するために導入したはずのIntPtrなのに、
結局のところ「意味的に」全然異なるいろんなハンドルやポインタの値を
扱うんじゃ、考え方として一貫してないしあんまり意味ないなー、と思うのは俺だけ?
>>888 C#は静的な強い型付けの言語だけど、それと型推論は別の概念。
>>890 ハンドルでもいいんだよ
要は32ビット環境では32ビット,64ビット環境では64ビット環境になるような値に対して使う
size_tのマーシャリングにもIntPtr使ったりする
環境によってビット数を変える必要がある整数に対して使うと言うことですね。 ありがとうございます。 (Scan0以外で多分当分使わないだろうな…)
サイズの基準がポインタっていうだけのことだな だからIntPtrという名前なんだろう
算術演算できないのに整数型って呼んでいいの?
算術演算には型のサイズが必要だからな
ポインタのサイズは一定だから、関係ないだろ。
>>894 いやだから、意味的な重点は「フツーの整数とは違うよ」っていうことにあって、
Cのintみたいに環境で大きさが変わるっていうのはむしろそう重要なことではないかと。
もちろんポインタを扱う場合には重要な特徴ではあるんだけど。
少なくともIntPtrていう名前は Int32,Int64等に対応して"Int"+(サイズ)と理解していいのかなあ
IntPtrはIntPtrだろ 無理に何かにあてはめることは無い
>>893 C#コードで完結するならUIntPtr使いたいな。
905 :
デフォルトの名無しさん :2009/01/15(木) 23:15:11
C#をつかってデータベースファイル(*.mdf)を扱うシステムを作ろうとしています。 質問をよろしくお願いします。 次の各項目について、方法は長くなってしまうでしょうから、可能なのかどうかだけでも教えてください。 (a) exeファイルになってからSQLServerがインストールされていないPCで使用したい (b) mdfファイルとの接続を、メイン実行ファイル自身(exeファイル)からの相対パスで指定したい 以上2点ですが、可能なんでしょうか?
ホイールでスクロールできるようにするにはどうすればいいですか?
>>905 a. 無理。Compact ならいけるかも。調べてみれ
b. いけるはず
>>906 なにをスクロールさせたいんだ?
おれたちゃお前のお母ちゃんじゃねえんだ
出直しな
FormつくってそれにScrollBars = ScrollBars.VerticalってやったDataGridViewを 貼りつけたんだがホイールでスクロールしてくれない どうすればいい?
WM_SCROLL でも引っかければ?
DataGridView..::.ScrollBars プロパティ 解説 このプロパティの値に関係なく、スクロール バーは必要な場合にだけ表示されます。 スクロール バーを表示しないようにするには、このプロパティを使用します。(後略) DataGridViewに表示しきれないほどRowを追加すりゃいいんじゃね?
スクロールバーはでてるんすよ バーをつままないとスクロールしてくれない ホイールでころころっとできんものかな、と WM_SCROLL??なにそれ?? 現在グーグルとにらめっこ中 支援求む
あー。ごめん。WM_MOUSEWHEEL だったかも。
ことわる
フォーカスをDataGridViewに移したらいいんじゃね
ごめん、できてたw
>>912 学生さんだね。
社会に出ればわかるけど冤罪も罪のうち、疑わしきは罰するってのは法治国家の不文律だよ。
どこの誤爆だw
919 :
905 :2009/01/16(金) 07:38:09
>>907 ありがとうございます。
相対パスは調べてやってみます。
920 :
デフォルトの名無しさん :2009/01/16(金) 09:46:27
教えてください。 別のプロジェクトに含まれているフォームをコピーして使いたいのですが インポートするにはどうすればいいですか? お願いします。
そっちのプロジェクトでそのフォームクラスがpublicになってる前提で。 そのexeかdllを参照に追加
922 :
デフォルトの名無しさん :2009/01/16(金) 10:04:59
そりゅーしょんえくすぷろーらにコピペすりゃいい
920です。
>>920-921 ありがとうございました。
ガチャガチャやってるうちにできました。
ソリューションエクスプローラ上で右クリック-追加-既存の項目
で出来ました。
追加項目の選択でform1.csだけを選択しただけで、ファイル的には
form1.csとForm1.Designer.csとForm1.resxの三つが現プロジェクトのフォルダに追加されました。
今度からスレ違いは駄目だよボクちゃん
ToolTipのToolTipIconプロパティのプロパティウィンドウでの説明文間違ってるよね?@SP1
質問です。 ショートカットの.lnkからフルパスを取得するにはどうしたらよいでしょう?
IShellLinkW、ShellLinkObject, System.Runtime.InteropServices.ComTypes.IPersistFile あたりでぐぐれ
質問です。 リフレクションで、あるオブジェクトがIEnumerable<T>の実装クラスか 判定したいんですが、ジェネリッククラスでこれをやるにはどうすればいいんでしょう。
typeof(IEnumerable<T>).IsAssignableFrom(type); てか、is使ったほうが早い
ご回答ありがとうございます。 要するに、渡されたオブジェクトが配列かコレクションだったら foreach で中身を取り出したいのですが、 そのために、型引数 T がどんな型の場合でもmatchできるようにしたいのです。 質問が悪くて申し訳ありません。もしご存知でしたら教えてください。
どんなシーンで必要なのかわからん Tが決まってるならIEnumerable<T>にasすればいいし Tが決まらないならIEnumerableにasしてobjectとして扱えば十分だろ
>>932 いま、手元に開発環境がないので試せないんですが、
IEnumerable<T>には、IEnumerableだとマッチできないみたいです(総称型じゃないから?)。
用途はといいますと、javaでいうcommons-langのToStringBuilder的なものを自力で実装する必要があって、
配列やコレクションの中身も展開したいな、と。
だからIEnumerableとして扱えばいいだろ IEnumerable<T>を実装している型のオブジェクトなら例外なく絶対に間違いなくIEnumerableとして扱える
IEnumeratorとIEnumerableの違いがわからん
ありがとうございます、試してみます。
>>935 IEnumerableはIEnumeratorのファクトリ
>>935 列挙処理にはどこまで読んだかなどの一時的な情報が必要になるわけだけど
そういうのはコレクションそのものとは関係のない属性だからIEnumeratorとして外に括りだしてるわけ
ファクトリ?違うでしょ。
>>935 たぶんわかってないのは「IEnumeratorとIEnumerableの違い」じゃなくて
インターフェイスという考え方そのものなんじゃないの?
IEnumeratorもIEnumerableも十分わかりやすいインターフェイスだと思うけど。
読み取り専用の依存関係プロパティに値を設定する時は SetValueにDependencyPropertyKeyを指定すればいいのですが バインディングターゲットにしたい場合はどうすればいいのでしょうか? SetBindingにはDependencyPropertyKeyを取るものが見当たりません。
public static readonly DependencyProperty HogeProperty = HogePropertyKey.DepdnencyProperty;
942 :
940 :2009/01/17(土) 21:52:11
>>941 そのDependencyPropertyをバインディングターゲットにすると
読み取り専用の為か"'Hoge' プロパティはデータバウンドにできません。"と例外が起きます。
BindingModeがTwoWayになってたりしない?
944 :
940 :2009/01/17(土) 22:03:29
これ以上は依存関係プロパティの宣言とバインディング辺りを見せてもらわないと難しいかな
946 :
940 :2009/01/17(土) 22:33:44
>>945 class A : DependencyObject
{
private static readonly DependencyPropertyKey HogeKey
= DependencyProperty.RegisterReadOnly("Hoge", typeof(string), typeof(A), new PropertyMetadata());
public static readonly DependencyProperty HogeProperty = HogeKey.DependencyProperty;
public A()
{
Binding bind = new Binding("Foo");
bind.Source = B.Instance;
bind.Mode = BindingMode.OneWay;
BindingOperations.SetBinding(this, HogeProperty, bind); // 実行時に例外
}
class B : DependencyObject
{
/* Fooという依存関係プロパティがある */
public static readonly B Instance = new B();
}
ユーザーコントロールを作ってるのですが、 そのコントロール内でアプリケーションが実行中かデザイナ上かを判断する方法はありませんでしょうか?
DesignMode
DesignModeは説明をよく読まないとハマるよw
整数型変数で負の数の入力を回避したい場合、 uintではじめから定義するのと、intで定義し、プロパティでセットされたときに 例外をスローするのとどちらが一般的でしょうか 当方Javaから10分ほど前に移行してきたばかりなので 符号付整数の浸透度(?)というか使う局面がまだ感覚的に掴めません
どれが一般的とかないと思うんだけどな。 でも符号なしの型使うのはCLS準拠じゃないんだっけ? というか、俺なら文字通り「入力」の段階で(つまりUIで)弾くけどな。 もちろんプロパティでも例外投げるなり設定可能な最小値を強制するなりの 処置はするけど。
googleの規約に使う整数はintだけって書いてあったな
>>952 ,953
ありがとうございます
符号付は必要な場合以外は使わないほうがよさそうですね
さっきはじめて、メソッド名が大文字からはじめることにカルチャーギャップを感じているくらいです
また勉強していく中で何かあったらよろしくお願いします
符号なし整数型は、相互運用でどうしても必要ってとき以外は使わなくていいんじゃないかな。 数値の範囲を限定するために符号なし整数型を使うというのは論理的じゃないように思う。 0≦x<100とか、-25<x<25だとかの範囲なら、プロパティでset時にチェックするなり、 UIで入力時にチェックするなりするのだから、0≦xの時だけ違う方法を使うことはないだろう。
>>946 バインディングの方向がおかしい
XAMLで考えたら分かりやすいけど
<B Foo="{Binding Source=A, Path=Hoge}"/>
を実現したいんだろ?
ならBindingのパスはHogeでSourceはA
SetBindingするのはBとB.FooPropertyになる
<A Hoge="{Binding Source=B, Path=Foo}"/>
はA.Hogeが読み取り専用なんだから成り立たない
ModeがOneWayToSourceでもな
>>956 いや、その逆がやりたいんです。
条件によって、自分でHogeの値を提供したり、Fooの値を変わりに提供したいんです。
Fooの値が変わっても対応できるようにするには、バインディングすれば楽かなと。
HogeKeyを持ってる側ならなんとかできないかな、と。
やっと分かった プロパティ変更イベントでやるしかないね
Form1とForm2を作成して、Form1にあるdataGridViewのセル[1,1]へ Form2からアクセスするにはどうしたら良いのですか? Form1に public static Form1 Form1Instance { public object dataGridViewCell { get { return dataGridView1.CurrentCell; } set { dataGridView1.CurrentCell = value; } } 上記のようにすると、Valueの場所で型変換が出来ませんと怒られてしまうのですが・・・ 型はObjectではなく何にしたら良いのでしょうか?
960 :
デフォルトの名無しさん :2009/01/19(月) 15:32:16
C#でGUIアプリケーションを作ろうと思ったら .NET Franework 一択でしょうか? C++のように Win32APIを叩いて作れますか? また、VSを使わずに普通のエディタでガリガリ書くのは厳しいですか?
>>959 怒られついでにvalueの型を教えて貰いなさい
>>960 > C++のように Win32APIを叩いて作れますか?
> また、VSを使わずに普通のエディタでガリガリ書くのは厳しいですか?
あなたがマゾヒストなら問題ない
win32api叩いても .NET Franeworkの中からだけどな。
964 :
デフォルトの名無しさん :2009/01/19(月) 15:50:41
マゾってわけじゃないんですが。 コントロールをD&Dで配置するので勉強になるのかな、と思って。 それと畑は違うけど、HTMLなんかはビルダーを使うとソースが滅茶苦茶になりがちなのでその点も心配だったんです。
別にコントロールはコードだけでも貼れる
___ /⌒ ⌒\ ━━┓┃┃ /(  ̄) (_)\ ┃ ━━━━━━━━ /::::::⌒(__人__)⌒:::: \ ┃ ┃┃┃ | ゝ'゚ ≦ 三 ゚。 ゚ ┛ \ 。≧ 三 ==- -ァ, ≧=- 。 イレ,、 >三 。゚ ・ ゚ ≦`Vヾ ヾ ≧ 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
967 :
959 :2009/01/19(月) 15:54:33
>>964 PetzoldのWindows Formsチュートリアルを読んだことがあるが
まさにVisual Studioを使わずエディタでガリガリ書いていくタイプの本だった
開発効率を気にしないのであれば別に構わないんじゃないか
>>964 手書きでGUIの配置をしこしこ書きたいなら、WPFやSilverlightをおすすめするよ。
XAML道に精進するのじゃ。
970 :
960 :2009/01/19(月) 16:32:47
コントロールの配置なんか勉強しなくていいよ もっと他に学ぶべきことはあるからポトペタで十分 むしろポトペタで作られたhoge.Designer.csを見たほうが理解が進む ボトペタでできたソースと、ホームページビルダーとかWordで作ったHTMLが糞という話は次元が違う エディタでガリガリなんてお勧めしないね
>>959 DataGridViewCell.Valueにアクセスしたいんじゃなくって?
973 :
959 :2009/01/19(月) 18:27:27
>>972 その通りです。
valueを返したら行けました。
アリガトゴザイマス
基礎が分かってればGUIなんてどうでもいい 動的にコントロールを作る必要にかられたらそのとき調べればいい ただ,基礎が分かってないと調べようがないからね
VS2008でaxWebbrowser使おうと探してるんだけど見つからないです。 ツールボックス右クリック→アイテムの選択→COMコンポーネント IE7からshdocvw.dllがieframe.dllに変わったってのを見たんで参照で追加してみようとしたけど 「C:\Windows\System32\ieframe.dll の自己登録に失敗しました。」の表示、ieframeも同様。 どこから追加できるんでしょう?
つーか、WebBrowser コントロールじゃだめなんか?
>>976 WebBrowserだとFlashが正しく動かないことがあってaxwebbrowserに切り替えたんです。
で、今試してみたら以前正しく動かなかったFlashが動きました。
.NET3.5で直った?Flash側が対応した?
とりあえずWebBrowserでいってみます。
ただaxWebbrowserの件ご存知の方いましたら返信お願いしますorz
>>971 ,
>>974 レスありがとうございます。
D&Dでできたソースを信用しても問題ないようですね。
安心して取り掛かれます。(といっても最初はコンソールアプリからですが。
ありがとうございました。
自PC(複数アダプタ)から特定のサブネットのユニキャストIPアドレス(例えば192.168.0.0/24)を検索したいんですが、 何か格好いい方法はありませんか? 自分で考えるとGet何とかAll何とか関数でNetworkInformationの配列を取ってきてループするダサい方法しか思い浮かびません><
たぶん、君はネットワーク関係のスレにいくべきだと思う
カッコイイ方法
982 :
デフォルトの名無しさん :2009/01/20(火) 19:41:36
ド初心者ですがお願いします。 int i; string txt; i=982 txt = "レス番号は" + ToString(i) + "です"; ↑これエラーが出ます。int型の値を含んでstringの一部にするには どうすればいいのでしょうか?
int.Parse()
ToString(i) ワラタ
独創性がありますね
i,ToString(16)
txt = "レス番号は" + i + "です"; マタハ txt = "レス番号は" + i.ToString() + "です";
i.ToString(文字列でおながいします)
つまんねーよ氏ねよ
991 :
デフォルトの名無しさん :2009/01/20(火) 19:58:39
C#でASP。NETやりたいんだけど、あんまりいい本無いね。 他のJavaやPHPもいい本なかったけど・・ 好奇心をそそって面白く学べるような本があったら教えて欲しい。洋書でもいいから。 なんか、プログラム界の本は全般的に面白みがないんだよな〜。
自分で探せよボケ なにが「いい本無いね」、だ 面白みがないんだよな〜ってアホか
面白いの作りたいならDirectXで3Dプログラミングがいい
994 :
982 :2009/01/20(火) 20:02:16
”ばーか”ワロタw
初心者は、まずインテリセンスに素直に従うことを覚えるべきだねえ。
ToStringいらないけどな
>>997 いやだ!アレは絶対「インテリジェンス」だもん。インテリセンスなんて従わないもん。
>>998 String + int にも対応してたんだ、知らなかったw
String + intの時にはint.ToString()して、それ以上の複雑な場合にはString.Formatを毎回使ってた
しかし、演算子がオーバライドされてるだけとはいえ、文字列+数字は型が曖昧なJavascriptっぽくって嫌だなぁw
Objectから派生してれば何でも+できるよ Stringとの+でToStringが呼ばれるのは演算子のオーバーロードじゃなくて言語仕様だったはず
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。