ふらっとC#,C♯,C#(初心者用) Part47
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part45 (実質46)
http://pc12.2ch.net/test/read.cgi/tech/1255658236/
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
よりによって、京都大学を騙るとは。 京都府警の管轄だぞ。
ワロタ
アイちゃんがまだ生きてることに正直驚いた
どんなに優れたプログラムを作ってもアイちゃんの脳には勝てない
マウス座標を固定したい場合、どうやってやればいいでしょうか? Timer座標変更する以外で方法はありますか?
なぜわざわざ腐ったUIにしたいのさ
LL でフックして、位置を変えなきゃOK。
それが一番スマートなやり方だな
ListViewのDetailsViewを使い、 3種類のカラムにデータを表示させています。 これで、1,2番目のカラムは起動時に取得するのですが、 3番目のカラムは、起動後ボタンを押したタイミングで表示するようにしたいのです。 ボタンを押したら、一度ListViewをClearして、3番目のカラムを含むデータを、 再度表示させることも出来るのですが、何番目のアイテムの3番目のカラムデータを、 更新する、ということは出来ませんか?
>>14 ListView.Items[n番目].SubItem[2].Text
>>16 名前空間が何で(どういう場面で)必要なのか考えれば自明。
>>18 xml要素がDOMの中で重合しない限り名前空間など無用ってことですね?
一部処理をしてる間だけ、画面にその結果を反映させたくなく、 処理が終わったら表示を更新する・・・のようなものはありませんか? update..とかで何か出来た気がするのですが・・・
BeginUpdate() 〜 EndUpdate() のこと?
>>21 それです!
やってみますね、ありがとうございました。
大分前だけど、プログラマとして会社面接に行って C++、C#できますと言ったら、面接官(多分SE?)にC#って何?って言われたw
24 :
デフォルトの名無しさん :2009/11/04(水) 04:07:47
外部のコンポーネントを使用したいと思ってるんだけど著作権絡みの質問ってどこですればよい?
C#も知らんとは無知すぐる
そこの会社ではシーイゲタと呼んでとか
シープラプラプラプラ
C丼
>>23 その面接官をこのスレに連れてきなさい!
(やってきた)
仕事くださいお願いしますorz
>>23 どのくらい説明できるか試したんじゃない?
まあC#なんて最近だし
このスレを見てる俺もよく知らないし
俺もよく分かりません
そんなやつらに聞いてたのか
string に入ってる一文字がa-z 0-9 の半角小文字かどうかを判定する簡単な方法教えてください なるべく正規表現使わない方法で
どう考えても正規表現が一番簡単だが まあ36文字ぐらいならchar配列で持っておいてループでチェックしても良いんじゃね
1文字って文字列中の1文字? まあChar.IsLowerとChar.IsNumber使うのかな
まあ性器表現は重いからな
ありがとうございます stringのままだと不等号が通らなかったので char[] ch = al.ToCharArray(); if ((ch[0] < 'a' || ch[0] > 'z') || (ch[0] < '0' || ch[0] > '9')) としてみました。 これではまずいでしょうか?
それだと合致しすぎだろ
あ こう? if ((ch[0] < 'a' || ch[0] > 'z') && (ch[0] < '0' || ch[0] > '9'))
おちょくってるのか
that's right
プロセスが使用しているファイルのパスやファイルの起動時刻のデータを取得することは可能でしょうか? Windowsでの実装を考えています C#ではウィンドウを持つプロセスからタスクバーに表示される文字列を取得できることは調べてわかりました しかし,これではファイルのパスやファイルの実行時刻,さらにはファイル名がタスクバーに表示されなければファイル名も取得することができません Windowsのどこかにファイルの使用履歴を保存している情報があれば,そこから取得できるかなと思っているのですが・・・
if( (ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= '0' && ch[i] <= '9') ){ //string に入ってる一文字がa-z 0-9 の半角小文字 }
フィルタドラバ書けばなんとかなりそうだけどスレちがいですね
>>35 他には辞書型にマッチする文字を全部放り込んでしまうとかが考えられるけど、
まあ正規表現を使うのが一番簡単。
なぜそれを避ける必要があるのかが逆に分からんな。
宿題なんでしょ
だからエンコード指定してIsLowerとかIsNumberしろよと・・・
エストニア語環境でバグるんですね。わかります。
もし宿題なら、前に出てたif文の使い方とか教えたいんじゃなかろうか
>>51 全角の1とかaまでマッチするだろ。あほは黙ってなさい
>>51 .NETの標準ライブラリにはIsLowerとIsNumberはCharにしかなくて、
どっちもEncodingは引数に取らないんだが……
一体どういう操作なの?
Encoding設定できないのに全角の1を数値と判断してると思える方がどうかしてる
数値じゃなくて数字でしょ
58 :
35 :2009/11/04(水) 18:24:52
役に立たねえやつらだな
これでOK。 ASCIIコード相当の文字セットはユニコード内で同じ値がマッピングされてるから 127以下 = 半角英数字と思って良い。 string text = "123"; if ((int)text[0] < 128) // is ASCII code if (Char.IsLower(text[0]) || Char.IsNumber(text[0])) Console.WriteLine("Lower or Number.");
後出しなのにすげー間抜けなの出てきたw
間抜けとは何だ プンプン
c#の参照型とC言語のポインタ型って同じだと思うんだけど 何か違うのか? c言語 int x=30; int*p; p=&x;//pには、1923536みたいな数値が入ってる で、アドレス1923536に30という数値が入る。 d# TestClass tc = new TestClass(); tc.x=30; tcには1923536みたいな数値が入ってる で、アドレス1923536に30が格納されるんだろ? 何か間違ってる?
>>60 だからアクサンやセディーユやウムラウトはどうなる。
>>63 C#の参照はオブジェクトのアドレスを直接指していない(オブジェクトはいつ移動するかわからないから)。
値を自由に変更できない(現存するオブジェクトを指すかnullかしかなく、適当なアドレスを指したりできない)。
キャストが自由にできない(Cのポインタのように全く関係ない型に変換できない)。
なるほどなるほど unsafe使ってもメモリ管理面ではc言語より弱いのか。 無理やり型キャストしてデータ書き換えするとコンピューターが内部でどんな動きをしてるか実際にチェックできて楽しかったのに残念だのぉ。
あ、unsafeのことは言ってないか。 unsafe使えば他のアプリケーションに干渉することが可能かね。
他のアプリケーションに干渉って具体的に何言ってんの
Windowsゲームのメモリを直接書き換えて改造するとか コマンドプロンプトの文字をA⇒Cにしたりとか そういううやつ。 アセンブリ?で無理やりアドレス書き換えたらできるようなやつ。
Cでやれよ
お、できた。 unsafe使ったら 他のプログラムに干渉できた! unsafe private void Form1_Load(object sender, EventArgs e) { try { int* p; p = (int*)12345678; this.Text = ((int)*p).ToString(); } catch { MessageBox.Show("他のプログラムが使用中です"); } } ここでテキストボックスとかに入力したアドレスに直接干渉できる うまく使えばメモリマスターになれるなC#すごいな
72 :
デフォルトの名無しさん :2009/11/05(木) 06:58:06
メモリマスターが誕生した瞬間である。
ワロタ
すげー。 仮想メモリについて勉強しような。
>>71 それ他のプログラムのメモリを指してないと思うけど
これからもどんどん干渉してくださいね
まさにMVPにふさわしい実力の持ち主がここに!!
まぁ本気じゃないだろ だよな?
Win32sで.NETを動かすツワモノが
サブセットのs
なぜつわものなのだろうか・・・・
文字列に@が付いてるソースがありますがこれは何でしょうか? @"hoge" とかいうやつです。
>>84 ありがとうございます。なんとなくわかりました。
自分的には@は使わなくてよさそうです。
GCでぶっ飛べば。
"c:\\windows\\system32"とか書くときは @"c:\windows\system32"ってするだろ
正規表現書くときも使うしな
普段使わないけど正規表現はねぇ…
なるほど
正規表現を@なしとか読みにくすぎて泣ける
自分のXPでは、エラーが出ないのですが、 VistaのPCで何故かWebClientの例外が発生します。 自分でVistaの開発環境を持てばいいのですがそれが出来ず困ってます。
どんなエラーかをとりあえず出すべきじゃないか?
>>58 はおれじゃないです・・・荒れてしまってすいません
>>42 でとりあえず実装してますがまずいですかね?
>>94 ・・・なんでもいいけどテストちゃんとしろよな
{0:yyyy/MM/dd dddd hh/mm/ss ffff}, DateTime.Now
あー・・・やはりそうですよね; e.Massageで取得した文は WebClient要求がで例外が発生しました。 こうなんですが、 具体的な内容では無いので、どうするべきか迷ってました。
WebClientの何の処理でエラーなんだ?
メソッド、パラメータくらいかけよ
ひとまず例外のスタックトレースコピペるとかさ なんで自分で書いちゃうんだよwwww
>>98 それが特定できないんです、
エラー構文にその処理位置を特定するようにしてませんでしたので;
>>99 Webclient.DownloadFileAsync(downUri, fileName)で開始し、
イベントハンドラDownloadFileCompletedで、e.Error != nullのとき、
WebClient例外が発生します。これだけでは特定できませんか?
書き込みできないフォルダにダウンロードしようとしてるんじゃね? program filesの下とかさ
わかるかぼけ
だからメッセージだけじゃなくて例外の種類とかスタックトレースとかステータスコードとか いっぱい情報があるだろうが。 その辺を全部出せ。
正しいアクセス権がなかったらエラーになってたような気がしたが?
とにかく自分でファイルを書くときはマイドキュメントに作らないと
いやそれはどうか
VISTAでUAC切って同じことやらせてみてはどうか 恐らく制限に引っ掛かってるんじゃね?
WebBrowserコントロールで使用するプロキシサーバーの設定ってデフォルトだとIEと同じ設定になるんだけど これを自分で設定することって出来ないかな? WebClientとかHttpWebRequestだとProxyプロパティがあって設定出来るんだけどいくら探してもそれっぽいのが見つからない
c#ってすごいな。フォームを半透明にできるのか。 かわいい幽霊の画像を用意して ゆっくりと透明度を上げ下げすれば、簡単にうらめし屋のできあがりだな。
C#ってかWindowsの機能でしょw
>>104 利用者向けのメッセージだったので、Error.Messageしか表示させてませんでした。
Vistaの方に協力してもらいやってますので、それから質問するべきでしたね。
>>102 SystemDriveでルート取得して、その直下にファイルをDLしているのですが、
VistaだとSystemDrive取得出来なかったりします?
>>110 自己レス
WinInetのInternetSetOption()で出来る気がしてきたからちょっとやってみるわ
>>113 Vistaでシステムドライブ直下は書き込めないよ
Vistaのセキュリティは万全なのだ
どうやら、UACが原因のようです。
UACを無効にすると、普通に起動することが出来ました。
>>115 どうやらそのようですね・・・
ユーザに気づかれないようにファイルをDLしてきて、処理をしたかったのですが、
となると、皆さんならどこに保存しますか?
>>116 ログインユーザーのデスクトップとかマイドキュメントとか
>>117 そうですよね、マイドキュメントでやってみようと思います。
ありがとうございました。
UACを無効にすることがいかに怖いかわかるな
VISTあの場合は使う側としては異常にうっとおしいけどな・・・
うざいよりウィルスにかかってもいい人 UAC無効 普段の面倒さよりウィルスのほうがやな人 UAC有効
>>116 いやまて、ファイルをユーザーに見せたくないんなら
Temp とかある程度永続が必要なら Local AppData
あたりじゃないのか
>>94 まずいっていうか明らかにおかしいじゃん。もう正解でてるよ
intとかstring型ってSystemに入ってるみたいだが using System; を入れなくてもintやstringを使用できるのはなぜ?
>>125 System.Stringの別名がstring
System.Int32の別名がint
※規制解除かな・・・テスト兼
128 :
デフォルトの名無しさん :2009/11/05(木) 22:11:36
accessの熟練者から、 C#なんてなくてもaccess2007で十分じゃん。ランタイムも無料になったし。 と言われました。 なんか腹が立ちます。 C#の優位点を教えてください。 今、C#を猛烈に勉強しているので悔しいんです。 よろしくお願いいたします。
C#使えるようになってからにしような
Accessって何?ああ、Officeのオマケか。まだ出てたの?
較べるようなもんじゃねーよ Accessで十分な用途ならそりゃAccessでやった方が楽だ AccessでPythonの処理系作れるか?
プログラマーとかじゃなくて普通の仕事なら accessの方が役に立つだろうから その人が正しいといえなくもない
accessって2Gの壁とかいろいろ制限あったんじゃね? あと同時に複数で使うと論理破壊が起るでしょ?
AccessとC#は立ち位置が違うよな・・・ JavaとC#とかならまだ議論しようがあるけど。
Accessあるのに職場内で使うようなデータベースソフト作るのに C#とSQLServerとか使ってたら「ば〜かぁ」って言われるだろうけど それ以外使い道ないじゃんAccess
その情報はあまりにも古い
それに比べたらゲームから書類まで作れちゃうExcelの万能さは異常
結局VBAだらけになって、全部プログラムで作っちゃったほうが楽だったんじゃね?となる
VBAは使えるけどワークシート関数とか全くわからん
ExcelはVBA使ったら負け
ExcelはVBA言語によるリッチクライアントプラットフォーム
農作業車とセダン比べてどうとか言ってる感じがする
143 :
デフォルトの名無しさん :2009/11/05(木) 23:52:01
で、Accessに勝っている点って何? 劣っている点は心当たりあるけど。 …AccessはDBそのもので作業が楽。 同じものを作成するといってもC#の方が8倍くらいの時間がかかると思う。
Accessって共同作業できる?
accessでasp作れるの?
WMPlibでWMPのUIをそのまま貼り付けて、 mp3の再生を行っています。 このとき、繰り返し再生機能を実装したいのですが、 どのように書けば良いのでしょうか? また、WMPのUI上で停止ボタンが押された場合のイベントは有りませんよね。。
147 :
デフォルトの名無しさん :2009/11/05(木) 23:56:00
Windowsフォームアプリケーションを作るという前提ならば、 Accessに負ける?
148 :
デフォルトの名無しさん :2009/11/05(木) 23:57:24
>>147 負ける。
ただ、Accessのフォームはどうも見た目が安っぽいんだよね。
149 :
デフォルトの名無しさん :2009/11/05(木) 23:58:16
>>147 負けねーよ。馬鹿。
表入力は劣るけど。
AccessはC#で作れるからC#の勝ち
>>146 Settings あたりにあるだろ確か
イベントは MouseDown とかそんなのなかったか?
俺は C++ で COM 直でしかいじったことないからあいまい
だけど
152 :
デフォルトの名無しさん :2009/11/06(金) 00:08:31
accessの方が有利点が多い?
Accessの優位点ってプログラムレスでお手軽にDBアプリができる点かね。 それを言うならもうとっくにお亡くなりになったロータスのAproachは もっとお手軽だった気もしたけど。
Accessはなんとなく適当に作ってもなんとなく動いちゃうんだよな それはそれで楽っちゃ楽なんだけれど、きっちり作り込もうとすると融通が利かなかったり VBAであれこれ書かなきゃいけなかったりするのよねぇ
荒しだろ。しつけぇ
だがAccessの領域はSalesforceにとってかわりつつある
throw new ArashiException(); try{ 通常書き込み } catch(ArashiException){ むし }
>>156 salesforce は表で編集するの苦手だからなぁ
1レコードづつフォーム開いて編集するの限定なら代わりになるが・・・
何を作るのに十分なんだろうな・・・ マルチスレッドも使えないし
内部的にどういう動きしてるかしらないけどフォームやボタンのMouseClickイベントとかって while(true){ if (マウスがクリックされてる){ なんかする } 0.0001秒待機する } みたいな処理をやってるの? 裏では大量のwhile分がマウスやキーボードのチェックを行ってるの?
うん
("{0:hh:mm:ss.ffff}",DateTime.Now) hはhour、mはminute、sはsecondをあらわすのはいいとして ミリ秒をあらわすfって何の略よ?
few
fractionだろ ミリ秒ではなく秒の端数
.net Framework Compactには画像を回転させる関数がないので
http://homepage2.nifty.com/tsugu/sotuken/rotation/ のサンプルをC#で動かすためにいじってみましたが
最後のサンプルで計算領域がはずれてしまい、画像が大きくゆがむ現象で困ってます
アルゴリズムのどこかがコンパイルは通るもののCとC#の言語仕様で
うまくいかないようです
ちなみに最初に出てくるサンプルはちょっと変更を加えると動きました
高速化ってのを試したいんですが・・・
わかるわけないだろ うまくいかないコードを晒せ
では・・・
//画像回転
public void MapRotat(double A, int DstCX, int DstCY, int SrcCX, int SrcCY)
{
Bitmap BmpBufRot = new Bitmap(BmpSource.Width, BmpSource.Height);
//
http://homepage2.nifty.com/tsugu/sotuken/rotation/ // SrcCX, SrcCY : 入力画像の中心座標
// DstCX, DstCY : 出力画像の中心座標
// : 入力画像の幅高さ
int SrcWidth = BmpSource.Width;
int SrcHeight = BmpSource.Height;
// : 出力画像の幅高さ
int DstWidth = BmpBufRot.Width;
int DstHeight = BmpBufRot.Height;
// pSrcImg : 入力画像ポインタ
// pDstImg : 出力画像ポインタ
// A : 回転角度(ラジアン)
// PI : 円周率(3.14159265358979323846)
int int_sin; //SIN値に1024を掛けて整数にした値
int int_cos; //COS値に1024を掛けて整数にした値
int x1, y1; //入力画像内の座標
int x2, y2; //出力画像内の座標
int x1_mult, y1_mult; //入力画像内走査用変数(1024を掛けた値)
int StX, StY; //入力画像内の走査開始点座標
int DXX, DXY; //入力画像走査時のXループ内の増分
int DYX, DYY; //入力画像走査時のYループ内の増分
//SIN,COS値を整数に変換 int_sin = (int)(Math.Sin(A) * 1024); int_cos = (int)(Math.Cos(A) * 1024); //走査開始点の計算 StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCY << 10); StY = int_sin * (-DstCX) + int_cos * (-DstCY) + (SrcCY << 10); //Xループ内の増分を計算 DXX = int_cos; DXY = int_sin; //Yループ内の増分を計算 DYX = int_sin; DYY = int_cos;
//回転処理メインルーチン //出力画像の座標でループを行う for (y2 = 0; y2 < DstHeight; y2++) { //走査用変数の初期化 x1_mult = StX + y2 * DYX; y1_mult = StY + y2 * DYY; //走査用変数にXループ内の増分値を加算 for (x2 = 0; x2 < DstWidth; x2++, x1_mult += DXX, y1_mult += DXY) { //走査用変数から入力画像内の座標を取得 x1 = x1_mult >> 10; y1 = y1_mult >> 10; //入力画像内の座標が有効な値ならコピーを行う if (x1 >= 0 && x1 < SrcWidth && y1 >= 0 && y1 < SrcHeight) { BmpBufRot.SetPixel(y2, x2, BmpSource.GetPixel(y1, x1)); } } } Graphics g = Graphics.FromImage(BmpBuf); g.Clear(Color.Blue); int x = (BmpBuf.Width - BmpBufRot.Width) / 2; int y = (BmpBuf.Height - BmpBufRot.Height) / 2; g.DrawImage(BmpBufRot, x, y); g.Dispose(); this.Image = BmpBuf; }
170 :
rrr :2009/11/06(金) 23:25:53
rrr
あまり関係ないと思われるが × StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCY << 10); ○ StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCX << 10);
いや、「画像が大きくゆがむ現象」はともかく、「計算領域がはずれてしまい」は こいつが原因くさいか。
ありがとうございます 変更してテストしてみました やはり現象はほぼ同じです 180度回転はうまくいきます 90度回転は (x1 >= 0 && x1 < SrcWidth && y1 >= 0 && y1 < SrcHeight)の領域に入ってこないので 描画されません 中間の角度で描画されない部分とゆがむ部分がでてきます ピクセルの位置の増分を決定している変数 x1_mult y1_mult が適切でないっぽいですね しかし理屈が理解できてないのでどこが間違いかわかりません
訂正しても現象がほぼ同じなことの原因 最初から回転を考えててコピー元、コピー先ともに正方形にしてたからです たまたまですね
C#とかの仕様の問題じゃなく、単にアルゴリズムの間違いだと思う。 ネタ元ページの走査開始点の式に出力画像の幅高さが出てこないのが変。 アイデアとしては、図の通り斜めにコピーするのは納得できる。 でも、コピー先の領域(出力画像の幅高さ)を適用しないと、コピー元での走査 開始点座標が求まるはずが無い。 幾何学的意味は、回転中心を元先で合わせて、先領域を回転させて先領域の (0,0)が該当する位置を、元領域での走査開始点とするから。 よって、式が疑わしい。 回転の中心と画像の中心をごっちゃにして間違ってるんじゃないかなコレ? 書かれているように画像の中心なら幅高さとは別に用意されてる意味がない。
>>175 そうなんですか
じゃー動くやつであとはLockBitsして高速化してみます
たとえば、string変数の abc[def]ghi があるとして、 [と]の間にある文字列を取得する場合はどのように書けばいいのでしょう
いや、回転中心も原点からの座標値だから正しい。175は勘違い。
>>177 String#Substring メソッド
>>142 セダンの運転手を雇ってる人が一番エライ
Access使いだろうがC#使いだろうがただのしもべ
はいw
>>173 × int_sin = (int)(Math.Sin(A) * 1024);
× int_cos = (int)(Math.Cos(A) * 1024);
○ int_sin = -(int)(Math.Sin(-A) * 1024);
○ int_cos = (int)(Math.Cos(-A) * 1024);
× DYX = int_sin;
○ DYX = -int_sin;
× BmpBufRot.SetPixel(y2, x2, BmpSource.GetPixel(y1, x1));
○ BmpBufRot.SetPixel(x2, y2, BmpSource.GetPixel(x1, y1));
で動いた。
184 :
中学生 :2009/11/07(土) 14:36:42
じゃあセダンの運転手を雇っててACCESSとC#の使える俺が一番偉いんかったんや!!
もっと面白い事言えんのかね
名前欄に中学生とか書いちゃうような人に期待するだけ無駄
AxWindowsMediaPlayerを使い音楽ツールを作っているのですが、 プレイリストを作り順再生/ランダム再生を行おうと思い、 AxWMP.currentPlaylist.appendItem(newsong); こうすれば追加は可能ですが、 何番目の曲をプレイリストから削除することや、 現在プレイリストに入ってる曲をリストボックスに表示する方法が分かりません。 プレイリストを配列で取得・・・できるようなメソッドはありませんよねぇ・・・
SDK見ただけだけど IWMPPlaylist.Item (VB and C#) The Item property (the get_Item method in C#) gets an interface to the media item at the specified index. とか IWMPPlaylist.count (VB and C#) The count property gets the number of media items in a playlist. とか IWMPPlaylist.removeItem (VB and C#) The removeItem method removes the specified media item from the playlist. とかあるけど、駄目なのか?
Graphics
お、やっと解除された。
>>173 モバイル環境で開発してるみたいだけど、PixtureBoxもGraphicsも使えるんだろ?
そしたら拡大だろうが回転だろうがその範囲で自由にできると思うんだけど。
なぜそれくらいでゴリゴリベタなバイナリを触ろうとするのかがよく分からないな。
CompactFrameworkには回転もアフィン変換も無いんだよ
RectangleFとかPointFとかfloat座標使えないし、コンストラクタのオーバーロードも 軒並みアウトで作ってからシコシコとプロパティ設定とかだしな。 まあしかし、手作り感がたまらないという。なんというかマゾヒズム?
VisualStudioのc#で実行したら binのDebutにexeができて ビルドを選んだらReleaseにexeができるけど ビルドで作られたexeとDebugのexeはなんか違いあるの?
それは自分で設定する。最適化の有無とかDEBUG定数の定義とか。
まあC#の場合は大した違いはない
191です AxWMPのプレイリスト機能を使うのではなく、 配列でプレイリストのかわりにURIを持ち、 PlayStateChangeイベントハンドラで 再生終了後、配列から次のURIを読むようにしているのですが、 axwmp.Ctlcontrols.stop(); axwmp.URL = SongsPlaylist[i].ToString(); axwmp.Ctlcontrols.play(); この最後のplayメソッドが働らいていないようです。 これはどうすれば良いでしょうか?
BeginInvokeでplayの呼び出しを遅延させる
>>202 ありがとうございます。
URIが送られてPlayStateChangeイベントが発生したからのようですね。
初歩的なことでした;ありがとうございました。
VB、C#とやってるんですが、 次手を出すなら何が良いと思いますか?
他の言語に手を出す前に、VB と C# を究めたら?
何がやりたいかによるんじゃ? .NETつながりでIronPython、、つまりPythonとかどうよ
>>204 プログラミング言語はプログラムを作る道具であって、
それに手を出すこと自体に意味があるわけではないよ。
とはいえ異なるプログラミング言語に触れることで思考の引き出しは増えていくので、
暇があるときに他の言語を試してみるというのも悪い話ではない。
繋がり重視ならIronPython。 引き出しを増やすならHaskellを勧める。
色々触るのもいいけど、ひとつを極めるのも面白いと思う
.NET Compact Frameworkネタでもうひとつお願いします キーロックと画面を横にしたりするのを実装したいんですが どうしたらいいんでしょうか? さっきから探してるんですがヒントさえ見つかりません
言語なんてどうせ手段なんだし極めるもなにもないような・・・ オブジェクト指向を極めたぞ!とかならまだしも。
だよな いかに優れたアプリケーションを作るかの方が大事だよ
C#極めたってのがどのレベルを指すのかはわからんけど(言語仕様の把握??) .NETを極めたぞ、とかならそれなりに意味があると思う。 それだけでも仕事取れるんじゃない?
いやいや、例えば車にだって低回転時のトルクがどうとかステアリングがどうとか 車種によって特性があるじゃないか。 車なんてどうせ手段だし極めるもなにもないような・・・ 運転を極めたぞ!とかならまだしも。 と、特定車のスレで言い放っているのと同じだぜ、それ。
自分で言ってておかしいと思わないのかな 手段を極めることとは、すなわち生産性を高めることだろ
>>211 >オブジェクト指向を極めたぞ!
すごく胡散臭さを感じるw
極めるなんて言う程奥深いか? 生産性高めるのって言語に対する習熟より他の部分に依る部分の方が大きくない?
極めるとか高校生が言いそうですね
>>217 よくわかってないなら黙ってろカス
お前がC#の深さを全然知らんだけだろ
C#の深さwwww マジレスすると、VB、C# ってきたらあとはPython、Perl、Rubyあたりのスクリプト言語に慣れとくと 色々便利じゃないかね。
言語を究めたって言われてもいまいちイメージできない その言語つかって思い通りのソフト作れるってこと?
だとしたらだいぶ浅いな。
エスパーレスが出来ることだろ
自分で処理系作れたらおk
極めたっつったら、その言語のコンパイラーを自作しちゃうくらいの勢いだな
言語極めててもその言語のコンパイラは作れないだろ。 もっと別種の知識が必要で、それさえあればあとはその言語の仕様書さえあれば 極めてなくても作れると思うぞ。
ネタだろw
228 :
デフォルトの名無しさん :2009/11/08(日) 17:20:48
C# を極めてもねぇ…。 極めるってほどじゃないと思う。 言語を極めてもクラスライブラリを使いこなせなけりゃ意味ないんだから .NET の CLR と クラスライブラリを極めないと…。
コアとあなたは、クラスメイト♪
CLRの理解を深めるといい。
Form_Load後、300ミリ秒程度間を開けて処理をしたいのですが、 それだけのためにtimerを利用するのもどうかと思いますし、 同じスレッドで他の処理はしたいので、Threading.Thread.Sleepは使えません。 こんな時に使えるモノはないでしょうか?
C#極めましたっていったらまあ.NET極めましたって意味に取っちゃうかな
よっぽどヒマならアセンブラ辺りやっとけば。 その上でネイティブの C をちゃんと覚えれば無敵状態になれるかもよ。
ネイティブのCって開発環境無いよね
いくらでもあるだろ。
>>231 用途に合うかどうかは知らないが、
フォームの表示が済んだらすぐ程度でよかったらShownイベントでいいんでない?
プロパティの get 内でウェブアクセスして情報取得をしたいのですが、問題ありますでしょうか? それともメソッドにすべき?
>>237 それは試してましたが、
Loadから呼ばれる関数内から300ミリ待たせたかったので、
Shownだと早すぎてアウトみたいです。
とりあえず暫定的にタイマー使っておこうかと思います。
>>238 さすがにそれは絶対ダメ
メソッドどころか専用のクラス作ってもいいくらいだ
>>240 だめですか・・・
大人しく SetXX と IsXX を作ります。
ガイドライン見てみるとたしかに書いてありますね。
http://msdn.microsoft.com/ja-jp/library/ms229054.aspx より
>以下の場合は、プロパティではなくメソッドを使用してください。
> 操作がフィールド セットの場合よりも格段に低速の場合。
> スレッドのブロックを避けるために非同期バージョンの操作を提供することも検討している場合は、
> プロパティでは操作の負荷が大きくなりすぎる可能性があります。
> 特に、初期化時以外にもネットワークやファイル システムにアクセスする操作は、
> 多くの場合、プロパティではなく、メソッドにする必要があります。
多くの場合って書いてあるけど、例外的にOKな場合もあるんだろか・・・
バインディングやリフレクションの都合でどうしてもプロパティにしたい場合はあるだろうな
じゃあ、form上の複数のコントロールのenable値を変えたい時にプロパティで設定するのはおk?
>>243 論理値でだとすると微妙。
一度にfalse/trueにする機能ならメソッド推奨。
複数コントロールのenable値の組み合わせは論理値じゃ返せないだろうし、
そしてget無しのset専用プロパティはガイドライン違反だから。
※ 無理矢理にでも返すとか言い出すなら「ご勝手に」かな。
副作用起こすプロパティ作って、うまいことやった気になるのは初心者によくあること HogeControl.Enadled = true; これで他のコントロールが無効になったり ネットワーク通信始めるようになったら、次にソース見たときに それが本当に何をやっているのか中まで全部見ないと理解できないものになる 小さいプログラムのうちはなんとかなるが、大きくなるにつれて たまねぎの皮を剥くような精神力の戦いに引きずり込まれることになる
>>245 どういう意味で「副作用」と言っているのか不明瞭な気がするが、
それは抽象化と命名が適切かどうかという問題であって、
「それ」がプロパティかメソッドか、という問題ではないと思うが。
メソッドは操作、プロパティはデータを表すのが一般的だとガイドラインに明記 されているし、俺もそう思う。 抽象化と命名の問題かもしれないが、区別して使うに越したことはない。
248 :
243 :2009/11/08(日) 22:51:48
>>244 一括ではない。
組み合わせをcase式で処理してる。
さらにいえば、それは親フォームにある共通のコントロール。
getsetで渡す値はenumな値で表示モードです。
子フォームからgetsetして共通コントロールの制御を親のプロパティで行い、子は自formのコントロールの制御をおこなう。
状態としてコントロールの管理をしたかったんた゛。
それはイベント使った方がいい気がする せっかく親フォームを抽象化しようとしているみたいなのにもったいない
XmlSerializerでメンバをシリアライズ/デシリアライズする際、 独自の日付方式で書かれた文字列をDateTimeに変換したい場合に 属性のみの記述で変換することは不可能でしょうか? それとも大人しくラッパークラスを作るしかないんでしょうか? ・日付文字列(W3Cで定義された形式とは違う) Sat Jan 24 22:14:29 +0000 2009 ・メンバ [System.Xml.Serializer.XmlElement("date")] public DateTime Date {get; set;}
>>251 言ってることが支離滅裂に聞こえる。
独自の日付方式で書かれた文字列って何?
>public DateTime Date {get; set;}
このプロパティの型はDateTimeであって文字列ではないと思うけど。
まあ、アメちゃんに国際規格とか言っても、北米が全世界で他は異世界と思ってるしな。
DateTimeは構造体ダス
256 :
251 :2009/11/09(月) 00:30:22
>>252 XML上の「文字列」をDateTime型のプロパティにデシアライズしたい、というわけです。
その際、W3Cで定義された形式の日付文字列は特になにもしなくてもDateTime型に相互変換出来るんですが、
>>251 で挙げてるようなW3C標準じゃない形式の場合は変換してくれないんですよ。
で、属性にフォーマット指定したり変換用のデリゲートとかクラス指定したりして
シンプルに書く方法はないのかなぁと・・・
>>254 REST API実装してるアプリが返す日付形式って結構ばらばらな上適当ですよねぇ。
DateTimeの書式を決めるカルチャ設定はスレッドごとに云々 DateTimeFormatInfo使えんかね
>>256 そういうことなら、(当たり前のこと言うなと思うかもしれないけど)
>public DateTime Date {get; set;}
このプロパティにはXmlIgnore属性をつけておいて、このプロパティの値を
「独自の日付方式」の文字列で設定/取得するデシリアライズ用のダミーの
プロパティーを用意するだけじゃないの?
259 :
251 :2009/11/09(月) 01:04:58
>>257 シリアライザの方はカルチャ設定の書式ではなくW3Cの仕様にしたがって変換してるみたいです。
>>258 そうするとパブリックな日付のプロパティが2つ出来てしまうわけですよね。
あんまり無駄なパブリックメンバは作りたくないというのが正直なところです・・・
とりあえず、IXmlSerializable を実装した DateTime の子クラスを作って使うことにしてみます。
W3C規定の形式以外はこれが正解になるんだろか?
260 :
251 :2009/11/09(月) 01:07:02
って、DateTime は継承出来ませんね・・・
それは255で既に指摘されてるじゃん
262 :
251 :2009/11/09(月) 01:30:57
ググったところ、 DateTimeをラップして IXmlSerializable を実装するクラスを書くか 日付のプロパティ持ってるクラス自体で IXmlSerializable を実装して 他のプロパティでも属性使って楽するのを放棄するかの2パターンぐらいみたいですね。 うう、なんかすっきりしないなぁ。
以下のようなクラスがあった場合 public class A { public A(string id) {...} public string Id {get; set;} } public class B { public B(string id) {...} public string Id {get; set;}; } A.Id と B.Id がお互い代入出来なくするためにはそれぞれクラスや構造体(AidとかBidみたいな)を 作るしかないのでしょうか?
>>263 イマイチ意図が読み取れないけど
GETだけのプロパティアクセスはだめなの?
>>264 Cのtypedefみたいなことがしたかったんですが、C#のusingだと別名なだけで
相互に代入してもコンパイルエラーにはならないみたいですね。
やりたかったことは、以下でした
・A.IDとB.IDはお互いに採番体系が異るのでコード中で混ざらないようにしたい
(コンパイラにミスを見つけさせたい)
・ID自体にはメソッドもプロパティも不要なのでなるべくクラスは作りたくない
・プロパティはセッタもゲッタも必要
一番目か二番目を妥協するしかないのかしらん
えっ
ますますわからんw
メリットがいまいちわからんな…
>>269 通常はAPIのSetWindowsHookExを呼んでキーボードフック(WH_KEYBOARD_LL)でやるんだけど
WMだとどうかな。一応、非公式でこのAPIそのものはあるみたいだが。
>>268 たとえば、A.IDとB.IDを受けとってなにかするメソッドHogeがあったとして、
> public static void Hoge(string aId, string bId) {....}
コーディング中に第一引数と第二引数が逆になっちゃってもコンパイル時にはねて欲しいんですよ。
この場合はプロパティを直接渡すんじゃなくてクラスで渡せば問題ないですが。
typedefってエラーになったんだっけ?
>>272 俺も疑問に思ったんで今試したが普通に通るな。警告すらでなかったぞ。
#cygwinのgccで警告最大でコンパイルした結果。彼は何か勘違いしてる気がする。
クラス(とかstruct)で渡せばいい話じゃない
IDだけのクラス作ってもいいと思うよ IDクラスからAIDとBID継承させるとか
>>273 VC++のclで警告レベル最大でコンパイルしても警告出ないね
C#やJavaは基本型もオブジェクトとして扱っていることが優れた言語仕様だと思うし intという抽象度で表現出来る範囲を逸脱したオブジェクトなら専用のクラスにすべきだと思う
> 基本型もオブジェクトとして扱っている 思いっ切り間違ってるんだが
Javaとは違うのだよ、Javaとは
構造体なんか廃止すればいいのに
>>270 ありがとうございます
一度キーワードがわかると情報がざくざくあつまってきますね
SetWindowsHookExを読んでフックする方法の弱点として
フックを登録できるのが1つだけのようです
なので他のアプリが使ってたら不具合が出たりするようです
サブクラス化というキーワードも出て来ましたが、これは
フックするというより盗み見するだけですか?
情報が集まったので方針を決めたいと思います
ありがとうございました
そんなことないです グローバルフックもローカルフックもCallNextHookExってのを使ってチェーン状に管理しています サブクラス化はイベントの起動に利用するだけでメッセージ潰したりはできません
まあキーロックが目的なら握りつぶすわけで、どんな方法でも 他のキー入力当てにしてるプロシージャに影響出ないわけないなw
private ContextMenuStrip cms_tasktry = new ContextMenuStrip(); と自分で書いて関連付けた時に最初のクリックではメニューが表示されず 二回目以降にしか表示されるのですがこれを最初のクリックで表示する 方法はないでしょうか?。 また以下のように書いた場合にexitをクリックしてもタスクトレイのアイコンが 消えないのですが、これを消えるようにできないでしょうか?。 private NotifyIcon tasktry = new NotifyIcon(); cms_tasktry.Items.Add("Exit").Click += delegate(Object obj, EventArgs ea) { tasktry.Visible = false; Close(); };
tasktry.Dispose() 呼んだらどうかな。
って
>>284 のだけで1回のクリックでメニュー出るし終了時に消えたけど。
環境は?
Openingで書いているせいでしょうか?
private void Form1_Load(object sender, EventArgs e)
{
cms_tasktry.Opening += new System.ComponentModel.CancelEventHandler(cms_Opening);
}
private void cms_Opening(object sender, EventArgs e)
{
cms_tasktry.Items.Add("Exit").Click += delegate(Object obj, EventArgs ea)
{
tasktry.Visible = false;
Close();
};
}
>>285 だめでした
>>286 XP Ver2010 SP3
VC2010
です。
Openingでやってる理由は? Load時に一緒にやればいいじゃない。 アイコン消えない理由はそれとは違うようだが。
>>288 ログイン処理した時にメニューを書き換えているからですがnameでTextを
書き換えたり非表示にしたりする手もありますね。
まあ何回かやってみたけど、Openingイベント時にメニューが1つもないと出ないね。 その時に追加しても遅いみたい。
>>290 !するとLoad時にゴミを1つつけておけばいいのかな
試してきます
de?
System.Threading.Thread.Sleep(3000); this.Storyboard1.Begin(); このコードは3秒待つまで2行目は実行されないですよね?
試せば?
普通、次の行の処理はしないと思うんですが、2行目の処理が3秒飛ぶんです。 あり得ますか?
飛ぶなんて俺様用語で言われても 飛びます飛びますってかw
GUIのスレッドでSleepしちゃダメだよ Storyboard使ってるんだったら3秒後にアニメーションをスタートするアニメーションを作れるだろ
記事クラスと、記事のコレクションである掲示板クラスがあるとして、 記事の削除メソッドを実装するとしたら記事クラスと掲示板クラスの何方が適当でしょうか?
クラスってなんですか?
掲示板クラスの方に実装するのが適当
>>297 GUIのスレッドではSleepは機能しないと覚えておけばいいんですか?
この3秒にSleepではなく処理を入れたいんですが、
まさかGUIスレッドの中では同時に処理できる行はガンガン並行処理して次の行、次の行が実行されていくんでしょうか?
めちゃくちゃなんですけど
GUIだとGUI自体の機能もSleepした後でその後の文が実行される
違う。スリープさせるとGUIがフリーズするからやってはいけない。 this.Storyboard1.Begin();は絶対に3秒経過するまで実行されない。その間GUIはフリーズする。 基本的にSilverlightは(Silverlightのスレに書き込んでるだろ)GUIスレッドでのSleep禁止ということになってるから 何が起こっても文句は言えない。WPFやSilverlightのアニメーションは時間に依存するからややこしい。
WMPコンポーネントを使ってmp3プレイヤーを作っているのですが、 WMP9からWMP11にアップデートすると、 そのソフト自体の起動や処理が重くなったように感じます。 これは仕方無い事なんでしょうかね?
自分でデコードしてDirectSoundで鳴らしたら
お前のプログラムがめちゃくちゃなんだろうよ
DirectSoundはプレイステータス変更時のようなイベントハンドラは提供されてますか? それが無いと不便で不便で・・・
>>304 silverlight限定の仕様だったんですね
FormGUIの基本なのかと思っちゃいました。
silverlightと書き込まなかったので一生解決できないところでした
ありがとうございます!
>>308 いやDirectSoundって自分でバッファに波形データを直接書き込んでいくんだぞ
何でもできるが何もできない
>>309 Silverlightに限らずGUIで時間のかかる処理をしてはいけない。
一応WPFやWinFormsではそれによってGUIがフリーズするのを回避する方法が用意されてるけど
やらないに越したことはない。
Silverlightに限ってはそういう回避方法が無いので絶対ダメ。
めちゃくちゃとむちゃくちゃってなにか違うの?
>>310 ありがとうございます。
DirectSoundで調べてみたいと思いますが、なんだか難しそうですね。。
滅茶苦茶 無茶苦茶 滅無
C#でメッセンジャーみたいな物を制作しようと思い、 サーバーの部分だけ作ってみてビルドして、実行するとフリーズしてしまうんですが、 原因が分かりません。教えていただけないでしょうか?初心者ですいません。 public void ServerStart() { System.Text.Encoding enc = System.Text.Encoding.UTF8; int port = 9991; TcpListener listener =new TcpListener(IPAddress.Parse("127.0.01"), port); listener.Start(); TcpClient tcp = listener.AcceptTcpClient(); NetworkStream nss = tcp.GetStream(); MemoryStream mss = new MemoryStream(); byte[] resBytes = new byte[256]; int resSize; do { resSize = nss.Read(resBytes, 0, resBytes.Length); if (resSize == 0) { textBox2.Text = ("クライアントが切断しました"); //Console.ReadLine(); return; } mss.Write(resBytes, 0, resSize); } while (nss.DataAvailable); string resMsg = enc.GetString(mss.ToArray()); textBox2.Text = resMsg; mss.Close(); }
TcpListener.AcceptTcpClientメソッド AcceptTcpClient は、データの送受信に使用できる TcpClient を返すブロッキング メソッドです。ブロックしないようにする場合は、Pending メソッドを使用して、接続要求が受信接続キュー内で使用可能かどうかを確認します。 ではないのか?
>>315 解決できるかどうか分かりませんが、Pending メソッドについて調べてきます。
たとえPendingで確認しても、GUIスレッドで処理してたらクライアントが切断するまで止まるじゃん
非同期処理にしろよ・・・・
クライアントからの切断は取れたり取れなかったりするからね
320 :
315 :2009/11/10(火) 15:30:23
321 :
314 :2009/11/10(火) 15:31:37
↑314でした。すいません><
非同期通信と通信での非同期処理は別の話だからなw
流石に一緒にする奴はいないと思うぞwwww
ここにいるぞ
BackgroundWorker_DoWorkでList<>.Sortを実行中にキャンセルボタンをおされたらを処理を中止したいんですが 何かいい方法ないですか? 自分でループしてる処理ならBackgroundWorker.CancellationPendingをチェックして終了すれば いいけど、List<>.Sort の実行中は何もできないんで。 次の様な処理書いてます。 private void backgroundWorker1_DoWork( object sender, DoWorkEventArgs e ) { BackgroundWorker worker = sender as BackgroundWorker; List<string> list = new List<string>(); Random random = new Random(); for( int i = 0; i < 1000000; i++ ) { if( worker.CancellationPending ) { e.Cancel = true; return; } list.Add( string.Format( "{0}";, random.Next( 1, 1000000 ) ) ); } list.Sort( delegate( string s1, string s2 ) { return int.Parse( s1 ).CompareTo( int.Parse( s2 ) ); } ); e.Result = list; }
デリゲートとか何の役にたつんだよぽ
なきゃないで問題ない
デリゲートなかったらメソッド持ってるクラス渡すか継承して実装するかの二択になるからなぁ。
おっ、書けた。
>>326 yield を使って止められるようにすればいい。
貼ったソースはWorker操作のためのサンプルだと理解しているが、
もし本気コードならいちいちintに変換しながら比較するなんて馬鹿なことはやめたほうがいいぞ。
一括でソート済みsetに放り込んで再び取り出したほうがよほど速い。
yieldでどうやってlist.Sortを止めるんだよ 無理矢理止めるならlist.Sortに渡すコールバック内で例外投げるくらいしかないと思う
現在アクティブなコントロールが、どの型か調べて 型に応じて動作を行うというものを作っております たとえば、WebBrowserならMessageBox.Show("WebBrowser","種類"); みたいな感じで アクティブなコントロールをthis.ActiveControlで取得まではできるのですが その取得したコントロールの型同士を比較するにはどうすればいいでしょうか
あるオブジェクトが特定の型かどうかを調べるにはisを使う あるオブジェクトの型名などを取得するにはGetType
>>334 if(this.ActiveControl is WebBrowser)
で比較できましたありがとうございました
336 :
デフォルトの名無しさん :2009/11/10(火) 22:05:32
ボタンをショートカットに対応させたいんだけど ボタンをクリックしたことにするにはどうすればいいでしょーか
あらま さげわすれごめんなさい
そんなことしなくてもボタンのTextの最後に&Xを付けるだけ(Xは任意のショートカットキー)
フォームかコントロールでキーイベント拾ったら?
あーあー、あったな、そんな機能。
WebBrowserで送信する内容を取得したりすることってできますか? 主にヘッダーのことですが
WinPcap
>>342 すいません、WebBrowserコントロールの話ですorz
マイクロソフトのWebBrowserは便利ではあるのですがなかなか使いづらい・・・
使用制限の無い便利なブラウザコントロールないかなあ・・・・
関係ないが
>>343 ってVIPのスレにも来てなかったか?
IEだろうとWebBrowserだろうと普通にネットワーク経由するなら取得できるじゃん
>>344 ここで答えもらえなかったから行ったんじゃないの?
ほんと関係ないな
System.Xml.Linq.XElement.Load メソッドで発生する全例外について知る方法はありますか? MSDNに例外情報は記載されていなかったのですが、System.IO.FileNotFoundExceptionが発生しました。 System.IO.IOExceptionを継承した例外やArgumentNullException等が起きると予想できますが、 他にも発生しますか?
XLINQでは,読み込みは基本的にXmlReaderに準じる ArgumentExceptionやInvalidOperationの派生型が発生する場合は 使い方に問題があるということだから原則キャッチ禁止
>>347 目的でアドバイスが変わる
現段階のという条件をつければ解析して
可能かもしれないという話は別にして
ドキュメントに書いてないということは仕様として決まってないということなので 解析してキャッチしたりするのはあんまり良くないな XElement.Load(string)はファクトリーメソッドということになってるXmlReader.Createに依存してるので 実際何やるかわからないんだよね 不安なら他のオーバーロード使ったほうが確実
>>348-350 ありがとうございます
例外のStackTraceを見ると、
場所 System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings)
場所 System.Xml.Linq.XElement.Load(String uri, LoadOptions options)
場所 System.Xml.Linq.XElement.Load(String uri)
となっていましたが、Createメソッドの説明に無い DirectoryNotFoundException が発生しました
XmlReader.Create を直接呼び出しても DirectoryNotFoundException が発生しました
説明にあるFileNotFoundException と DirectoryNotFoundException には直接の継承関係は無いはずなのに
該当箇所は、何らかのエラーが発生したら、メッセージボックスを表示して強制終了する積りです。
Windowsのアプリケーションを作るのは Windows APIと.NETの二種類があるの? Windows APIって.NETより難しいんでしょ?
やる気が無い奴は消えろ
C#で設計を学びたいのですが、何から手を付けたらいいんでしょう? 自分で考えたモデリングが正しい(あるいは悪くない)ことを客観的に測る指標などは存在するのでしょうか? クラスを書くたびに間違ったことしてるんじゃないかと不安になります。
間違ってるということは間違ったときに気付けば良いじゃないか
こればかりは経験も必要だしな
>>355 それだと動けばいいじゃん、になっちゃいません?
動くけど設計上よろしくない(拡張性/保守性がないとか)ってのをどうやって自分で認識したらいいんでしょう?
C#でコンデンサー作った。電気がたまります
たしかに「もっと優れたやり方があるのでは」って不安はあるわな
多少のプログラム経験年数はあるが、完璧に満足したソースは無い それが成長というものじゃないのかね
ここでそういう高尚なこと聞くのが間違いだろJK
>>360 その"満足出来なかった"っていうのは何をどう評価して満足出来なかったんでしょうか?
そこらへんが肝な気がする。
>>357 >それだと動けばいいじゃん、になっちゃいません?
ならないよ
間違ってるのに間違ったことに気付いていない場合や
判ってて直そうとしない場合はその限りではないが
自分で問題意識を持ち続けて常に改良を続けるのが
本来のオブジェクト指向的リファクタリングの発想
莫大な金と人と時間をかけたOSですら日々アップデートなどしてるのに 完璧なソースだと?
_ □□ _ ___、、、 //_ [][]// ,,-―''':::::::::::::::ヽヾヽ':::::/、 誰 作 こ // \\ // /::::::::::::::::::::::::::::::i l | l i:::::::ミ だ っ の  ̄  ̄  ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;| あ た ソ ―`―--^--、__ /:::::::::=ソ / ヽ、 / ,,|/ っ の | /f ),fヽ,-、 ノ | 三 i <ニ`-, ノ /、-ニニ' 」') !! は ス i'/ /^~i f-iノ |三 彡 t ̄ 。` ソ ハ_゙'、 ̄。,フ | ) を ,,, l'ノ j ノ::i⌒ヽ;;|  ̄ ̄ / _ヽ、 ̄ ゙i ) ` '' - / ノ::| ヽミ `_,(_ i\_ `i ヽ、 ∧ ∧ ∧ ∧ /// |:::| ( ミ / __ニ'__`i | Y Y Y Y Y ,-" ,|:::ヽ ミ /-───―-`l | // | | // l::::::::l\ ||||||||||||||||||||||/ | // | / ____.|:::::::| 、 `ー-―――┴ / __,,..-'| /゙ー、,-―'''XXXX `''l::,/| ー- 、__ ̄_,,-"、_,-''XXXXX | /XX/ XXXXXXXXXX| | _, /ノXXXXXXXXXX|
>>363 経験的な先読み予想があって、「嗚呼本当はこういう構成にしたいんだけど
後で使わないかもしれないからオーバースペックにする必要も無いか」だとか
「今の構成だとこうした方が早道だ」とか
「正規化よりもリアリティ」だとか
色々あって理想通りにはいかない事なんてあるある探検隊
学校のテスト勉強と違って正解なんて相対的なものだ
何かに気づいて知ることで考え方やアプローチが広がるから、
経験無い内に全てを網羅した答えなんて得られないと言わざるを得ない
‥って言ってもあきらめろって意味じゃないのはわかるよな
10年くらいかかりますか?
それを知っているのは自分だけ
自作のコントロールをデザイナで表示できるようにするにはどうすればいいですか? タブコントロールを継承した、TabDXを作ったのですが デザイナから直接これを使うことはできますか? 現状方法が分からず、一度普通のTabを配置して、TabDXにすべて置換するという作業を行っていますが なんかとても頭悪いことをしているような気がしまして
DesignTimeVisible でぐぐれ
>>371 うああああああああああああああああああああああああああああああああああああ
今までコツコツ作ってきた200個近くのコントロールが全て表示されました
これで置換作業とはおさらばです!ありがとうございました!
あ、あまりにもうれしすぎて忘れてた クラス内に public abstract bool DesignTimeVisible() { return true; } を追加 それだけでした
なんか関係無い俺でもうれしくなっちゃったw
ちゃんと設計の勉強したらC#で彼女が出来ました
>間違ってるのに間違ったことに気付いていない場合 これどうやったら間違いに気付くんだ? >自分で問題意識を持ち続けて常に改良を続ける その問題意識ってのが間違ってたらどうするんだ? 例えばドメインモデル貧血症なんかはどう考える? 全然問題無いじゃん!って言ってる人もいるけどそういう人達は間違ってるの? それともそんな単語作りだした側が間違ってる?
デザパタの本でも読むのがいいんじゃないかなー GoFのじゃなく設計のパターンの方 仕事で設計してるならいいけど個人で作ってる場合は 本だのネットだの勉強会だのに頼るしかないね ダメ出ししてくれる場が無いからつらいのう
オープンソースのプロジェクトでも参加すればー
方法はどうあれ適当な単位での切りわけさえできてれば破綻しない 個々が少々ダメでも他に影響しない限り問題ない
ぶっちゃけ仕事じゃなく個人でやってるなら正しい設計なんて出来なくても問題ない。 外から見て問題のある動作するとかならともかく。 そんなことより楽しくて役に立つプログラムを素早く作れた方が評価されるよ。
あるクラスを継承してさらにインターフェイスを実装ってできるんだっけ? public class AAA: System.Windows.Forms : IHogeHoge みたく
>>381 public class AAA : System.Windows.Forms, IHogeHoge
もちょっと勉強しろよと
>>382 サンクス
そういう風に実装する記述見当たらなかったんでちょっと聞いてみようとorz
頑張って勉強するよ
間違ってるかどうかは環境によって変わることもある 間違いに気付かない人はある意味閉じた環境にいるニートみたいなもんで幸せな人なんだろう そんなのがプロジェクトに参加したらアホ呼ばわりされるんだろう PHPとかRubyとかにいっぱいいそうだ
>>384 >間違いに気付かない人はある意味閉じた環境にいるニートみたいなもんで幸せな人なんだろう
これ本当にそうだよなぁ。
良い意味でも悪い意味でも。
気付かなくても問題が無い=それで良いってこともあるしね。
ポトペタで作ったソフトのお陰でチーム全員が残業から開放された!なんて状況下で
こんなださい設計のソフト作るやつはクズだね、とか言ってもしかたないし。
あと他人と仕事するならどっかの時点でアホ呼ばわりされて間違いに気付かないとだな。
そういう意味じゃオープンソースのプロジェクトに混ざるってのは悪くないのかもしれん。
別にプログラミング自体が目的じゃないからな 科学技術計算のプログラムなんか想像を絶する汚さ
C# からEXCELにデータ突っ込んでグラフ作って印刷しようとすると結構めんどく背ぇ…
CSVにでも出力しといてVBSに投げるのがお勧め
餅は餅屋ってことですな
>>388 のが楽にできそうだ・・・・
COMは開放やら何やら考えてるとすげぇめんどくさいし色々怖い
データファイルに落として
C#→EXCEL起動→強制的に内部の関数呼ぶとか、ボタン押したことにしてVBA実行→(゚д゚)ウマー
とか出来るんだろうか?
だからVBSならVBAと同じだしいちいちマクロ作らなくていいから綺麗じゃん
>>391 そっか、作っておいたVBSキックすればいいだけか
それで検討してみよう
サンクス!!
>>389 いいこと言うなあ。
csvで出力して、Process.StartでExcelを起動。これで十分だな。
> C#→EXCEL起動→強制的に内部の関数呼ぶとか、ボタン押したことにしてVBA実行→(゚д゚)ウマー 出来る
vstoでもよい
VBSで書いた方がC#より簡単とかお手軽とか思ってるのならよくわからん発想だな。 どう考えてもC#の方が簡単だと思うんだが・・・ 自動記録したマクロ(VBA)をアドインで保存しといて、それを使うってのなら まだ話も分かるんだけど
MakeTransparentでPictureboxの画像の背景を透明にすることはできたんだが Clickイベントを画像の中だけで起こしたいんだけどどうやりゃいいの? 画像をクリックしたらなんか処理したいんだが PictureBoxが四角形だから画像からちょっとはみでたところでもクリックイベントが発生しちゃってちょっと格好悪い。
>>397 クリックされた位置が透過色だったらイベントを握りつぶすだけじゃないのか?
もしくは、最初に非透過部分のRegionを作っておくか。
人に聞かなきゃならん問題とも思えんが。
kwsk
400 :
デフォルトの名無しさん :2009/11/12(木) 20:41:57
印刷のロジックを組んでいます。 x、y座標を、紙の端から数えるようにしようとしたら、印刷可能範囲を(0,0)と捉えているみたいです。 紙の左上端を起点にするにはどうすればよいでしょうか? または、印刷可能範囲の左上端が、用紙の左上端からみてどの座標にあるかを取得する方法は ありますでしょうか? よろしくお願いいたします。
HardMarginX,HardMarginYでいけたはず。
それはプリンタドライバが知っている世界では てか可能範囲の余白を知ってどうしたいんだ セットされた紙次第なのに
言語も不明なのによく答えたな
>>403 は勘違い。別のスレと間違えてた‥ orz
>>402 何いってんの。
例えば官製はがきの枠内に郵便番号が印刷できるのはどうしてだと思ってるんだよw
pictureBoxを2個用意して 片方の画像から片方の画像へ移す処理をしたいのですが 上手くいきません。 AllowDropがpictureboxには用意されていないようでどうしたらいいのかも わからず… 何か良い方法ありませんか?
>>406 移すってどういう事をしたいのか正確に
ファイルの移動?ビットマップデータのコピー?
ドラッグドロップじゃないと出来ない処理?2つのコントロールは同じアプリケーションの同一フォーム?
自分のアプリケーション内でのドラッグドロップは基本的に自由 自分でマウスイベント拾って好きなように実装するんだよ
>>406 picturebox1.image=picturebox2.image
これでいけるよ
410 :
デフォルトの名無しさん :2009/11/13(金) 01:26:20
>>405 それってプリンタ毎に変わるでしょ?
ハード的な要因でドライバが設定した原点(0,0)を
ソフト側で変更なんて出来るの?
そういうのはドライバというソフトがやる
c++ではクラスのメンバにアクセスするとき->なのにc#だと.なんだね。 フォーム1ロードイベントにLabel1.Text="Hello"; ってC#そのまま書いたらコンパイル無効 thisも必ずつけなきゃいけないっぽい C++ this->Label1->Text="Hello"; C# Label1.Text="aaa"; これだけみてもC#とC++はCという名前が共通についてるだけで 中身はかなり別言語なんだなぁ。
413 :
デフォルトの名無しさん :2009/11/13(金) 01:58:19
>>411 アプリって言い直したら気が済むのでしょうか
>>412 言ってることめちゃくちゃだが
独り言ならチラシの裏にしてくれ
ClickイベントとMouseClickイベントはどうちがうんだい
フォーカス当ててEnterキー押した時なんかにはClickしか発生しない。 詳しくはMSDNのClickイベントとMouseClickイベントのとこに書いてある。
コントロールによって違うから不用意に回答できないと思うが
MSDN読めと書いてあるじゃないか
ラベルはハンドル型だから厳密にいうとC++(非CLI)の->とも意味が違うんだよそれ C#にも一応->演算子はあるけどこちらはポインタにしか使えない(それが本来の使い方)
プロパティで private int age; プロパティのset部分に if(value>100) age=100 ってやって、これ以外にageを設定するメソッドなどがなければ みたいにやれば、外部クラスからは絶対にageを100より大きく設定できることはないよね? それとも特殊な状況で変わったりしちゃう?
大丈夫じゃねーかなーと思ったけど BinaryFormatter使ったらprivateなフィールドもシリアライズできるから違う値も入れられるかも知んない 試してないから見当違いの可能性大
List<T>で、必要上インデックス0が最後尾 つまりList<T>[0]がList<T>[List.Count-1]になるようなクラスを作りたいんですが とりあえず内部にList<T>をもっといて読み出すときだけ逆になるようにして対処しようとしてるんですが、 <T>の部分の実装の仕方が見当が付きません。 なにかヒントもらえませんか?
横着しないで地道にList.Count-index-1を入れればいいだろ
C#の配列機能ってすごすぎるだろ フィボナッチの数列の第一項から第100項まで1秒以内のあっというまに計算できるとか便利すぎるな。 マジC#最強だな
public class MyClass<T> { public T Value; public MyClass(T v) { Value = v; } } がぐぐったら出てきました^^;
C++のテンプレートってなんでC#だとジェネリックって名前変えてるんだ? まったく同じに見えるんだが何か機能面で違うのか?
いや機能全然違うから。 っつかテンプレートじゃないから。
まあjavaのジェネリックと比べたらかなりテンプレートに近いけどな
なんでジェネリクスとテンプレートが同じに見える奴がいるのか
HttpUtilityがusing System.Webに存在しないようなのですが VS2010では他に移動しましたか?
参照設定した?
C#2008ExpressがインストールしてあるPCに VS2005Stdを後からインストールしてもトラブル起きませんか?
気になるならvirtualPCにでも入れろ
不具合は起こらないと思うが、関連付けは上書きされるだろうな
>>433 言われる通りでした。
usingをしたら参照もしてくれると思っていたのですがそういうわけではないのですね。
ドラッグの件で質問した者ですがもう少し詳しく 動的にいくつか作成したpictureBoxをドラッグし、 元からあるpictureBoxに移動したいです。 この時、作成したpictureBoxの場所自体を移動させたいのですが どこのpictureBoxからドラッグされてきたのかという情報の 取得方法がわかりません。 eでは、中のBitmapの情報のみを拾ってくるので…
>>437 usingを理解してない予感
using はネームスペースを省略しますよーってこと
本来なら
System.Windows.Form.WebBrowser
とか書かなきゃいけないけど
いちいちかくのはめんどくさい
だから
using System.Windows.Form;
って宣言しとけば
勝手にそこ以前をつけてくれる
もし、同じ名前があると曖昧だからフルで指定しろって言われるよ
using ってエイリアスぐらいの立ち位置だったんだなぁ。 たしかにusing だけじゃインテリセンスで補完もしてくれないか
>>438 自分でドラッグドロップどうさを MouseDown MouseMove を使って実装するとか
MouseDown のタイミングでどれを押下したかわかるだろ
ちょっと考えれば簡単。既存のドラッグ動作を良く観察して
DateTimePickerって1790年くらいが最小で1192年とか実装できない なんで?せっかく1192年からの鎌倉時代を舞台とした物語を作ろうとおもったのにカレンダー表示機能ないからできないじゃないか FuckYou!!!
自分で計算すりゃいいじゃん
そりゃ計算は出来るだろうけどコントロールが使えないのは悲しいよな。 テキストボックスで我慢するかカスタムコントロール作るかになっちゃう。
仮に日付が設定できたとして 一ヶ月が28日だったり 一年が13ヶ月だったりするんだぜ?
日めくりを想像しろ 月や年なんて日の属性だ
世界の中心は欧米じゃないのに何言ってんの
>ユリウス暦の閏年のずれを戻すために1752/9/3 〜 1752/9/13 は無い。 げぇ…
C#はVBとあまり変わらないよと言われたのですが 私にとっては別な言語に見えてしまいます。 たとえば、中国人や韓国人は同じアジアなので似てるといえば似てるのですが、 さすがに、東南アジアの人や、同じアジアと言われるオランダとかと比べると まったく違うあろーって思います。ありがとうございました。
欧米の話じゃないんだが
そりゃVB関数使いまくってたらそうだろうな 先にC#やってたらVBは本当に全く同じなんだけどな
構文が違うだけで他は同じと言っていいな。
というか .NET がメインだからなあ
.NET環境なら言語の違いは関係ないと言ってもよい
B#で書いてC#に変換したら良いのでは?
.NETはC#選んどけば間違いない
未だにC#より使い易い言語に出会えない
C#できるならVB.NETも余裕
C#がというかVC#が快適すぎる どうやったらここまでインテリセンス速くなるのか
>>447-449 日本では、明治5年(1872年)に、従来の太陽太陰暦を廃して翌年から太陽暦を採用することが布告された。
この「太陰暦ヲ廃シ太陽暦ヲ頒行ス」(明治5年太政官布告第337号、改暦ノ布告)では、
「來ル十二月三日ヲ以テ明治六年一月一日ト被定候事」として、グレゴリオ暦1873年1月1日に当たる
明治5年12月3日を明治6年1月1日とすることなどを定めた。そのため明治5年12月2日まで使用されていた
天保暦は旧暦となった(明治改暦、明治の改暦)。
それもきっちり施行されたわけではなく、和暦もあわせると専門家すらどっちでもいいじゃんと言い出すほど
.net Framewark Compact のメニューが使いづらいのでピクチャーボックス上にアイコンを直接描画してプラグインの機能を呼び出したいのですが そのためのクラス設計がいまいちよくわかりません プラグインを読み込むときピクチャーボックスのどの位置にアイコンを表示するか計算してプロパティに持たせる OnPringイベントハンドラでそれぞれのプラグインが自分の位置にアイコンを表示する プラグインにピクチャーボックスのクリックイベントハンドラを持たせる クリックされたイベントがすべてのプラグインで評価され 自分のアイコン領域だったら機能を起動 こんな流れを考えてましたが プラグインのアイコンを押したとき、さらに選択肢アイコンを表示したくなったらどうするのか? その場合アイコンを管理するコンテナクラスを作るべきなのか? そんなことをうだうだ悩んでます どうかアドバイスをお願いします
プラグインって何だ? 普通にカスタムコントロールじゃね。 >選択肢 タップ&ホールドさせてメニュー出すのがWMの流儀。
>>463 描画方法はカスタムドローのノリでいいんじゃね
アイコンの管理はContextMenuのように親子を階層管理して、
クリックイベントは親で評価して該当する子に伝えて
子は自分の管理する孫にヒットテストしていく感じで
>>464 ありがとうございます
プラグインは普通にプラグインです
DLLであとから供給される機能なので後からメニューに割り込ませないといけないです
タップ&ホールドさせてメニュー出す→一つ選ぶ→そこから更に選ぶ 例えば描画なら エフェクト→モザイク→小・中・大
みたいにモザイクプラグインが自分で持ってる選択肢がどのように展開するかを先に決めることができないので・・・
>>465 ありがとうございます
ノリ的にはカスタムドローなんですよね
管理のイメージもContextMenuのListを持たせる方式がなんとなくイメージしやすいです
イベントの処理をどうしようか悩んでたら
>クリックイベントは親で評価して該当する子に伝えて
>子は自分の管理する孫にヒットテストしていく感じで
あーなんか光明が見えてきた感じです
仮想関数のデリゲートのインスタンスで解決するですかね?
スマートな方法というか、常道ではどうするのでしょうか?
C#でゲーム作りたいけどC#でゲーム作るサイトがあまりない・・・ C言語とかC++で作るページならいくらでもみつかるのに。 使いやすさ、簡単さはC#のほうがいいけど やっぱサンプルコードが充実してるっていう点ではC++とかのがいいなぁ
アプリケーションの設定で、独自の型を設定するにはどうしたら良いのでしょうか? 「参照」ボタンを教えても、自分の作ったネームスペースは出てこないんです。
469 :
465 :2009/11/14(土) 11:07:33
>>466 メニューが整列したデスクトップアイコンみたいなの想像してるんで
Zオーダーは考慮してないから注意してね
子から親ならデリゲート(イベント)かなと思ったけど
親から子ならインターフェース使うかなぁ
すべてのメニューに共通のインターフェース持たせとけば楽かと
void NotifyMouseClick(〜Args e) みたいな感じにするかな
継承まで考えるならこのメソッドの実装で virtual void OnMouseClick(〜) を呼ぶ
>>469 >メニューが整列したデスクトップアイコンみたいなの想像してるんで
>Zオーダーは考慮してないから注意してね
OKですWMでアイコン並べるって話ですからiPhoneのアイコンと同じイメージです
>親から子ならインターフェース使うかなぁ
>すべてのメニューに共通のインターフェース持たせとけば楽かと
>void NotifyMouseClick(〜Args e) みたいな感じにするかな
>継承まで考えるならこのメソッドの実装で virtual void OnMouseClick(〜) を呼ぶ
なるほどなるほど
メッセージの流れを先に決めてしまえばイメージしやすいですね
親から子 子から親 要素からコンテナ みたいにいろんな方法がとめどなくあるので
身動き取れませんでした
なるべくいろいろなプラグインに対応できるようにここは慎重に考慮すべきですね
でも、頭の中がだいぶすっきりしてきました
ありがとうございます
471 :
デフォルトの名無しさん :2009/11/14(土) 11:50:06
MyClass<T>というのがあり、 Dictionary<string,MyClass<T>>のようなことをしたいのですが、 ここでDictonaryが保持するMyClassはMyClass<int>やMyClass<string> のように複数の場合、どうしたらいいですか? 最悪Refrection使っても問題ないので、よろしくお願いします。
472 :
デフォルトの名無しさん :2009/11/14(土) 11:58:25
デバッグした時にエラーがあると、前回成功した結果で勝手に実行されるのをやめさせるには どの設定を変えれば良いですか? 例えば、 private void button1_Click(object sender, EventArgs e) { textBox1.Text = "こんにちは"; } で実行したあとに private void button1_Click(object sender, EventArgs e) { textBox1.Text = "こんばんわ" エラー; } を実行すると、エラー一覧画面で怒られているのに 最初に実行した"こんにちは" が表示されるという具合です。 C# 2008のお試し版を使っています。
>>471 Dictionary<string, object> かねえ・・・
せめてMyClassに共通の具体的な継承元があればそれにしておくくらいか
>>472 そんな現象は起こらないので、何か勘違いしてる
474 :
471 :2009/11/14(土) 12:17:56
>>473 レスありがとうございます・。
objectにしちゃうと、受け側で int hoge = (int)myDictionary[keyString].GetValue()
みたく、キャストしないと受けれないですよね? それを避けたいというのが動機です。
継承元を作るもやってみたのですが、
外部からmyDictionary[keyString].GetValue()のような形で呼ぶためには、
共通の基底クラスにも
MyBaseClass
{
public abstract "Type" getValue();
}
が必要になり、何一つ解決しませんでした。
>>474 そもそも、異なる型を一つのコレクションに突っ込もうとしてる時点でキャスト避けるのは無理に近い
他のデメリットをすべてかなぐり捨ててキャストだけ排除したいなら、
想定する全部の型をメンバーに持ったクラスにするしかない
バリアント型みたいに型を表すenumでも持っておいて、それを見て取り出すべきフィールドを決める
まあ、やんない方が良いね。そもそも設計の方に問題があると思うから
あと気になったんだが、GetValue()の結果をキャストするのっておかしくないか?
object item = myDictionary[keyString] as MyClass<int>;
int hoge = item.getValue();
こうあるべきだと思うけどね。
書き損じた objectで受けるんじゃなくて MyClass<int> だね
477 :
471 :2009/11/14(土) 12:32:21
訂正 objectにすると、 (MyClass<int>)myDictionary[keyString].GetValue() とするのにキャストが必要。 objectのままだと当然GetValue()にはアクセスできない。 の間違いでした。
478 :
471 :2009/11/14(土) 12:39:26
連続で失礼。
>>475 さん
やっぱりある種、動的型付け的なことなので無理なんですかね。
typeof(int) "12" や、 typeof(String) "もじ”
などの型情報とそこで指定された方にParse可能な文字列を保持しているペアがあって
その型情報をもとにParseして指定された型で返すというものを作りたかったので
扱いたい型の数だけフィールドorメソッドを用意する or objectで受けてキャストするのが解っぽいですね。
getIntValue() { return (int)value;} みたいなのを色々用意するくらいなら
受け側でキャストした方が楽か…
ありがとうございました。
>>478 そういうことならMyClass内ではstringのまま持って以下のような方法も・・・
enum ElementType { None, Number, Text ..}
class MyClass
{
ElementType ElementType { get; }
T getValue<T>() { ... }
}
MyClass item = myDictionary[keyString];
switch (item.ElementType)
{
case ElementType.Number:
int hoge = item.getValue<int>();
break;
...
enumじゃなくてTypeを公開してもいいかもだけど
これじゃだめ? public class MyClassDictionary<T> { public Dictionary<string,MyClass<T>> dic { get; private set; } public MyClassDictionary() { this.dic = new Dictionary<string,MyClass<T>>(); } }
オブジェクト指向ってすごいな。 オブジェクト指向がない言語ってどうやってプログラム組んでるんだろうな。 if文とかすごく多くなって見づらそうだね。
483 :
480 :2009/11/14(土) 14:10:38
って、ちゃんと読んでなかったスマソ。
>>467 作りたいけどサイトが無いって
ずいぶん妙な事言ってるな
作るのは自分じゃないのか。他人ありきなのか
自分でアルゴリズムやロジック考える事こそがプログラミングだぜ
>>482 どんな言語でもオブジェクト指向プログラミングは出来る
しやすいかどうか(文法としてサポートしてるかどうか)の違い
>>485 同意
そういや「オブジェクト指向」ていつのまにかただの単語になっちまってるな
オブジェクトとして捉え観察してコーディングする指向の呼称だったはずなのにな
オブジェクト指向言語使ってるのに switchでの処理分けばっかりしてるようなやつもまだ沢山いるけどね。
プログラミング関連に限らずこの世に「ただの単語」じゃない単語があるならkwsk どんな複雑で難解な数学用語だろうが「ただの単語」だろ?理解できる人が多いか少ないかの違いがあるだけで。
>>484 んなこたない
できるだけ横着するために苦労するのがプログラミングだと思うぞ
車輪の再発明して威張っていいのは学生まで
真面目な話、他人の作ったライブラリやコード片やサービスとか上手に組み合わせて 面白い何かをいかに素早く作れるかが重要だよな。ここ最近は。 なに、レビューワーがしっかりしてりゃいいんですよ。
>>488 いや言いたいのははそういう事じゃない
元の意味を忘れてしまってるって話だ。前レスからの文脈を理解してくれ
>>491 switch とオブジェクト志向、全然関係ないから気にするな
switch使うならStateパターン使えよターコ ボケ カス
>>492 >>489 ここが「初心者向け」と看板がついたスレなのを忘れたか
いくつの車輪を再発明できるかがその人の理解の幅や知識、地力を上げると気付けよ
効率の話はまたその先の話だ
基礎的な発想や当たり前レベルだと、慣れた人がパッと見てわかるような事さえ初学では判断もできない訳だから
なんでもショートカットしてコピペで済ませてはいけない
お前さんも経験あるなら理解してもらえると期待する
パソコンが普及した ↓ マイクロソフトがVSをただで配ったりBorlandがDelphiをただで配ったりした ↓ 一般大衆も高性能なプログラミング言語を手に入れられるようになった ↓ いままで一部の専門家しかプログラムなんてやらなかったのが普通の小中学生でも手を出すようになった ↓ オブジェクト指向などの概念などをわかりやすく解説するサイトが増えた ↓ 浅い知識だけのオブジェクト指向が広まった こういうことか
switch(currentState)みたいなのは多態使うべきだけど メソッドの引数なんかはよっぽどのことがないかぎり 普通にswitch使った方が適切
>>495 コードの見通しが悪くなる弊害を無視して
常にそれなら、それはそれでアホだな
>>499 パターン覚え立てだと凝ったことやりたがるのはよくあること
シングルトンの乱用なんかが典型的だな
>>498 不毛な精神論なんてどこを読んだらそうなるんだよww
考え方やスタンスが無くてどんなコードが書けるんだ
攻略サイトが無いとパズルゲー解けないみたいな主張はゆとりと言うより、ちょっとひどい勘違い
>>502 自分で考えろだの拾ってくるのが正しいだの、こんなの何の役に立つアドバイスなの?
発言してて気持ちいいだけっしょ?
>>501 逆に初学の間は(どんなにコーディングに慣れた人でも新しい何かを始めた時も含めて、初学の間は)
色々無茶するのはむしろアリだよな
仕事に適用しなきゃならん場合は確実に除いて
デザパタはあくまでよくあるパターンでしかないからな。 それにGoFで挙がってるのが唯一無二ってわけでもないし。 何でもかんでもアレに当てはめようっての自体がアンチパターン。
>>503 どうしてそんなスタンスで話を見てるのか、俺にはそれこそお前の気持ちがわからない
俺はどんな話でもそこにヒントを探す。何故ならその方が自分の時間に無駄が無いから
てか、気持ちいいだけでしょ?とか、その発想の方が不毛で無駄
コーディングの役にあんまり立たない
507 :
新人 :2009/11/14(土) 15:03:41
クイックソート実装しました! エラー処理とかきっちりやったんで100行ぐらいになりましたよー!いやー苦労しました! 標準ライブラリのとかってなんか遅そうじゃないですか?
IPアドレスにマッチする正規表現ってこれでいいですか? private static Regex regexIP = new Regex(@"(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])");
>>506 そりゃお前の話だろ
何故ならその方が自分の時間に無駄が無いから(キリッ
気持ちいいですか?
510 :
471 :2009/11/14(土) 15:08:01
なんかすごい勢いで流れてますが、
>>479 さん、追加例ありがとうございます。
MyClass自体は非ジェネリッククラスにして、
objectに外部で指定された型にParseしたvalueを入れておき、
myclass.getValue<int>();
みたいにとるのも可能性としてはありますね。
結局、
(int)myclass.getValue() と myclass.getValue<int>();
なら前者がシンプルでわかりやすいかなという気がします。
長々とお付き合いいただきありがとうございました。
>>508 IPアドレス 正規表現でググってでてくるのが軒並それと一緒だから多分大丈夫じゃね?
>>505 同意。その良くあるパターンを良くある理由も含めて追いかけると、先に進むにつれて楽になる
自分の技や発想のバリエーションがマジで広がる
何がアンチパターンなのかもきっとわかるよな
>>510 どういたしまして。
つーか、おまえらこんなにいるくせに
黙ってスレ眺めてたのかよ、きめえww
ある引数の値の範囲を実行時じゃなくコンパイル時に制限することって出来ますでしょうか 値の範囲自体は1-9とかの狭い範囲です。(マージャンゲームの実装をしています) enumを使ったり値自体をクラスにすれば出来そうな気もしますが、そういうやり方が正しいのかどうか よくわかりません。
>>508 (25[0-5]|2[0-4]\d|[01]?\d\d|\d)
こうしないと数字の途中で切れるんじゃ
多分3人ぐらいで回してると見たね。
俺もそう思う
そんな感じ
>>512 ただ、それはアンチパターンだよ、ってのを教えてもらわないと
一生パラダイムシフトしないまま終る人も居る気がするよ。
仕事でやってりゃ怒られたりほされたりして気付くだろうけど
シコシコフリーソフトをソース公開しないで発表してたりする場合は
誰にも何にも言われんからなぁ。
>>520 あぁ確かに。
指摘してもらえるのって大事だもんな
誰も一人では成長できないって奴だ
自分で広げるスタンスをデフォにした上で、他の人の意見を理解する、みたいな
やはり同意
ボタンを押した瞬間にコンテキストメニューを表示する動作を実装してるんですけど ContextMenuStripを使うとメッセージをブロックしてくれないから?ポップアップすると ボタンがアップしてしまいます これをContextMenuで実装するとボタンが凹んだ状態を維持出来るんですけど 機能がContextMenuStripに比べて少ないのでそれはそれで困ります そこで、ContextMenuStripでShowしたときにメッセージをブロックする良い方法があれば教えてください APIのTrackPopupMenuを試してみましたが表示されませんでした なおボタンをトグル式にしたりして見た目上回避する方法はとれません
>ボタンをトグル式にしたりして見た目上回避する方法はとれません なぜ? 単にそれだけで解決する「問題」に思えるんだけど。 ちなみに、個人的にはそんなメニューが表示されている間だけ「ボタンがフリーズする」 UIは生理的に気持ちが悪い気がする。
>>524 エクスプローラの「アイコン/一覧/詳細」の切り替えボタンの動作といったら分かりますかね
凹んだ状態でもう一度押したらポップアップが解除されるだけですけど
メッセージがブロックされてないと、一瞬閉じてまた開きます
これ以外にも細々とした挙動で多くの不都合がありますので採用できません
>>525 別人です
527 :
デフォルトの名無しさん :2009/11/14(土) 15:41:20
「秀丸エディタ」でC#用のソースを生成しようとしたのですが、 「秀丸エディタ」の正規表現の置換がうまくいきません。 作業内容は、 (1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、 (2)「秀丸エディタ」でそのテキストデータを開き、 ^(先頭文字)⇒¥t¥t¥t に全置換しようとしました。 もともとテキストデータであったファイルを置換するときはうまくいきますが、 Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。 どうすれば、先頭行を置換できるでしょうか。 スレちがいかもしれませんが…よろしくお願いします。
趣味でプログラミングやってる人に仕事でやってるようなノウハウを押し付ける人たちってきめぇわ 死ねよ
class このスレ{ public int バカ; public string アホ; public static void 無駄レス(); }
>>528 な。連中がしてることってオナニーだよな。
>>526 なるほどお節介をいって申し訳ない。
ちなみに、今ちょっと実験してみたらButtonのOnMouseUpをオーバライドして
ベースクラスのOnMouseUpを呼ばないようにすると「押されたまま」の状態になるようだ。
ボタンを通常の状態に戻したいときには、OnMouseUpが呼ばれた時のMouseEventArgsを
保存しておいてベースクラスのOnMouseUpを呼べばいいみたい。
これがWindowsプログラミング的に正しいかどうかは分からないけど。
>>533 ありがとうございます
確かにその方法でボタンの押しっぱなしには対応できますね
ただボタンを左クリックして解除された時の動作や、
ポップアップしているメニューと関係のないコントロールの
キーボードショートカットなどが効いてしまいます
これらの多くの問題に対処するには、どうしても
ContextMenuのようなメッセージをブロックする形で
ポップアップしないとキリがない感じです・・・
なので、なんとか辻褄を合わせるような対処法は避けたいのです
麻雀牌のクラスを作る場合、 abstract class 牌 {} abstract class 数牌 : 牌 {} abstract class 萬子牌 : 数牌 {} class 一萬 : 萬子牌 {} ... abstract class 字牌 : 牌 {} abstract class 三元牌 : 字牌 {} class 中 : 三元牌 {} ... ってやって全部クラスにしちゃうのと abstract class 牌 {} enum 数牌タイプ { 萬子,. 筒子,... }; class 数牌 { 数牌タイプ Type, int Number} enum 字牌タイプ { 東, 南,.... }; class 字牌 { 字牌タイプ Type, } みたいに途中でenumで振り分けちゃうのはどっちが実装として正しいんでしょうか?
いろんな言語を勉強すると 今まで使ってた言語の良い部分と悪い部分が浮き出てきて良いなぁ
decimalってなんで最後にmつけるの? decimalなんだからdでいいだろ!doubleと間違うならdeでいいだろ! なんだよmって!
プロが作ってるソフトつっても公開してるフリーソフトみてもらえればわかるけどレベル低いよ プロのうんちくは読んだ本の受け流し 趣味グラマでも萎縮する必要はないよ
>>535 まず、牌の種類ごとにクラス分けする必要があるかどうか疑問だなぁ。
牌を使って何をするかにもよるが。
>>541 回答が貰えた!ありがとうございます。
最初は牌クラス一つにしようと思ったんですが、
数牌は種類と数字が必要なのに字牌は種類だけ必要 => 字牌の場合数字が死にプロパティになる?ってのと、
ドラの牌を調べるのにこの牌の次の牌(九萬の次は一萬、南の次は西とか)はそれぞれの種類毎に
あったほうがいいかなぁと思って、それならどんどん派生させた方がいいのかなぁって思えてきまして・・・
実際に処理する場合は
牌インスタンス is 萬子 で判定するか、
牌インスタンス.Type == 数牌タイプ.萬子 で判定するかの違いぐらいかなぁって漠然と考えています。
二次元配列で 0-1 東 0-2 南 0-3 西 0-4 北 1-1 白 1-2 葵 1-3 中 2-1 2-2 ... 2-9 萬 3-1 3-2 ... 3-9 筒 4-1 4-2 ... 4-3 索
>>544 ??インデックスを牌クラスに持たせるということでしょうか??
条件分岐は逐次処理になってしまうんでしょうか? 全スレッドに対して一様に条件分岐を行うと処理が遅くなったので…
条件判断に使ってるインスタンスがロックされてて 逐次処理になってるんじゃね?
ふふふ・・・面白い漫才スレw。 はじめから完璧なものを作れた人なんていないしプロは過去の遺産を使いまわしているから 穴が少ない傾向にあるだけでしょ。どんな使われ方をしても大丈夫なプログラムなんて そうそう作れるものではない。それは色々なOSが証明している。 と、初心者なおらは思う。
>>548 ん?何に対する話だ?完璧なプログラムの話なんか誰かしてたっけ?
完璧なものを作る・・・?どんな使われ方をしても大丈夫なプログラム・・・? printf("Hello World!!\n"); 残りmain部分だけしか書いてないならどんな使い方をしてもバグは起こらないだろうな
しかし、ランタイムが入っていなかった!
>>551 どこまでをプログラムとするかでそこらへん変るから。
ランタイムがバグっていた!
>>543 >>541 の言う通りなにをするかによるんだけど。
自分だったら牌クラスをひとつ用意した上で、enum で牌の種類を全部定義して、それをプロパティで
設定/参照できるように作る。テキストベースなプログラムを作るなら、牌をユーザに示すための文字を
設定/参照するプロパティを、GUI? なプログラムなら、牌のイメージを格納したビットマップかなにかの以下略。
‥‥と脱線気味な雰囲気に抵抗してみた。w
>>554 役を判定するときにクラスに別れてたほうが判定しやすいかなーと思ったけど
よく考えてみると緑一色判定とかしたくなったら牌を特定するしかないわけだから
渡された牌があるグループに属してるか判定する静的メソッドでも作った方が
シンプルになりそうですね。
牌はenumで全定義、グループ判定は静的メソッドの方向でがんばってみようと思います。ありがとうございました。
>>555 静的メソッドより、Is萬プロパティとかの方がC#っぽい
ような気がする。
>>556 牌のインスタンスにIs萬とかIs数牌とか付けるってことですよね。
そこらへんどう解決するのがスマートなのかなんですよね、結局。
Is萬とかにする場合・・・
◯{get; private set;} なプロパティにしてコンストラクタ内で設定
--> コンストラクタでenum牌タイプを見てswitchして判断する? → コンストラクタがごつくなる・・・
◯コンストラクタに引数で渡す
--> Is萬がtrue, Is字牌がtrue、typeが一索なんてのをはじけない
って書いてて思ったけど、HashSet<牌タイプ> 萬子Set, 索子Set..... とか作って
それで判断すればそんなにごつくならないかな・・・
VBとVC#ならどちらがプログラム初心者にとっては組みやすいですか?
試しに書いてみれば? 書くと何がスマートじゃないか何となくわかるからそれで書き直せばOK
>>560 どうしてでしょう?
VBは入門言語だと聞きますが、VC#も似たようなものでしょうか?
また、趣味で本格的なプログラムをするとなればどちらが有利ですか?
どちらも難易度は変わらない 趣味なら断然C#。VBを選ぶ積極的な理由はない。使ってる人はみんな仕方なく使ってるだけ。
昔はVBとVC++が比較されてて、 VC++はポトペタ(フォームに貼り付けてイベント直接書いて終わりの書き方)が今一な上、 C++の概念もMFCも難しかった。よってVBの方が楽っていわれてた。 その流れでVBの方が楽っていまだに言う人がいるんじゃないのかなぁ。 VBもVC#も.NETを使いこなすのが一番のポイントになってるから 文法が違うぐらいでやるこた一緒だよ。 んで文法の自由度はC#の方が強力。
趣味なら情報は主にwebに頼ることになるだろうけど,それについてはC#の方がずっと充実してるんだよね オープンソースプロジェクトもほとんどC# C系言語に慣れてればjavaやC++の情報も理解しやすい
C#のdoubleって計算の途中でどうみても誤差が発生してる場合微妙に調整されてるの? math.PIとかmath.Eとかつかった計算をdoubleでやってみてToStringすると条件によってきっちりした整数が表示されることがあるんだが・・・ こっちとしては10.000000000001とか表示されるより10と表示されるほうが楽でいいんだけどさ。
C#は.NET用に一から設計されているから、負の遺産が無いのもメリット
超初心者はMainをmainって書いちゃったりusingをUsingって書いちゃったり;がありませんとか double型とint型は互換性がありませんとかコンパイラにおこられまくるからいやになるかもねw
>>565 ToStringの段階で下の方切り捨ててるだけ
実際の演算とは無関係
>>565 double x = 10, y = 10.0000000000001, z = 10.00000000000001;
Console.WriteLine("{0}, {1}, {2}", x.ToString(), y.ToString(), z.ToString());
Console.WriteLine(x == y);
Console.WriteLine(y == z);
キーボードショートカットの実装で、どういうキーが押されたかの判定は どういうふうにやるのが一般的なんでしょうか。 ぐぐるとifやswitchをつかった例がいくつか見つかりますが、数が多くなったり、 Shiftなどの装飾キーの有無も含めた判定をするとかなりごちゃごちゃしそうなのですが・・・
メニューやコントロール自身に関連づけるのが一般的じゃない?
string word が日本語かどうか判別できる関数または方法はありますか?
>>570 ちょっとかいた、多分動く
protected override bool ProcessCmdKey(ref Message msg, System.Windows.Forms.Keys keyData)
{
//Debug.WriteLine("ProcessCmdKey Start:");
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys.F1:
return true;
case Keys.F2:
return true;
case Keys.F3:
return true;
case Keys.F4:
return true;
case Keys.F5:
return true;
case Keys.F6:
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
各キーとリターンの間に実行したい処理をいれればいい。他のキーの組み合わせはぐぐれ
アセンブリのことがよくわからないのですが、 VC#の場合1プロジェクト1アセンブリという認識でだいたい合っていますでしょうか?
VC#の場合1プロジェクト1モジュール1アセンブリ
うん。
マルチモジュールアセンブリってどういうときに使うの
>>557 自分なら、そう言う判定は牌クラスにはやらさない。
麻雀はやらないから良くはわからないけど、手牌を管理するクラスの基底クラスか、
役を判定するクラスを作って、そこで判定させる。
麻雀を知らないから良くわかんないんだけど、牌のグループを判定する目的ってなに?
そんなのなくても判定できそうに思うんだけど。。。
どうせアルゴリズム主体だからどうでもいい
>>579 牌の情報は牌が知ってる方が妥当な設計かなーと思ってそういう設計にしてました。
実際そういった情報を使うのは役判定クラスだけになりそうなんですよね。
グループの判定がしたいと思った理由は、以下のような役で
ある牌がどのグループに属してるか判った方が実装が楽かなと思ったからでした。
・清一色(全部の牌が萬子、筒子、索子のうちの一種類)
・字一色(全部字牌)
・混一色(清一色に字牌の面子あり)
Win32APIのCreateProcessを使っているのですが C++だと終了前にCloseHandleをするように決められています これはリソースの解放をいうことだと思うのですが ガベッジコレクション?があるからC#では特に解放したりする必要はないのでしょうか?
>>582 自分で解放しなきゃダメ。
GCに回収/開放されるのはC#の管轄内で生成されたオブジェクトだけ
具体的にはそのインスタンスの為に処理系が用意したメモリ領域だけ
当たり前に必要。というかなんで Process クラスを使わん .NET でまじめに Handle を使うのなら SafeHandle を使う 必要もあるし、P/Invoke は素人にお勧めできない。
>>581 なるほど。知識不足、すまん。
それなら、牌種類 enum の他にグループ enum を牌クラスのプロパティに持たせるかな。
やっぱり牌クラスにはその手の判定メソッドは持たせない。自分なら。
private void GetTextBlocks(UIElement p) { if (p is TextBlock) { list.Add((TextBlock)p); }else if (p is Panel) { var pa = (Panel)p; foreach (UIElement c in ((Panel)p).Children) { GetTextBlocks(c); } }else if (p is ContentControl) { GetTextBlocks((ContentControl)p); } } 再帰的に TextBlock の一覧を取得するメソッドですが、 これを Linq とか ラムダ式とか使ってメソッドを定義せずに 短く書くことってできますか?
>>585 なるほど、属するグループもenumにしちゃうってのは盲点でした。
[Flag]属性付けとけば数牌かつ萬子とか風牌かつ字牌なんてのも容易に表現出来そうですね!
>>583 やっぱそうなんですか
うーん管理が必要だな
>>584 そっちは
作成時にウインドウスタイルをいじれなくて困ってます
作成、MoveWindow(Win32API)でサイズ変更
とやると管理は必要ないですが
プロセスが立ち上がるまでサイズがデォルトなので支障がありまして・・・
せめて、非表示でプロセスを立ち上げる方法があれば・・・・と思ったのですが検索しても見つからず
CreateProcessを使用するしかないかという結論に至りました
ダメだこりゃ。
C#のみでの解決法も提示できないくせに口だけは御達者のようで^^
>>587 なんでもかんでも[Flag]使って一つのプロパティに収めるのは如何なものか?
でもenumが継承出来ない以上無理ないのか。
593 :
588 :2009/11/15(日) 00:07:03
ちなみに現在の状況としてはプロセスを起動 WaitForInputIdle()でIdleを待ち MoveWindowでサイズを変更すると言った感じのことをしています Idleをまつのだから、プロセスがデフォルトの設定で開かれるのはしかたないことではあるのですが ちょっとそれだと支障がありまして
594 :
588 :2009/11/15(日) 00:11:10
>>591 みなさんからすれば調べ方が悪いのでしょうが自分でも半日以上調べてたのですが
どうしようもなくこういう結論に至ってました
そんなものがあったのですね
ありがとうございました
自分で考えて導き出した結論はたしかに初心者なので間違ってることも多いかと思います
でもなにも考えずに
あれやるのどうするの?これやるのどうするの?
って全部聞いた方がいいんですかね?
自分で必死に考えてだした結論をそうやってバカにされるのは正直不快ですね
バカなんだからしょうがない。
596 :
588 :2009/11/15(日) 00:15:41
>>595 ここは初心者スレじゃなくて
分からない人をバカよばわりして上級者が偉ぶるスレですか?
597 :
588 :2009/11/15(日) 00:16:22
うそですdb
煽られるのがいやなら、2ch なんて来るなよ。
>>598 お前の2ch論を勝手に初心者におしつけんなよwwwwwwwwwwww
2ch利用すると煽られなきゃいけないとかお前の世界はどんだけゆがんでるんだよwwwwwwwwwwwww
少なくとも煽り耐性くらい付けろよ… 2ch初心者までは歓迎してなんだが。
601 :
588 :2009/11/15(日) 00:19:30
>>598 >>597 さんはどなたでしょうか
不快なのは確かですが
自分がバカなのも確かですので仕方ないです
他の方が教えていただけたので自分は満足です
ありがとうございました。喧嘩はしないでください
602 :
588 :2009/11/15(日) 00:20:40
>>600 2ch初心者wwwwwwwwwwwwwwwwwww
ぼくは2chのプロですwwwwwwwwwww
あおっちゃうし偉そうに初心者を見下すけど解決法も提示しませーんwwwwwwwwwwwww
ってかwwwwwwwwwwwwwwwww
どんだけゆがんでんだよwwwwwwwwwwwwwww
気にせずに、また来いよ。バカ
604 :
588 :2009/11/15(日) 00:21:26
うそですdb
605 :
588 :2009/11/15(日) 00:21:31
うそですdb
>>594 煽るやつにしか煽り返さんよ。自覚ないのかよ?不快いう
お前が不快だ。
それはそれとしてやっていることの内容的に CreateProcess でも
不自然でもないかもな。Vista や 7 で問題があるから使われなく
なりつつある API だけど。
で、まじめに使う場合の話したが、具体的にはハンドル型を
SafeHandle から継承して作成してうんぬんってややこしいことを
しないといけないので大変って話だ。やりたいんなら説明は長く
なるから SafeHandle でぐぐってその辺の知識を入れてからやれ。
香ばしいスッドレですね
>>586 メソッドは必要
無理やり最近のC#っぽく書くならこんな感じか
private IEnumerable<TextBlock> GetTextBlocks(UIElement p)
{
var textBlock = p as TextBlock;
if (textBlock != null)
yield return textBlock;
else
foreach (var textBlock in LogicalTreeHelper.GetChildren(p).SelectMany(c => GetTextBlocks(c)))
yield return textBlock;
}
はい次の方どうぞ
なんか根本的なところが間違ってる、とまではいわないまでも、考え違いをしているような気がする。 もういちどスタートラインに戻って考え直してみてはいかが?
WebBrowserのこんとろーる? を使ってるんだけど IEデフォルトのショートカットを無効にして自分で設定したショートカットを使うにはどうすればいいの?
神回答者の俺がいなくなるとすぐに荒れるな まったくおまえらの役立たずぶりには困ったもんだ
さっきのものですが非表示起動はできたのですが
その後、非表示から表示にきり変える方法が分かりません
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.processwindowstyle%28VS.80%29.aspx に、
Hidden 非表示のウィンドウスタイル。ウィンドウは表示または非表示のいずれかにできます。システムは、ウィンドウが非表示であることを示す場合は、そのウィンドウを描画しません。
ウィンドウが非表示の場合、そのウィンドウは無効になります。非表示のウィンドウは、システムまたはその他のウィンドウからのメッセージを処理できますが、ユーザーからの入力を処理したり
、出力を表示することはできません。アプリケーションは、新しいウィンドウを非表示にして、そのウィンドウの外観をカスタマイズしてから、ウィンドウ スタイルを Normal にすることがよくあります。
と、描いてあるのですが非表示で作成したプロセスをどうやって表示状態に戻すかが分かりません
作成したプロセスのWindowStyleを再度変更するにはどうすればいいのでしょうか?
win32APIも試してみたのですが
ProcessStartInfo startInfo = new ProcessStartInfo(save.memosoft);
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process p = new Process();
p.StartInfo = startInfo;
p.Start();
p.WaitForInputIdle();
Win32API.MoveWindow(p.MainWindowHandle,200,200,480,640,1);
p.WaitForInputIdle();
Win32API.ShowWindow(p.MainWindowHandle,1);
こんな感じで表示を切り替えようと思ったのですが非表示のウィンドウが表示されてくれません
ShowWindowの2や3最大化・最小化なんかは、普通に動くので表示・非表示切り替えの部分だけ
Cと、C#では別のものなのでしょうか?
よろしくお願いします
>>615 すまん、Win32系のスレで聞いた方が早いかも
対象言語はC/C++になるとは思うが
どう考えてもC#の領域だろうが
>>569 Console.WriteLine("{0}, {1}, {2}", x, y, z);
Console.WriteLine("{0:F18}, {1:F18}, {2:F18}", x, y, z);
Console.WriteLine("{0:E18}, {1:E18}, {2:E18}", x, y, z);
ばかばっか
ねぇ、オウムって賢いと思う?w
コンニチハ!オハヨウ!ボクピーチャン!ヨロシク!
>>586 やっぱContentControl渡すとスタックオーバーフローするな、これ。
何か窺い知れないオーバーロードあるかと試してみたんだが。
例示としては不適切だし、実コードなら見直しを薦める。
try catchってなるべくつかわないほうがいいの?
なんでそう思い至ったのか言ってみ
ム板の感じの悪さは異常。 無駄にプライドばっかり高くてスルー能力も足りず、話を脱線してでも一言いわずにはいられない。 勿論冷静な人も大勢いるだろうが、一部の幼児脳は単芝と^^を付けて顔真っ赤なのを隠しつつ 煽らずにはいられない。 ‥あ、このレスはスレチで、かつ釣りなので絶対にスルーして下さいね。 言わば例外ですが、これは仕様想定外の例外なので catch はしないで下さい。 こんなレスがある事自体が誤りなのです。その他はスルーしないで下さいね。
簡単に画像を表示したり graphics gとか使ったりするのはフォームでもできるけど やっぱり画像処理はPictureBoxつかってやったほうがいいですか?
630 :
デフォルトの名無しさん :2009/11/15(日) 11:55:46
>ム板の感じの悪さは異常。 結構学歴あって立場のある人間でも変態がいるからなぁw
>>615 なんでだろうな? CreateProcess() して、ShowWindow() なら表示されるんだよね?
表示・非表示以外はできる、ってことだから、ウィンドウハンドルはちゃんと取れてるんだろうし。
煽り煽られはマの基本的な習性です。言語論争など尽きる
ことがありません。そうやって知識とか整理されたり解決策を
導く兵達の世界なのです。でもこれを忘れて暗黒面に落ちる
のは自重しようね!
>>629 「画像処理」をもうちょっと詳しく。拡大縮小とかそんなの?
楽しいからいいよ
axWMPコンポーネントを使い、 wmp.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(st); public void st(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { MessageBox.Show("StateChanged"); } こうして、停止/再生を繰り返してもメッセージが表示されません。 何か間違っていませんか?
>>634 なんか最後の1行でフイタ
そのライブラリって有名なのか?
リファレンスにはその状況下でそれでハンドル出来ると書いてあるの?
最早知らないとわからない話の類だと思う
WindowsMediaPlayerSDK見ると、サンプルで Player = new WMPLib.WindowsMediaPlayer(); Player.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange); で private void Player_PlayStateChange(int NewState) { ・・・・・ } になってるな。
string s="abcd"; //いろいろやる s="efgh"; これって、いろいろやるを行っている間は"abcd"はガベジコレクタンの対象にならずに s="efgh"が実行された瞬間"abcd"がガベジコレクタンにぶっこわされるの?
例外が投げられない時のtry catchのコストは無視していい。 まぁ例外のパフォーマンスを気にしないといけないほど、大量の例外を投げる作り方ってどうなのさ?
>>640 あるとしたらフロー制御に例外を使うとかじゃない?
それが推奨されないやり方だからMSも注意を促してるってことかと。
>>639 瞬間に"対象になる"ってのが正しいんじゃね?すぐにぶっこわされるわけじゃないよ。
あと当然ながら何かに参照されてるインスタンスはガベコレ対象外だよ。
あれこれしてる最中にぶっこわされるとかあったら怖すぎるww
>>639 リテラルだからガベコレも何もない
>>640 正常系で例外を利用するようなとんでもない実装も、
異常系が頻発するような滅茶苦茶な設計も普通に駄目だろ
>>640 ループの中でcatchしまくり&別にそれでループ脱出はしない、とか。
直接そういう書き方しなかったとしても、ループ内で呼び出してるメソッドの中の方でcatchしてたりすると
なかなか見つけづらいんじゃないかな。
644 :
デフォルトの名無しさん :2009/11/15(日) 18:42:50
部分的に文字列の色やフォントサイズが変更されている1つのリッチテキストボックスの書式の内容を、1つのRectangle構造体の中に同じ書式で印刷することは可能ですか?
テキストボックスの文字列を数字のみか確かめるときに Parse使うのは駄目なの?
>>645 try catch の流れで聞いてる?
なら TryParse を使いましょう。
>>642 リテラルかどうかなんて一切関係のない話だと思うけど。
>>645 正規表現使うのがオーソドックスなんじゃないの?
まあ扱う数字が非整数かつ国際化対応を考えるとちょっと面倒だったりするんだけど。
Parse でいいだろ。指数表現とかをどうするか? とかって問題はあるけど。
652 :
634 :2009/11/15(日) 19:30:38
>>647 は私では無いです
>>637 wmpはprivate AxWMPLib.AxWindowsMediaPlayer wmp;
こう宣言していました。
AxWMPを使って同じ事出来ませんか?
そういうのはParseとかTryParseで充分じゃね? 正規表現使う程のもんじゃないと思うが。 IsDigitでシコシコチェックするメソッド作るのも別にありだと思う。
>>648 リテラル文字列の参照はなくならないから、ガベコレの対象にはなり得ない
>>652 何をやって何がどうできないのか、全然わからんよ。
環境やら手順やら、落ち着いて書いてみ。
>>655 だけど、少なくとも、俺の環境(Vista 64bit + VS2008 SP1) では、
Windows フォームアプリケーションでツールボックスに Windows Media Player を追加して、
それをフォームに貼り付けて、プロパティウィンドウから PlayStateChange イベントが追加できるよ。
そんで、↓みたいな感じでイベントも取れてる。
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
System.Diagnostics.Debug.WriteLine(e.newState);
}
657 :
634 :2009/11/15(日) 20:07:58
>>655 AxWMPコンポーネントをデザイナで配置し、
AxWMPLibのPlayStateChangeEventHandlerを使い、曲が終了すれば、
次の配列にある曲を再生、というプログラムを作ってました。
先日、機能拡張を図ろうと、幾つかの機能(次曲移動等の簡単なもの)を制作した後、
プログラムを起動してみると、曲の終了が検知できていなく、これに気がつきました。
それまではちゃんとイベントも捉えられていたのですが、どこを編集したのかも分からなってしまい・・・
もう一度最初っから作り直せよ。
659 :
634 :2009/11/15(日) 20:15:33
>>656 実際に試して貰ってありがとうございます。こちらの環境でも、新しくプロジェクトを作成すると、
void Form1_Load{axWMP.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(ax);}
void ax(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
これでちゃんとイベントは取れています。
>>657 のソースでも同じように記載してありますが、何度そこを書き直しても駄目でした。
今気がついたのですが、
>>657 のプログラムだと、新しくWMPのコンポーネントを生成しようとするとエラーが出て生成できませんでした;
コンポーネント 'AxHost' を生成できませんでした。エラー メッセージ:
'System.Reflection.ReflectionTypeLoadException: 要求された型のうち 1 つまたは複数を読み込めませんでした。詳細については、LoaderExceptions プロパティを取得してください。
場所 System.Windows.Forms.Design.DocumentDesigner.AxToolboxItem.CreateComponentsCore(IDesignerHost host)
場所 System.Drawing.Design.ToolboxItem.CreateComponentsCore(IDesignerHost host, IDictionary defaultValues)
場所 System.Drawing.Design.ToolboxItem.CreateComponents(IDesignerHost host, IDictionary defaultValues)
場所 System.Windows.Forms.Design.OleDragDropHandler.CreateTool(ToolboxItem tool, Control parent, Int32 x, Int32 y, Int32 width, Int32 height, Boolean hasLocation, Boolean hasSize, ToolboxSnapDragDropEventArgs e)'
>>658 かなり膨大なプログラムになってしまいましたので、書き直すのは本当に最終手段にしたく思いまして;
なんか参照とかその辺がおかしくなっちゃってるんかな。 ソース管理を使ってれば、機能拡張以前にロールバックするところだけど・・・。 変に直すより、最初っから作り直した方が早いかもよ。
>>660 ですか。。
取りあえず参照周り弄ってみて、
駄目そうなら書き直すことにします。。
ソース管理?なるものがあるんですね。調べてみます。
つーか、デザイナから配置したなら、わざわざコードでイベント書かなくても、プロパティウィンドウから 追加できるだろ? 実際に配置したコントロールと別のものを使っちゃってるんじゃないの?
初めてなら TortoiseSVN あたりが無難かと>ソース管理
>>662 それも考えましたが、そこから書いても同じでした。
現時点でwmpコンポーネントは1つしか使ってないので、
間違うというのも無いはずなので・・・
廃棄周りの処理の流れを追うと何かヒントがあるかもしれなかったり 知らない内に廃棄してる、あるいは廃棄と同等な処理を呼んでしまってる あるいはそこら辺の動きが理解できていなくておざなりになってる とか
あるいは意表を突いてイベントのハンドラをRemOveしと再設定してる処理がある、とか 曲再生の度にDisposeやHandleの解放もせずに新たにnewしてたりして、そっちにハンドラAddしてないとか こういう謎な時は「それはありえない」って部分含めて丸ごと疑ってみるしかない
>>665 ,666
それはないと思います。
StateChangeのイベントハンドラでプロジェクト全体に検索かけましたが、
問題有りそうな箇所は見つけられませんでした。
dispose、new周りも確認しました。
曲再生はただURIをwmpに与えているだけなので、問題は無いと思います。
これでも数日間ソースとにらめっこしてたので、
もう新しくソース書くことにしました。。
QuartzTypeLibを使用して動画再生をさせているのですが、動画表示部(Panel)のクリックを拾ってくれません クリックイベントを拾う方法を教えてください
>>669 ど、どっちなんでしょうか?
可能であれば方法を教えていただけないでしょうか?
try{ >> 1-671 } catch { //確かに重い }
>> 1-671 何でスペース入れてんの?w
674 :
デフォルトの名無しさん :2009/11/15(日) 23:17:41
>>670 ありがとうございます!
会社の各店舗がお客さんに配布する広告を作成しようとしています。
大半は、DB登録済みの商品内容を表形式で印刷するだけなのですが、
用紙の左下部分に、店舗ごとのフリー記載欄を設けたいんです。
例えば
「横浜西口店ではこんなキャンペーンを行っています!」←MSゴシック太字
であったり、
「三宮店ではこの商品がお得!!!!」←MS明朝の赤字
など、店舗ごとのオリジナルコメント登録フォームを設け、
リッチテキストボックスにコメントの内容と書式を設定してもらっておき、
その書式内容をそのまま、帳票の左下部分に反映させたいんです。
PrintDocumentコントロールなどの中で、
そのようなことを実現するにはどうすればよいでしょうか。
>>674 printメソッド見ると分かるけど、GraphicsのHDCの中に印刷領域決めてその中に
リッチテキストをEM_FORMATRANGE送ってレンダリングしている。
そこいら辺をゴチャゴチャと直して使えばなんとかなると思われる。
また印刷領域がGraphicsで来ることから分かるけど、普通にg.DrawXXXXとかで
他の部分も描ける。ヘッダとかフッタとか。
その辺のメソッド流用すれば印刷プレビューが作れることも確実。俺やったもの。
677 :
デフォルトの名無しさん :2009/11/16(月) 00:42:08
>>675 ヘッダとかフッタ…
印刷可能領域外に描けるということ?
ちなみに、印刷可能領域が用紙の端から何インチか知りたいのだけど、方法が分からない
(>_<)。
ReleaseモードのときとDebugモードのときで 出力する実行ファイルの名前を変えるにはどうすればいいですか?
プロジェクトでReleaseモードのときとDebugモードのときで 出力する実行ファイルの名前を変えておけばいいよ
馬鹿はレスしなくていいよ
バカはレスしなくていいけど 初心者相手に意味不明な専門用語をならべるベテランもレスしなくていいよ
馬鹿は質問しなくていいよ
なんだよジェネリックって!中で足し算できないのかよ!ファック! T func<T>(T x,T y) { return x+y; } intでもdoubleでも使える関数作るとおもったらできねー!ゴミ!考えたやつ死ね!
つ dynamic .NET 4.0からだけどね。
>>683 すんげー微妙だけど一応逃げ道はあるww
T func<T>(T x, T y)
{
return (T)Microsoft.VisualBasic.CompilerServices.Operators.AddObject(x, y);
}
まあ、このコードもゴミだなw
T Func<T>を.net2.0でも使えるようにしたいんだけど何か方法無い?
Generic自体は2.0からサポートされてるんだから 自分で定義したらいい。
>>678 つ [ビルド後のイベント コマンド ライン]
完成したアプリを大幅に変更したいのですが、 現時点でバックアップを取りたいです。 出来れば毎日バックアップが残ればいいのですが、 プロジェクトのフォルダごとコピーしておく以外に良い方法はありますか。
>>689 バージョン管理ツールを使う
VisualStudioがStd以上ならフリーのアドインが使えるsvnがいいかも。
まあEEでもツールや文献の多いSubversion(svn)から使い始めるのがいいかな。
git が流行ってる?
>>689 VisualSVN+AnkhSVNオヌヌメ
>>683 定義の段階ではTが何の型かわからない訳だから
たとえ中で足し算が出来ない仕様だとしても仕方無いような
渡される型にオペレータオーバライドでもできて「自型+自型と書かれた場合はどうする」が
定義出来るならテンプレ中で + が使えないとおかしいとは思う
>>691 git流行ってるけどあれは個人で使ってもあんまり旨みがなさそうな気が・・・
IComparable みたいに加減乗除もインターフェースあったらよかったのにねえ。
ドングルみたいなUSBメモリを自分で作りたいけどハード的な知識がやっぱ必要だろしC#なんかでは作れないよね?
プロテクトするんだったら 通常アクセスしない特定のセクタに特定のデータ書き込んでおく
>>698 ハードのドライバは難しいかもしれない。
結局C/C++などでI/O処理書いてDLLにする形になると思う。
>>697 いや、インターフェースがあったら
T max<T>(T a, T b) where T : IAddable, ISubable, .....
みたいなことできるよねーみたいな。
もちろん IComparable と同様に Int32 とか Double が実装してること前提だろうけど。
VC# .NET3.5、 VS2008、WinXPProで開発を行っております。 あるファイルに、下記のような列挙型が定義されています。コメントの通り、近い将来何かの値が追加される予定の列挙型です。 このような列挙型を別のファイル・別の場所で使用する場合、予定された仕様変更に備えて、Exceptionを吐いたり、何かしら忘れないような処理を入れたいと思うのですが、どのような処理がよろしいでしょうか? 一応、思いついたのは下記のようにif/elseで分けた場合には、throw new XXXXExceptionすることでしたが、これでは列挙型が変更された後、実際にプログラムを動かさない限り、追加されたことに気づけません。 できれば、コンパイル時に忘れを防ぐような方法があればいいと思っているのですが…… よろしく御回答お願いいたします。 //あるファイル。 enum Hoge { abc, def, ghi //近い将来、 jkl(?)が追加される予定。 } ---- //別のファイル Hoge hoge = Hoge.abc; if (hoge == Hoge.abc) { //何かの処理 } else if (hoge == Hoge.def) { //何かの処理 } else if (hoge == Hoge.ghi) { //何かの処理 } else { //仕様変更により、Hogeに値が追加された場合、変更を忘れないようにするための備忘録? throw new NotImplementedException(); }
>>699-700 ナイスな情報サンクス!
なるほど・・・
C++とかでローレベルI/O書いて.NETから呼び出せばいいのか
でその書込みアドレスは普段使わない(これまた調査が必要そうだけど・・・)位置に書き込んでおけばいいだけなのか・・・
なんとなく方向性はつかめた気がする!
やれるだけやってみよう!!
>>703 汎用IOドライバ使えば読み書きできるとおもわれ。
ただし、バルク転送に限られるけど(確か)
705 :
デフォルトの名無しさん :2009/11/16(月) 14:32:59
C/C++やってました。 VS2008買ってC#を勉強しようとしていますが、 エディタの設定がデフォルトでタブが空白になるような設定になっています。 タブを空白にするメリットって自分には思いつかないのですが、どうなんでしょうか。 タブをスペースにするメリットってなんですか? またそういう人は結構多いんでしょうか?
ハードタブは環境によって見かけの桁数変わるから嫌う人もいる コマンドラインでダンプする時も調整利かないから見づらい 半角空白はUnix系の人に多い気がする
あとタブ文字は元々見たままの空白文字では無いから(機能文字/プリンタの制御コードだから)、 単にソースの見栄え整えるのに処理系で変わる機能文字使いたくない/使わない って言う文化もある。 タブ文字に別の意味割り当ててる処理系もあったはず
>>706 なるほど、納得です。ありがとうございます。
VisualStudio2010ただでロードしたwww なにこれwwwインテリセンスの強さとかマジヤバくてVC#2008Expとかウンコに見えるんですがwww 機能制限とか使用期限とかあんの?
VisualStudioのスレなら誰か答えてくれるんじゃね
ちょっと和んだ
2つのListboxにContextMenuStripを関連付けた場合。ContextMenuStripのメニューがクリック された時にどちらのListboxから呼び出されたのか調べる方法はありますか?。
714 :
713 :2009/11/16(月) 16:44:07
SourceControlで取れるのかな ちょっと行ってきます
>>709 バージョン情報の右上に残り日数が出てるだろう。
>>711 おー、いいねえ
コードに詰まった時の気分転換になるな
>>698 USBデバイスはVendor ID(メーカー固有)、Produce ID(製品種固有)、
シリアルナンバー(個体固有)の3つの識別子を持っているから、
これらを使えばどんなUSBデバイスでもドングルとして使えそう。
(正確には、シリアルナンバーを持ってないUSBデバイスもあるんだけど、
USBメモリのように一人のユーザーが複数個使用する可能性があるデバイスでは
まず間違いなくシリアルナンバーを持っているはず。)
これらのIDの取得方法は、ここが参考になりそう。
ぱっと見た感じマネージドコードだけで意外と簡単に出来そう。
http://supermab.com/mikan.html
ソースに目がいかない
無意識に長いコードを書いてしまいそうだな
721 :
デフォルトの名無しさん :2009/11/16(月) 20:21:53
Winフォームアプリケーションを作成しています。 入力予定のcsvデータは、次のような内容となっています。 さくら組,Red こすもす組,White このデータを読み込んで、帳票に、1項目目の組名を印刷したいと思います。そして2項目に組名の文字の色があるので、 その文字列をそのまま引用して文字列の色を指定したいと思います。 string a; a = ゙Red゙(入力したcsvデータの内容); としたとき、aの値を直接代入して色を指定することは可能ですか? よろしくお願いいたします。
>>721 Color 構造体を引数に取るメソッドに文字列を直接与える事はできないので、
なんとかしてその文字列を基に Color 構造体の値を得る必要がある。
KnownColor 列挙体に存在する名前だけを使うのなら、
Color.FromName("色名") でその色の Color 構造体が取得できる。
だから Red や White なら偶然にもこれでOK。
でも、KnownColor 列挙体に無い色名も使うのなら、
Color.FromName メソッドは諦めて
独自の色名から rgb 値を得る Dictionary を作っておくといい。
>>677 サンプルにある e.PageBounds がページサイズ、e.MarginBounds がマージンの内側。
このサンプルはマージンの内側にリッチテキストをレンダリングするわけ。
インチ換算もサンプルをよく読むと
//Convert the unit used by the .NET framework (1/100 inch)
//and the unit used by Win32 API calls (twips 1/1440 inch)
private const double anInch = 14.4;
とある。
俺はどうしたっけかなーと、ソース確認。
// 正直、位置は適当・・・
graphics.DrawImage(logo, PageBounds.Width - 60 - logoWidth, 10, logoWidth, logoHeight);
とか書いてあってフイタ。
>>702 意図的に判断文に入れていないのかどうかはコンパイラには判断できないからねー
条件分岐だから忘れるんだろう。ということで、ClassFactory みたいな形の メソッド呼び出しにするとかどうかな? Enum じゃなくなっちゃうけど。
listviewにアイテムを追加する時にソートというか日付順に入れたいのですが、以下のような 方法だと上手く並びません。どのように書いたら上手く並べられますでしょうか?。 int insert_point = -1; foreach (ListViewItem lvis in listView1.Items) { if (DateTime.Parse(lvis.Text) < InsterDateTime) { insert_point = lvis.Index; } } if (insert_point == -1) { lvi = listView1.Items.Add(insert.DateTime); } else { lvi = listView1.Items.Insert(insert_point, insert.DateTime); }
DateTime.Parse(lvis.Text); これが 原因のような 気がする
普通にList<DateTime>かIEnumerable<DateTime>.OrderByかなんかでソートしてから 突っ込めばいいじゃん
一番単純には ×insert_point = lvis.Index; ○insert_point = lvis.Index+1; じゃないかな? 例えば一個しかない場合にDateTime.Parse(lvis.Text) < InsterDateTimeだった としてlvis.Index==0だから先頭に突っ込んじゃう。
>>727-729 複数のRSSを時間をずらしながら習得しているのでその度に全部List等に入れてソートするのは
どうなのだろうと思うのです。それから日付が新しい(現在時刻に近い)ものほど上に持って来たい
ので+1だと下に来ちゃいますよね。
ダメな人って問題の切り分けが出来ないんだな本当。 ソートはソートであって、ListViewなんか一切関係ないと思うんだが。
他の手段は、listView1.ListViewItemSorter に IComparer 実装した無名クラス ぶちこんどけ。
ちょっと気になっているのですがDateTimeの比較は秒?に変換されてから行われているのですか?
秒ではないな。Tick だろ。
>>702 列挙型の値が追加されるだけならswitch構文が適切じゃないかな。
defaultでNotImplementedExceptionを返してあげればいい。
>>733 なんでMSDNで調べてからものを考えないの?
みなさん、ありがと。break;を追加したらちゃんと動きました、が何故・・・あぁ・・下に行くほど 小さくなるから当たり前ですね;。 insert_point = lvis.Index; break;
Form1.csをデザイナで開こうとすると、何故か変な文字列(XML?)が表示されるようになってしまいました。 元のようにフォームデザイナで表示するにはどのようにすれば良いでしょうか?
手動で何かのコード追加した?
742 :
デフォルトの名無しさん :2009/11/17(火) 01:33:25
>>722 ありがとうございます。
感謝感謝感謝です。
どんな文字列? 頭の2行ぐらい <?xml ...?>はいらんけど
>741 はい。ただ、何が原因なのかは分かりません。 追加部分を削除しても戻りませんので…。 ちなみに実行後は通常通りフォームが表示されます。
コンストラクタに引数増やしちゃったとか
>743 すみません、普通のHTMLのようでした。htmlファイルに突っ込んでブラウザで開くと、 こんなかんじの分が表示されます。一部抜粋 クラス Form1 はチE��インできますが、ファイルの最初��Eクラスではありません。 Visual Studio では、デザイナ��Eファイルの最初��Eクラスを使用する忁E��があります。 クラスがファイルの最初��EクラスになるよぁE��クラス コードを移動して、デザイナを再度読み込んでください、E
ああそれなったことある フォームより前の部分に自分でクラスのコードを追加したでしょ 追加したクラスを別ファイルに移せば直ると思うよ
>747 解決しました! ありがとうございます。
DirectXの音楽再生機能(using Microsoft.DirectX.AudioVideoPlayback)を使って
Form上のボタンを押したときにmp3を再生する、
という動作を実現したいのですが下記のようにエラーが出て完全に詰まっています。
「FileLoadExceptionはハンドルされませんでした。
混合モード アセンブリはバージョン 'v1.1.4322' のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。」
(※こんな感じです→
http://gyazo.com/4b23a2794878de446303f7841d75d8d4.png )
音楽ファイルを読み込んでいる箇所は以下の通りですが、特に読み込みに関して問題があるとは思えません。
Audio a = new Audio("C:\\test.mp3");
a.play();
SoundPlayer等は使わずにDirectXのこの方法で再生したいのですが、助言をいただけないでしょうか?
それ自分のソースの書き方云々じゃなくてエラーメッセージにある通りなのでは dxdiagでバージョン見てみた?
Buttonコントロールってフォーカス設定されてるときに 矢印キーを押したら勝手にフォーカスうつってウザイんだけど あの設定無効化する方法ない?
>>751 親フォームになげるようにして
そっちで潰せばいい
コントロールへの入力を親フォームが奪う方法はぐぐれ
もしくはボタン全部に、キープレスイベントで矢印おされたらキャンセル
>>754 初心者スレで何ふぁびょってんだおまえ?
756 :
698 :2009/11/17(火) 09:41:49
>>718 遅レスですが 情報サンクスです!
確かにUSBのシリアルとかあると・・色々応用の幅が広がりそうです。
>>755 実際にどうなるか試してみりゃ意味わかるんじゃね?
キーボードプレスイベント設定するだけで簡単にできたら質問しねーよ できねーから質問してるんだろうがボケが バカは回答するな
質問者が偉そうにする理由もないけどなw
>>753 では無理
でも、
>>760 見て教えるのやめたわ
初心者は嘘でもいいからへこへこしてろ
俺らが何年もかけて培ってきた知識、技術の一端をただで提供してやるって言ってるのに
そんな態度で教えてやるわけ無いだろボケ
そんなちょっと捻ればわかるようなことも
自分でできない
>>760 みたいなやつは正直PGやってほしくねぇな
>>762 もともと答える気無いくせに偉そうなこと言うな
回答する気のあるやつなら、こういうシンプルな質問なら即レスしてるわ
おまえみたいに答えるスキルもないくせに、スレに常駐して
だらだらとケチ付ける奴はウザイから消えてくれマジで
Windows7を含めてC#でDirectXやる場合、 今ならどういうアプローチをすればいいの? Managed DirectXは古いの?
>>764 何が「やってほしくない」だよ
選ばれたもののつもりか?だいたい趣味か遊びでプログラム組んでるやつはPGじゃねーし。
市ねよアホンダラ
お前の都合で消えるわけねーだろw
つぎのC#5はメタプログラム的なことになるらしい。 メタメタメタ!
メメタァ
コンストラクタ1() : Base() コンストラクタ2(int x) : this() これでコンストラクタ2実行したらコンストラクタ1が呼ばれるけど Baseもよばれるのか?実行すりゃすぐわかるけどめんどくせーから誰か答えろ
ウンコして死ねボケ
>コンストラクタ1() : Base() これ意味なくない
>>772 よくわからんからkwsk どうなるんだ?
ああ、意味ないな。 質問にすら値しないレベルだ。
コンストラクタ1() : Base() コンストラクタ2(int x) : this() これでコンストラクタ2実行したらコンストラクタ1が呼ばれるけど Baseもよばれるのか?実行すりゃすぐわかるけどめんどくせーから誰か答えろ まず、コンストラクタ2実行してコンストラクタ1がよばれるわけないよね
じゃあそのまま死ねよ^^
答えるのもめんどくせーわ
継承時のコンストラクタの呼ばれ方すら知らないとか低脳極まりない
もう こう言ってる間に実行が終わっている件について
C#は良い言語なのになんで使ってる人少ないんだろうな
このスレを見れば分かるとおり 使ってる人のレベルが低いからだよ^^
787 :
デフォルトの名無しさん :2009/11/17(火) 12:14:59
y=sin(ωt+θ)の波形を描くプログラム ωとθは各フォームによって指定できるようにするって問題なんですが、、、 すいません、さっぱりです。 助けてください。
中途半端な実力でわざわざ難解な言語を使ってきたというプライドがある C分かってねー奴はゴミとか未だに言う人がいるだろう? 新しい世代に数分で自分の所まで到達されたらイラッとくんのさ プロだったら最新言語の情報収集も欠かすなよと言いたいが
790 :
デフォルトの名無しさん :2009/11/17(火) 12:18:11
むしろJavaとC#しかない
JavaとC#とPHPとRubyかね PerlとPythonは減ってきたイメージが。
C#は派手な機能は標準ライブラリや、Win環境ならMSのライブラリが沢山あるので
作りたい物の実現までの道のりが短く、敷居がずいぶんと低い。
言語構造自体もJavaから引き継いで型厳密なため単純なので理解しやすく、
そのため大昔のBASICよろしく初心者が大勢いるイメージ
>>788 新しい世代が新しい道具で時間を飛び越えてきたとして、イラッとする奴なんているのかww
道具が旧式でも最新でも、プログラミングで重要なのはロジックを展開させる為のノウハウの方なので、
その人の歴が何年であっても、役に立つ人もいるし立たない人もいる
あと重要なのは「自分にとっての新しい知識」である為、例えどれだけ道具が最新だとしても、
自分が不勉強であれば何の役に立たない。
ツボ抑えればどの言語でもビジネスレベルのアプリなんて簡単に組めるだろ しょせん目的を達成する手段 でもWinアプリならC#の使い勝手の良さは抜群だと思う
人力車と自動車の利便性は同率じゃない
test
苦労すりゃするほどいいものが出来るなんてのは幻想だよな
自己満足は得られますよ
そもそもどの言語が優れているとか考えずに とにかく多数派の言語を使う奴が大半で C#のよさが分かる奴なんかほとんどいないんだお 笑うお
802 :
デフォルトの名無しさん :2009/11/17(火) 13:51:50
苦労すりゃ良い物が出来るのは幻想で間違いない ただ他人から見て苦労に見えたとしても、本人が知りたくて能動的にがつがつ掘り下げて 深部まで把握していく気持ちがあるなら、確実に地力にはなってくる その辺りでかなり大きな差は出てくるぜ 例なんて枚挙に暇が無いくらい
803 :
デフォルトの名無しさん :2009/11/17(火) 13:55:08
>>801 深入りが面倒とか興味がない、あるいはそもそも別言語に柱を置いてる人が遠巻きにみてる
って場合で、かつ何らかの理由で使い始めた人はそうなるかもなww
徐々に市民権は得てるんだからどうでもいいと思うけど
dynamic便利すぎwwwwwなにこれwwwwwww
プログラミング全くの初心者なのですが、どうか教えてください。 ある文字を入力した時にその文字にあらかじめ設定しておいた別の文字を出力するにはどうすればいいのでしょうか? 例えば1と入力した場合には50、5と入力した場合には7Aと出力し1 5と入力した場合に50 7Aと出力させる感じです。 面倒かと思いますがご教授お願いいたします。
private const string _illigalStrig = "?"; private Dictionary<string, string> _list; private void SetConstData() { _list = new Dictionary<string, string>(); _list.Add("1", "50"); _list.Add("5", "7A"); } private void Text1_Change(object sender, EventArgs e) { label1.Text = GetNewString(Text1.Text); } private string GetNewString(string text) { if (string.IsNullOrEmpty(text)) return null; List<string> resList = new List<string>(); for (int i = 0; i < text.Length; i++) { string temp = text.Substring(i, 1); if (_list.ContainsKey(temp)) resList.Add(_list[temp]); else resList.Add(_illigalStrig); } return string.Join(" ", resList.ToArray()); } 適当に試してもいないけどこんな感じ? 予定外の文字とかの処理はどうするか知らんが・・・・
switch(nyuuryoku){ case "1": syuturyoku="50"; break; case "5": syuturyoku="7A"; break; いこうがんばって書く
>>802 枚挙に暇が無いっていいうなら
幾つか実例挙げてくれよ
dynamic使えば見た目は普通のオブジェクト正体はディクショナリとか 変態的なことヤリ放題だな
使いすぎるとわけわからなくなるだろ・・・
実際、演算やメンバ選択などオブジェクトに対するほとんどの操作を 自由に定義できるんだぞw
>>812 その代わりに.NET CLRのもっとも強力な点である静的型付けの最適化が無効になるから程々にな。
dynamicはDLRのキャッシュ使うから意外に遅くないよ せいぜいボックス化+デリゲート呼び出しのコストが入るだけ
815 :
デフォルトの名無しさん :2009/11/17(火) 18:47:51
>>809 そのくらい想像してくれよ。簡単な誰でも知ってる経験してる話だよ
ポトペタやパーツの組み合わせ以外にアルゴリズムやロジックや、元々の仕組みを掘り下げた時、
目的だけでなく副次的にや必然から知るようなノウハウってあるだろ
例えば効率のいい分岐、ノード的な表現、ビット演算使った手法など色々
知ってる人には慣れて当たり前に感じる内容でも、知らない人は知らなくて
その点で表現手段が変わってきたり手狭になったり実現できなかったりする。
掘り下げるのも広げるのも自分の技術広げるって意味で同じだから、
興味沸いたら色々試したり調べたりするといいぜって話さ
人はそれを努力と見るかもしれないが、そんな事はどうでもよくて
ぜんぜん具体的じゃねー
関数とメソッドってどう違うんですか
オブジェクトに紐付いてるかどうかぐらいの違いじゃないの?
>>818 OSで言えばディレクトリとフォルダの違いのようなもの。さほど気にすることはない。
ただ、はっきり言ってしまえばC#に関数はない。
あるのはdelegateと通常のメソッドと静的メソッドだけだ。
他にイベントハンドラやらラムダやらもあるが、その辺は自分で勉強してくれ。
え?関数ってreturnでなんか戻ってくるメソッドのことじゃないの?
822 :
デフォルトの名無しさん :2009/11/17(火) 19:42:36
>>816 なにもかも全部他人に書かせる気か
口移ししないとエサ食えないみたいな事言うなよ
823 :
デフォルトの名無しさん :2009/11/17(火) 19:49:24
関数は単純に関数だよ メソッドはひとかたまりの処理を模したオブジェクトって概念に対して、例えとして 「ふるまい」として名付けられた物 コード部分にだけ逐次的に注目すると変わらないように見えるけど、意味付けが違う、みたいな 例えばC/C++の世界では関数とメソッド(メンバ関数なんて言い方もするが)は、完全に別物 文脈的に話が混線しないならどっちも関数と呼ぶ場合もあるけど、 クラスに紐付いてないただの関数はメソッドとは呼ばない そんな感じ
>>815 まあ技術の変わり目にはどんな分野でもこういうアナクロ指向な人っているんだよ。
もちろん、アナクロな彼の言うことにも一理はあるけどね。
そりゃ、洗濯機があるのにあえてたらいで洗濯することで身につく技能だってあるよw
こういう人の欠陥は、視野が狭いから引いた視点から全体を俯瞰して
物事のプライオティを考えることが出来ない点だな。
825 :
デフォルトの名無しさん :2009/11/17(火) 20:04:42
>>824 ??誰に向けて言ってんだ?
視野を広げる手段の一つを話してる文脈が理解できないとしたら
ちょっと想像力も読解力も足りなくねww
なんでアナクロ扱いなんだよ。思考停止はよくないぞ
なんだ、しったかかよ
釣ったほうも釣られたほうもスレ違いだ
単純に int func(int x,int y){ return x+y; } これが関数で void func(int x,int y){ printf("%d",x+y); } これがメソッドだという風に覚えてたわ。
イベントのやり方わからん。 .netに最初からついてるフォームとかボタンとかのイベントはわかるんだが・・・ 自分でクラスつくるときにどんなイベントを入れればいいのかわからん。 ただのメソッドやデリゲートをクラスに組み込むのと イベントを組み込むのは機能面でどういう違いがあるんですかい? メソッドとデリゲートだけじゃ不可能なことでもイベント使ったらできることって例えばどんなの?
> ただのメソッドやデリゲートをクラスに組み込むのと > イベントを組み込むのは機能面でどういう違いがあるんですかい? メソッドは方向が違う。クラスの利用者がクラスに処理を依頼する形。 デリゲートやイベントはクラスがクラスの利用者に処理を尋ねるようなもの。 で、本質的にはデリゲートは処理の委譲のためのもの、イベントは通知のためのもの。 実際的にはイベントはデリゲートをラップするプロパティみたいなもの。 add/removeの操作限定なので他の利用者がいきなりnull入れたりすることを気にしなくて済む。 > 自分でクラスつくるときにどんなイベントを入れればいいのかわからん。 状態の変化とかをクラスの利用者に通知したいとき。 > メソッドとデリゲートだけじゃ不可能なことでもイベント使ったらできることって例えばどんなの? デザイナで扱える。 コールバックに優先順位を付けるとかもやろうと思えばできる。
>>830 まず、質問はどれかにまとめてくれw
C#のイベントはデザインパターンで言えばObserverパターンにあたり、情報の発信元と受け取り先を分離するために使う。
つまり、発信元ではどこに送るのか、受け取り先ではどこから受け取るのかを考える必要がなくなる。
またイベントハンドラの結びつけさえやればどんなオブジェクト同士でも信号のやり取りができる。
だからこそSystem.Formsではすべてのコントロールのイベントを親のFormで受け取ることができるわけだ。
『メソッドとデリゲートだけじゃ不可能』というが、基本的にチューリング完全なら何でもできるので、
できるかどうかではなく、簡単かどうかで考えるといいよ。
ちなみに大抵は初期化時に静的なイベントパイプラインを構築するだけだと思うが、
これを実行中に動的に切り替えるようにすればさらに強力。Stateパターンなんていらねー。
デリゲートって何ですか?
イベントは一応 他クラスから実行出来無いって保証が付くんだよな
>>833 WikipediaやMSDNくらいは読んでから質問してるんだよな?
サーバへFTP接続する実行ファイルを不特定多数へ公開した場合 ID,パスの流出可能性を出来るだけ抑えるにはどうすればいいと思いますか?
>>834 リフレクションの前には儚い保証ではあるけどな
838 :
デフォルトの名無しさん :2009/11/17(火) 21:32:17
>>836 それはまさかIDパスワードを埋め込むつもりって話か
なにをやりたいのか知らないが、俺なら間にCGIでも挟む
直でFTPでなくて80番経由
CGI、PHP挟められるならそうするんですが 鯖に環境が入っていないのでそうすることも出来ないです やっぱり、どう暗号化してもパス埋め込むのは駄目ですかねぇ。。
あきらめろよ。
大丈夫って保証は取れないねえ。 それに暗号化してもパケット見たらばれるし。 自PCにならパケットスニファなんて好きなだけ入れられるもんな。
そもそもFTPじゃユーザ名パスワードが平文だぜ。
843 :
デフォルトの名無しさん :2009/11/17(火) 22:24:16
質問です。.NET3.5 C#3.0 サイズの大きい画像を256四方で分割したいのです。 実際分割してみると、エクスプローラ上では256*256と表示されるのですが、 Fireworksで読み込ませると、256*256, 255*255, 256*256といった具合に、 元の画像のSizeによって256*256にならず、 切り取った画像を256四方に並べると隙間ができてしまいます。 ペイントに貼り付けるとx=0, y=0のラインが真っ黒になります(255*255)。 元画像のImageオブジェクトの HorizontalResolution,VerticalResolutionは96.01199 なのですが、 コピー先 bmp = new Bitmap(256,256); のHorizontalResolution,Vert(ry は96.0と異なるのでこの辺で誤差が出てる? Graphics.FromHwnd にてモニタのdpiを取得すると96.0と表示されます。 でもReadOnlyプロパティなのでbmpのResolutionを96.01199にできない。 矩形画像を正しく切り取り、保存する方法を教えてください。
844 :
843 :2009/11/17(火) 22:25:52
//ソース int pixel = 256; Bitmap bmp = null; Graphics g = null; Rectangle rect; System.IO.FileInfo fInfo = new System.IO.FileInfo(filePath); Image origin = Image.FromFile(fInfo.FullName); int wBlocks = (int)Math.Ceiling((double)origin.Width / (double)pixel); int hBlocks = (int)Math.Ceiling((double)origin.Height / (double)pixel); Console.WriteLine(filePath); for (int h = 0; h < hBlocks; h++) { for (int w = 0; w < wBlocks; w++) { bmp = new Bitmap(pixel, pixel); g = Graphics.FromImage(bmp); rect = new Rectangle((w * pixel), (h * pixel), pixel, pixel); g.DrawImage(origin, 0, 0, rect, GraphicsUnit.Pixel); string destName = fInfo.Directory + "\\" + fInfo.Name.Replace(fInfo.Extension, string.Empty) + "_" + h.ToString("000") + "_" + w.ToString("000") + ".png"; bmp.Save(destName, System.Drawing.Imaging.ImageFormat.Png); g.Dispose(); bmp.Dispose(); } } origin.Dispose();
抑えるのではなく、逆にIDとパスワードは流出してもOKにすれば問題ない。
LockBitsで直接コピーするのが確実じゃね
>>845 繋ぐ先のFTPサーバのアカウント操作権があるならそれもありだよね。
ダウンロードのみならanonymous FTPにしちゃうってのもありだ。
ユーザーID を本名にして、パスワードをクレジットカード番号とかにしておけばいいな。
>>845 ,847
あー、なるほど。
でもアップロードも必要なので、anonymousは出来ないですね
サーバ側のFTP制御設定弄ってみます。
>>844 どうやったかなぁ。とりあえず座標系とかオフセットモードが
関係してた希ガス。PixelOffsetMode.None してみると駄目?
補間モードとかもいじらなあかんかもしれん。
そもそも自分でFTPアカウントを発行できない環境でそんな利用の仕方が許されるとは思えない
>>843 Fireworks以外のドローソフトだとどうなるの?
>>844 ツッコミどころは色々あるが、さしあたりはバグというほどのものはなさそうだな。
FireworksがDPIを真正直に解釈して誤動作起こしてるのかもしれんね。
まずはbmp形式で保存して、バイナリエディタで眺めてみたら?
暗号化ってさ、 そんなに効果あるものなの? 実際使うのなら、起動時に複合化して、 ずっと変数に持たしておいてもいいの?
>>854 何を? パスワードとか大事なモノを扱うときは、SecureString とか使う方がいいね。
FTPの話は前のスレでも出たな プロトコルの用途がちげぇって結論になった気がする
DrawImageの描画先をint,intじゃなくてRectangleで指定する
>>856 だな。まずはその腐った要求仕様を窓から投げ捨てろといいたい。
で、代わりのプロトコルを考えるとするならどうするか、なんだが。
ユーザーのPCから特定のバイナリデータを手元のサーバーに送りつけるというのでいいんだな?
――とはいうものの、考えてみると、案外これというやりやすい方法が見当たらないので困ったもんだ。
さしあたり思いつくのがHTTPのPOSTで送るかメールで送るか、あとRDBにクエリで送りつけるかだが。
IISが運用できるならC#で解決できるからHTTPで決まりだろう。
メールの場合、LinuxやMacならともかく、Windowsは送信できる環境が保証されてないので
メールを正しく送信できることが保証できない。
企業アプリみたいにこちらで動作環境を自由に決められるなら何とでもなるんだけどね。
>>854 パスワードを暗号化して埋めこんだんだとしても
IL解読して複合化の手順読みとられたらそれで終りだし
メモリに持ったり通信したりするときに取られちゃ意味ないし
>>856 それは、プログラムからFTPは利用しないほうがいいってことですよね?
といっても、CGIやPHPが使えればそちらを使うのですが、
使えないので、ファイルの書き換えを行うには直接FTPするしか無いと思いまして・・・
取りあえずアカウント制御で、ディレクトリ制限を掛けてみました。
これでしばらく挙動見たいと思います
どっかのCGI設置可能なレンタルサーバでも借りてゲートウェイでもするしかないな
プログラムっていうかクライアントから直には止めた方いいかもね
>>860 そのユーザIDとパスワードはFTPアカウント専用なん?
そこが分離されててchrootとかされてるならまだなんぼかマシなんだろうけど。
telnetで接続可能なパスワードとかだったら笑えるな
>>858 IISも無理です、基本サーバ動作のモノは全てアウトでして。
RDBは思いつきませんでした、が・・・見た感じ無理そうです・・・
>>861 レンタルサーバはちょっと厳しいです
>>863 chrootされてますです
ftp内でのコマンドの制限とかquotaとか適切に設定されてるなら とりあえず大丈夫なのかもしれないね
867 :
デフォルトの名無しさん :2009/11/17(火) 23:26:06
そもそもなんでこんな危なっかしい事しなきゃいかんのだ?
自分で試してみましたが、取りあえずchroot周りはうまく制御されてるみたいです もっと良い方法があれば教えてください。 これでしばらく試してみます。ありがとうございました。
869 :
749 :2009/11/18(水) 00:44:38
つーか、環境ぐらい書けば? .NET Framework 4.0 なんて入れてんの?
そりゃ入れてるから「4.0 ランタイムでは読み込めません」なんてメッセージが出るんだろう
Windows SDKってどこからダウンロードできますか? ググって飛んだら 申し訳ございません。ご指定のページが見つかりませんでした。 といわれました
ベータのランタイムなんて入れてんのが悪いんだろ?
C#では、C,C++における『CLOCKS_PER_SEC』のようなものってありませんか?
switch(foo){ case BAR: /*....*/ break; case BAZ: /*....*/ break; default: // バグってなければ絶対こないところ } ↑のプログラムで default:にいっちゃった時に例外投げたいんだけど、 引数エラーのときの ArgumentException みたいに投げるべき 例外ってある?
ArgumentExceptionとか
>>875 のようなものっていわれても
それでなにしたいのさ
879 :
843 :2009/11/18(水) 02:24:33
>>846 一回のプロセスで一度に大量の画像を分割するので
LockBitsは結構しんどかったりします。
unsafeでポインタ使えば?とか言われそうですが^^;
>>852 ペイントの例をすでに書いています。
ほかのソフトはためしてません。
>>853 色々ある突っ込みどころ 教えてください。
rectだけ宣言時にnull代入してないぞ、とか
そういうのは無しでおねがいします。
bmpで保存すると、
fireworksで表示するとペイントのときのように
x=0,y=0のラインが黒になります。
>>857 描画先をRectangle(0,0,pixel,pixel)にしたら
正常に動作しました。
ありがとうございました。
>>876 InvalidFooException
>878 すみません。定数が用意されているならそれを使おうかと思いまして
>>876 メソッド利用者にパラメータが間違っていることを通知したい場合
→ InvalidEnumArgumentException
コーディングミスによってありえないフローになっているのを検出したい場合
→ Debug.Fail(), Trace.Fail()
>>879 >857の言うように、GraphicsUnit指定による呼び出し方によって発生する内部の変換処理を避けるわけか。
まあそりゃあそうだわな。そこが今回の不具合の直接の原因なわけだし。
>色々ある突っ込みどころ 教えてください。
じゃあ手短に。
・wBlocks、整数演算で十分。pixel-1を足してpixelで割ればいい。
・Disposeするオブジェクトはなるべくusing構文で初期化する。明示的な後始末はなるべく書かないのがベター。
・切り出しファイルの名前と形式は外から変えられるように書く。というかこんなところで書くものじゃない。あとstring.Format()
・オブジェクト、=nullの初期化なんてイラネ。何そのC++もどき。むしろ必要なところでvar構文で初期化して使う。
こんなとこかな。
大規模なプログラムになるとプロパティ使うんだろうけども 個人で使う小規模なプログラムってメンバ変数をpublicにしおいても問題ないよね?
自動実装プロパティにしとけば?
886 :
843 :2009/11/18(水) 04:45:56
>>883 いろいろある突っ込みどころ ありがとうございます。
・wBlocksの件
アルゴリズムの問題ですね。
たしかに整数演算で簡潔するのでその方がスマートです。
勉強になりました。
・usingについて
例外が発生するとdisposeされないのでusingを書くべきですが
動作検証用サンプルでしたので急ピッチですのであしからず。
・切り出しファイルの名前を外から指定について
同じく、動作検証用サンプルですので大目にみてください。
StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。
・必要なところでvar指定
2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
ループ内部で使いまわせる変数は外出しすべきだと僕は思います。
また、null代入は無駄なのは分かってますが
「初期化してますよ」ってメッセージをこめたソースを書くのは悪くないと僕は思います。
ちなみにBitmapを毎回new(必然的にGraphicsもnew) してるのは画像サイズが256の倍数でないときに
右端と下端の矩形を描画すると、前回の描画が残ってしまうための回避策です。
Graphics.Clearで思った動作するかも。テストしてないのでなんともいえませんが。
varは メソッドの戻り値の型をそのまま受けるとき
linq+foreach使うときなど、ジェネリックの型名なんだっけってなるとき
使用するのはいいと思うのですが、
C#使ってるんだからその場で初期化する変数は型はしっかり書いたほうが
いいと自分は思ってます。賛否はあると思いますが。
(型付DataSetのテーブルアダプタみたいに型名が長いと初期化が冗長になるので
そういうときは見易さを考慮して左辺はvarで受けたりします。)
コーディング規則が決められているときはもちろんそれに従います。
C#ってマイクロソフトが作ったの?
>>886 俺はおまえさんの主張に大体同意だな
そもそも宗教的なことまで突っ込みを入れるのは回答者の分を超えてると思うよ
>>886 俺もおまえさん寄りの意見だが、
突っ込んでくださいと言っておきながら、
それは違う、あれは違うと条件を付けて反論するのはどうかと思う。
自信があるなら最初から聞くな。
聞いた以上は真摯に受け止めるか、
変なやつに聞いちゃったとスルーなさい。
プライドだけは一丁前
>>889 それはおかしい
教えを請うたからといって間違った回答や、
自分の方針と反する内容を無条件で聞く必要はない
かといってスルーするのは礼を失している
886の対応は真摯な態度だと思うぞ
>>886 >2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
>ループ内部で使いまわせる変数は外出しすべきだと僕は思います。
少なくとも今回のケースでは、変数宣言を外に書いても速度的にメリット無いよ。
変数宣言を一回通るたびに実行コストがかかるとか杓子定規に考えてない?
なんでC#はmain()じゃなくてMain() なんだろうな。 cもc++もjavaもmainで始まったのに、なぜC#はMainなの?それだけ気になる。
横だけど・・・ え、そうなの? スコープ入ったときにスタックに確保、 スコープ出るときにスタックから解放って処理普通にやってんのかと思ってた。
>>893 命名規約の問題でしょ。
メソッド名はUpperCamelCaseで表すってルールにしてるから"M"ainになってるだけ。
なんでUpperCamelCaseを採用したのかは言語設計者のポリシーなんだろね。
黎明期の言語じゃあるまいし
>>891 無条件で聞けなんてどこにかいてあんの?
ま、どっちもどっちだ
>>894 C#で書いたコードをReflectorで逆コンパイルしたときに現れるgotoだらけのコード見たことない?
見てみれば分かるけど、結構オブジェクトの寿命が変わるような書き換えがされている。
変数スコープが終わる前にGCされてファイナライザが呼ばれることがあるのはこのため。
>>899 なるほど
ちまちましたコードレベルの最適化はほんとに意味なくなってきてるんだなぁ
勉強になった
>>898 日本語が理解できない人だったんですね。
これは失礼しました。
>>886 >StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。
なんでやねん。テストコード書けばテストできる範囲でしょ。
>2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。
そして、むしろvar構文自体より(便利なものは積極的に使うべきだと思うが)ローカルインスタンスの明示的な初期化(=null;)のほうが問題。
C#ではすべての変数はデフォルト値で初期化されることが保証されているので
object obj=null;
などという初期化は無意味。それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど
初期化してると出してくれなくなったりするので余計に悪化している。
>>893 Javaの皮を被ったDelphiだから
varはなんか、なんかちょっと多様したら不味いことがおきるんじゃないかって気がしてならない 具体的に何が起きるのかはわからんけど dynamicもしかり・・・
メソッド名がCamelCaseなのはMSの旧来の伝統
>>904 むしろvar使ったら読みづらくなるようなスコープの長い変数を作るのが悪い
>>902 > object obj=null;
> などという初期化は無意味。
可読性的には意味がある
>それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど
> 初期化してると出してくれなくなったりするので余計に悪化している。
ダウト
object obj; object obj = null; どう可読性に違いが
908 :
905 :2009/11/18(水) 09:25:02
すまんPascalCaseだった フィールドを既定値(default(type)の値)で初期化するとFxCopで警告出るよ
FxCop日本語版は有料なのか・・・
ローカル変数の確保は内部的にはメソッドスコープだよ。 そんなのを気にしながらBitmapをループ内で作るって…
世の中富豪的っていうかこまけえ最適化はコンパイラがやってやんぜ!!な方向に 確実に進化してるんだなぁ
nullの方がヌルヌルして入りやすい
ローカル変数はデフォルト値で初期化されるって、されないよ。 だから必ずどこかで代入してから参照する必要があり、でないとエラーになる。 もちろん宣言と同時に代入するのでなくとも、どこかで入れればいいが、 宣言で代入するのが普通は分かりやすいけどな(というかできるだけ最初に代入する必要がある場所で宣言する)。 初期化が保証されてるのはフィールドだ。
>> 2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは? >実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。 実行時最適化関係ないよ。 ILの時点でローカル変数はメソッドスコープで確保される。
実際ループ内でしか使わない変数ならループ内で宣言してくれた方が コード読む時も余計なこと考えなくてすむしメソッド化する時とかも便利だしなぁ。 #メソッド化すると呼び出しコスト↑と結局毎回確保になっちゃうけど
まあちっちゃなメソッドならインライン展開されるけどな。 とはいってもかなり小さい場合だけだったとは思うけど。
最終的にILになれば同じつうならあとは好みの問題だろう・・・ ギリギリの極限まで速度を追い求めない限り 些細な速度UPを得るよりも可読・メンテ性を維持したい というのが俺の持論 もちろん事務系とかの話でFA系の処理とかになれば必要なところは可読性捨ててでも速度UPとるけど
みんながどのコードを前提に話してるのか見えないんだが・・・ ループ内で宣言したくないのって言うと、 よっぽどでかいインスタンスを毎回newして捨てるとか そいういう場合?
変数のスコープを最小限にするのは宗教でもなんでもなく常識だろ 宣言だけループ外に置いて、わざわざミスが起こる確率を増加させる必要はない あと、理由もなくローカル変数を規定値などに初期化するのも良くない たとえば、未初期化の変数を参照するとコンパイルエラーになるので即座に分かるが、 無駄に初期化していると問題の発覚が遅れ、デバッグに要する時間も増える
>>922 処理上で意味のある値で初期化するんであって
常に null で初期化すると勘違いしてるから
そういう的外れな反論が飛び出すんだろう
インスタンス化の削減も微妙だけどな。 もちろんサイズがでかかったりインスタンス化が重いもので かつ再利用できるものならループ内でのインスタンス化を削減するのもいいが、 何でもかんでも削減すりゃいいってもんじゃない。 よっぽどタイトなループなら別だが。 個人的には、よく言われるStringBuilderの再利用なんかも微妙だと思ってる。 平均的にはある程度効果はあるが、常識のようにやるべきこととは思えない。
「理由もなく」初期化すんなよってことであって 意味あって null で初期化すんのはべつにかまわんと思うけどな。
>>924 そういうのは最適化部分を狭いメソッド内に押し込めればOKってルールでやってるなあ。
なぜなら、StringBuilderのToStringは内部バッファをそのまま流用してString化するから。 その後StringBuilderに変更を加えた時点でバッファは複製される。 当たり前だけど結局メモリの再確保は起こるわけで、 StringBuilderを新たにインスタンス化するのと大差があるわけではない。
そんな細かいこと考えるよりもっとロジック工夫して高速化しろよ
だれに言ってんだよ
今日もお前ら絶好調だな
もっと褒めて
結局そういうのもバッドノウハウになってくんだろな
>>906 スマンカッタ。確かにフィールド、ローカル変数共に初期化してても他で使ってなかったらワーニング出るな。
初期化してないときとワーニングの内容は変わるけど。
>可読性的には意味がある
意味がないことが多い。922の言うように未初期化参照のコンパイルエラーを出させるほうが素直なコード。
初期化コード自体がif文で分岐してるとかなら初期値を与えることはあるが、それは例外的な措置だよね。
>>923 ,925
844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?
まあ初期化なくす前に明らかに宣言位置を変える方向だが。 宣言位置が適切なら、多くの場合その場で初期化が自然になるからね。 もちろん意味のない初期化はするべきではないけど、 上記を守れば基本的にそういうのはなくなるはず。
>>933 >844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?
不要だがあったからといって悪い訳じゃない
チームの規約にしたがうレベル 戦ってまで守らなきゃいけない一線ではないわな どっちにしても
937 :
デフォルトの名無しさん :2009/11/18(水) 14:14:32
>>935 >Bitmap、Graphicsインスタンスのnull初期化は不要だよな?
インスタンスのnull初期化じゃなくて変数(ry
formAからform.showでformBを開いた後、不要になったformBを×ボタンで閉じます。 この時、formBのリソースは全て開放されますよね?。
ガベージコレクションの対象にならないと開放されないよ。
そのformという変数を保持している間は解放されないかな
規定のインスタンスを使用している場合はアプリ終了まで保持されるというような話を聞いた。 (でもこれってたしかVB.NETの話だったような。C#では規定のインスタンスってあるんかな?)
942 :
938 :2009/11/18(水) 16:27:33
そうなるとFormClosingでちゃんと処理してから終了させた方が良さそうですね ありがとうございます
>>942 いあ、そういふ意味ではないんだが。
Form_Closingイベントとメモリ開放は別話。
>>942 モーダルダイアログならFormAで次のようにFormBを表示し
using(Form formB = new FormB())
{
formB.ShowDialog(this);
}
formBフォームの中で使ってるリソースはFormBのDisposeをオーバーライドして行う
Form2のClosingでForm2自体をDisposeしちゃ駄目ですか
>>944 学生さんだね。
社会に出ればわかるけど冤罪も罪のうち、疑わしきは罰するってのは法治国家の不文律だよ。
推定無罪
最低値、最大値、除外値を引数とする関数を用意し、 最低値から最大値までの間で、除外値以外がランダム算出されるまで繰り返し、 それを返すためにはどうすればいいですか?
>>950 そのまんま言ったとおりに書けるような・・・
なにがわからない?
乱数?
Random rand = new Random();
int value = rand.Next(min, max);
>>951 それじゃ max が含まれないから max + 1 な
>>953 いや、だからあとは除外値以外でるまでループすりゃいいだけでしょうが・・・
こんなのの何がわからないのかがわからんわ
除外値を除くような処理が無いかなと思ったのですが、 やっぱりループさせないと駄目ですかね
あるわけないじゃん 仮に除外値を指定できたとしても内部で除外値以外が出るまでループする以外に実装する方法がない
うん。randomクラスは単純処理しかできない
958 :
デフォルトの名無しさん :2009/11/18(水) 20:28:21
除外値が必要なんていう固有の都合は自分で実装するの
「本当にランダム」って何よw
>>951 のコードだけをそのまま動かしたら
前の呼び出しから1ms以上経ってないと同じ値が出るけど
起動せんし。ランダム。
>>961 あたりまえじゃん・・・
ドキュメント読めよ・・・
WindowsXPでVistaのガジェットみたいにデスクトップにアプリを表示するにはどのようにすればいいのでしょうか?
フォームのLoadイベントあたりで this.FormBorderStyle = FormBorderStyle.None;で枠を消す this.Regionプロパティを弄って好きな形に設定する
967 :
デフォルトの名無しさん :2009/11/18(水) 21:40:38
むしろ都合や目的をどうやって実現するか考えて頭ひねって形にしていく事こそがプログラミング であるまげどん エンダアアアァァァァ〜イヤアアア〜〜
プログラミング初めてで数週間やってきたのですが、 クラスの概念がよく分かりません。 Form1で始めに作られたクラスにメソッドとイベントハンドラ組み合わせるだけで、 大抵のプログラムは作れると思うのですが、本来の使い方と間違ってたりしますか?
そもそもクラスとかが分かってないと話が通じないんだよ。まずは余計なこと考えずに勉強しろ。
>>965 MakeTransparencyだかthis.BackColor=Color.Transparensy
だかなんだかでできた。
>>968 それでもたいていのプログラムは作れるが
他人が作ったコードやサンプルを読むことができない
それでもいいならそれでいいんじゃね
いえ、クラスの使い方とかは分かってるんです。 インスタンスだとか、継承だとかも分かってるんですが、 実際に使う機会有りますか? クラスも1つのフォームに1つあれば難無さそうなんですが・・・
>>968 クラスの概念て話ならオブジェクト指向、あたりでググれば解説が山盛り出てくるぞ
あと Form1 云々の話は Windows の Visual Studio C# 等の固有の話で、
それで色々出来るからってそれが間違いとか正しいとかってもんじゃない
てか、それとクラスの概念の話はあんまり関係ない
>>971 え?おまえフォームのインスタンス生成しないでフォームつかってんの?
二つのフォームつくるときとかどうしてんの?ありえねぇよ
>>973 あ、一気にもやもやしてたこと理解しました
Form生成するときにインスタンス使いますね。あー。あー。
俺何言ってるんだろう。お恥ずかしい。
>>971 処理の単位化、分離分業の意味が多分わかってないか、
まだ必要と思える経験に出くわしてないんだと思う。
実際に使う機会どころか、むしろ必須と言うか‥
てか想像してみ。ライブラリにあるクラスが山盛り1個のソースに突っ込まれてる状態を
クラス単位での分離分業が不要だとすると、極端な話そうなってしまう
.net2.0系でFunc<int,int>とかを使いたいけど何か方法無い?
自力で定義したらいいんじゃない?
C++の int x; int& y = x; みたいなことって出来ないですか? refって引数にしか使えないですよね? ポインタを使うと、時間が経つとガベージコレクションでxのアドレスが変わるのか、 yが指す値が変わってしまうのでダメっぽいのですが・・・
ない。 自分で定義するしか。
980 :
965 :2009/11/18(水) 22:24:55
>>970 それってWin+Dでデスクトップを表示したときには消えるんじゃない?
>>978 通常の変数で参照型を使いたいならクラスにするしかないね・・・
>>978 一応隠しキーワードでこういうことができる
int x = 0;
TypedReference y = __makeref(x);
x = 100;
Console.WriteLine(__refvalue(y, int));
実際のコードで使ったら死刑ね
常識的に考えて__で始まるキーワードは使いたくないだろうw __系はP/Invokeで可変長引数を扱うためだけに用意されてる ドキュメント化されてないってことはいつ消えても文句言えないってことだぞ
そもそもC#の言語仕様の範囲外だから使ったらC#のコードじゃなくなるな
987 :
978 :2009/11/18(水) 23:21:43
みなさんありがとうございます。 難しそうなので、とりあえず諦めて別の方法探すことにします。
>>988 消えないかもしれないし消えるかもしれない
あるときフレームワークをバージョンアップしたらソフトが動かなくなりました
とか5年後に言われてその時に簡単にソフトを治せるならどうぞ
なぜほかのみんなが推奨していないかの可能性を考えてみればどう?
その程度の動作の為だけにリスクがでかすぎる
職業でソフト組めばわかるよ
質問を勝手に自分の理解できる範囲の問題に解釈し直すのはいくない
>>950 亀レスで申し訳ないが、それだと
例えば最低値=5で最大値=7で除外値=6の場合、1/3の確率でrand.Nextを再度呼び出すことになるわけだが、
本当にそれでいいのか?
除外値が1つだけだったらそんなに問題にはならないと思うけど……
質問を勝手に自分の理解できる範囲の問題に解釈し直すのはいくない
スレ立て乙
乙乙
うめ
WindowsMobile用のアプリってC#で作れるの?
うめ
げと
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。