イデオーン?
ASP.NETサーバーを借りているんですが、 SecurityPermissionFlag.UnmanagedCodeのクラスは使えないらしく、 Mutexクラスが使えません 代替手段ってどんなものが考えられるでしょうか?
12 :
9 :2010/03/24(水) 03:02:43
いちおう、ファイルが開けるかどうかで排他状態を管理するオブジェクトを作りました 他にいい方法があったら教えてください
13 :
9 :2010/03/24(水) 03:04:46
あと、追加で質問です ローカルでセキュリティのテストをしたいのですが、 コマンドプロンプトからSecurityPermissionFlag.UnmanagedCodeなどを禁止した状態で 実行する方法はないでしょうか?
訂正、High以上の制限のどれか。 Mediumが多いのかな?
>>15 Mediumです
ローカルでレンタルサーバーと同じ設定にしたいのですが、XPHomeなのでIISが使えません
なので、普通のコンソールアプリケーションでセキュリティを指定して実行する方法がないかなぁ・・と
まず、IISがちゃんと動く環境を構築しなよ。
つーか開発Webサーバ使え
19 :
デフォルトの名無しさん :2010/03/25(木) 00:13:46
Formに処理をずらずら書きたくないのでコントロールではないクラスを 間にはさんでコントロールを管理したいんだがその管理クラスに土台となる コントロールのインスタンスを渡すのは邪道だろうか?
コントロールを管理って良く分かんないなぁ
ビヘイビアみたいなもん?
まあbuttonとかGUI部品をFormに貼り付けるとイベントハンドラが Formの中にできますよね Form上の部品もある程度機能ごとに分けれるので内部的に 自作クラスをはさんでコードも機能わけできればなあと
日本語で説明だと分かりにくいですねw 管理クラスは自分が管理するコントロールを動的に生成します。 このほかにもHogeBなどと別の管理クラスがあってクラス間でやり取りするときは デリゲートを使ってForm経由でやり取りします。 class HogeA { public HogeA(Control control) { Button button = new Button(); control.Controls.Add(button); } //イベントハンドラなどもこのクラスで管理 }
>>23 もしユーザーコントロール(複合コントロール)のことを知らずに
ユーザーコントロール的なものをやろうとしてるのなら、別に普通。
ただFormのコードを見た目だけスッキリさせたい(何のために?)、
なんてだけの動機なら、恐らく愚行。
FormはただのViewで実装はクラスファイルでしたいって言えば通じるよ
26 :
デフォルトの名無しさん :2010/03/25(木) 00:38:31
>>24 >>25 まあユーザーコントロールの存在は知ってるのですが
意味合い的には
>>25 のいうような感じですかね・・・
>>26 そもそもコントロールの制御ってのは、
>>25 のいう「ただのView」の仕事なんだけど。
でなきゃViewの仕事って何があるんだよ。
逆に言えば、ロジックを実装してるクラスでコントロールなんか普通の常識があれば
触りたくないと思うだろう。
なんか
>>25 も
>>23 も勘違いしてないか。
>>27 まあ理由があるんですよ
デザイナーが出力するようなコードをわざわざ書いてる部分もあるんですが
どうしても動的に配置を変えたり、コントロールを動的に作るコードを書か
ないといけないので試行錯誤した結果こういう案ができあがったんですよ・・・
このクラスはviewを管理コントロールするクラスというか
29 :
デフォルトの名無しさん :2010/03/25(木) 00:57:04
つまりMVC? WPFではCはVに全く依存しないように作れるんだけど(MVVMという) WinFormsではどこかでCにVを渡さないと無理
理由があるならそうすればいい 邪道かどうかなんて聞くまでもない 邪道だと言った所で聞き入れないだろ?
まあそもそもの原因がsplitContainerにあるんですが・・・ splitContainerって分割を変えると上からもしくは左からが基準になってますけど 下からとか右からってできましったっけ? これができるといいんですが
すまんが
>>33 の言いたいことが全く理解出来ない
Splitって二つ以上に分割できたっけ?
35 :
デフォルトの名無しさん :2010/03/25(木) 01:40:12
>>34 panel1とpanel2と分割されるけど
panel1 panel2
panel1
panel2
っていうのはあるけど
panel2 panel1
panel2
panel1
はないよね?ってことじゃないの?
継承してそういう機能付ければ
panelを2つ置いて間にsplitter使ったら?
ちょっと失礼するよ 仕事で使うみたいだからC♯の勉強をはじめたんだが なにかを作りたいわけでもないのでイマイチはかどらないんだ やっぱり目標は必要だよな? プログラミングを独学学んだ人がいればどういう風に勉強に取り組んだか聞かせてもらえないかい?
あきらめろよ。
独学でやるような人はプログラミング自体が目的になってる
>>39 はやくね?ww
>>40 現状そうだな
なにかを作るわけでもないから得た知識がすぐに抜けていく感じがするわ
ゲームでも作れば フォームアプリと違ってごまかしが効かないから勉強になるよ
お題を出すスレがあるからそこの奴を作る
なにか必要性や目的があるとか、プログラミング自体が楽しいとかでないなら意味なくね? たぶん身につかないよ。
あるそふとから出ている音を マイク入力とすることってできませんか
仕事用のちょっとしたツールでも作ってみればいいやん。
はかどらないなりにやってればそのうち覚えると思うよ。
>>45 ・・・マイク出力端子をマイク入力端子に直結でいいやん。
>>48 一つのソフトが出してる音だけ。
がほしいんです
ステレオミキサー使えばいいんじゃない? たまにハード的に使えないPCあるけど、その場合はオーディオストリームキャプチャー機能ついたソフトで。
拍手の左手の鳴った音だけ欲しい。と仰るか。
どうせエロゲの音声だろ
radikoでしょ。
>>41 手っ取り早くなら専ブラ作れ
ざっくり学べる
>>54 radikoだろうな
現状はrtmpをそのまま受信するあのツールを起動するGUIを書くか
質問のようにフックとかしてぶっこ抜きか、ごく普通な手段として
録音ソフトを別途起動するか
最後の方法は音が鳴っちゃうからなあ
フックとかそんな面倒なことじゃなくて ドライバ作ればいいだけじゃん
>>57 ドライバー作れるようなのがどれだけいるのか
仮想デバイスドライバーくらいならやってみたいがどこから手をつけていいかわからん
音声を女の声にするやつとかあるよな
誰も的確なレスが返せないみたいですし、時間の無駄みたいですね プログラムに関する質問を日本語の掲示板に頼っている時点でここの連中の程度は知れますけど まぁがんばってください
>>61 なにぶちきれてるか知らんけど結論とすればC#でやることじゃないよってことだよw
・ほかのツールで録音すれば?->C#は関係ないし
・ドライバー作れば?->C/C++の話だし
・フック->これもC/C++の方がいいだろう
何使うにせよ言語スレでやるような話題じゃない
C#でするのは難しいと言うことなので C/C++のほうで考えてみます 質問に答えてくださってありがとうございます。
仕事でC#使うから勉強に、ってのが最初の話じゃなかったのか・・・Cのほうに行ってどうすんだよ
それ別人とちゃうの? 仕事で〜 radikoの録音で〜
Buttonをクリックした時だけそのボタンのツールチップを 表示させようとしているのですが、1回クリックして表示すると 2回目以降はButtonにフォーカスを当てただけで表示されてしまいます。 Buttonに紐付けられたツールチップのオブジェクトの参照を 無効にするには、どのタイミングのイベントで行えばよいでしょうか?
Leaveとかじゃね
>>68 MSDNライブラリのToolTipsメンバ一覧を見てそれを言ってるとしたらかなり頭が悪い。
見ずにいってるとしたら性格が異常。
>>69 MouseLeaveで解決しました。
>>70 ありがとうございます。
Showメソッド使ってやれよ、せっかくあるんだから。
73 :
デフォルトの名無しさん :2010/03/26(金) 23:50:25
form1でハローワールドやってるものです。 javaだとpublic static void mainというところでインスタンスを作るけど c#はその必要はないのですか?
>>73 プロジェクトのフォルダにあるProgram.csを見てみるといい。
>>73 ない
windowsアプリの場合Program.csの中のstatic void Main()で勝手にやってる
デザイナーでデザインした際に自動で書いてくれるコードは
Form1.Designer.csの中に入ってる。(Form1のコンストラクタがInitializeComponent()を呼び出してる)
こんな構造
なので基本的にはコンストラクタのInitializeComponent();の後か
Loadイベントを作ってその中にコードを書くなどすればOK
VS2003の頃はフォームの中にMainが作られてたな Javaなんかだと何故かあれを好む人がいるけど普通に考えたら不自然だよな
>>76 不自然だねw
IDEが勝手に用意していきなり作られるForm1だって所詮はFormを継承したクラスに過ぎないからねえ
プログラムとしてみると今の方が普通
海外サイトで見つけたクラスをそのまま使ってるコードを sourceforgeで晒すのって問題あるんだろうか? コメントで入手先とか書いとけばいいのかな?
>>79 書いた人間に訊けよ
そんなこと他の誰も許可できん
ライセンスないなら聞け
いちいち聴く必要ないだろ めんどくさい
自己責任じゃね?
別のプロセスが使用中のファイルを開くと例外がでるのですが、 ファイルを開く前にプロセスで使用中か調べる方法ってありますか?
ファイルを開く前に調べても ファイルを開く時には使用中かもしれないので 全くの無駄な行為でしかない
>>85 ファイルを開くときに使用中でも問題ないです
例外を処理する回数を減らしたいので
事前にチェックしてもしなくても、例外の処理回数は変わらないだろ。
Exist()は使用中かどうかも調べてくれなかったっけ
そんなんない。
全てのプロセスを列挙して、それらが使っているハンドルを列挙 その中に目的のファイルがあるかどうか調べる という感じだっけ?
>>86 なるほどそういうことね
Existsでいいんじゃない
>呼び出し元が必要なアクセス許可を持ち、path に既存のファイル名が格納されている場合は true。
>それ以外の場合は false。
>呼び出し元が指定したファイルを読み取るための十分なアクセス許可を持たない場合、例外はスローされず、
>このメソッドは、path の有無にかかわらず false を返します。
>>87 別のプロセスが使用中のときはファイルを開きません
>>88 ,91
File.Existsは読み取り許可をチェックするだけみたいです
1: 2: ともにTrueになりました
File.WriteAllText("aaa.txt", "test", Encoding.UTF8);
Trace.WriteLine("1: " + File.Exists("aaa.txt"));
using (var stream = File.OpenWrite("aaa.txt"))
{
Trace.WriteLine("2: " + File.Exists("aaa.txt"));
}
>>89 やっぱりないんですかね
>>90 そこまでするなら例外を処理したほうが良さそうです
使った事無いけど、FileSecurityってのは使えない?
使えない。
>>92 >>85 の言ってること理解しようよ。
1. ファイルが他のプロセスで開かれてるかチェック
2. 開かれてないので、自分のアプリで開く
3. 1. - 2. の間に他のプロセスが開いてたら例外発生
なんだから、いきなり 2. をやって例外をトラップすればいいだけ。
まったく理解できん。事前にチェックすると、なんで例外処理の回数が減るの?
仮に例外処理なしで事前にチェックできるなら 2 を実行しない分例外処理の回数が減るだろ
例外処理が発生するのは1-2の間に他プロセスで開かれた時のみ 超レアケースだな
>>98 自分のアプリからしか使わないファイルで、
そのアプリが多数で同時に使われないなら減るんじゃね。
まあ数万ファイル/秒、しかもその中の相当数がロックとかいう意味不明な状態じゃない限り 有意な差はないだろうけどな
例外の発生件数を減らす意味ってあるの?? チェックとロック(=ファイルオープン)がアトミックじゃないなんて 典型的なダメダメファイルロックじゃんね。
>>103 実行コストでしょ
例外処理より軽い確認処理があるなら先にやっといて損はない、可能性がある
まあほとんどの場合無意味、むしろ不利益になる可能性の方が高いだろうけど
いやこの場合はあらかじめチェックした方が遅くなるだろ
例外の発生するケースの方がレアならそうだろうね
というかチェックのコスト自体が大きいはずだからな
えーと、やりたいことはこのスレの
>>12 です
Mutexが使えないので、ファイルの排他処理でMutexをエミュレートしてます
なので、正常ケース:例外ケースが1:10000くらいになってしまい、
例外を処理するのは効率悪いのではないかと・・・
ようやく理解できた。
が、そんなこと気にするより、わかりやすくてシンプルなコードの方がいいと思うよ。
ちなみに、他のプロセスがファイルを開いているかどうかは、
>>90 みたいな感じで
非公開関数を使うか、openfiles コマンドみたいなのを使う必要あり。
ランチャーとかどうやって作ってるんだろうな
112 :
デフォルトの名無しさん :2010/03/27(土) 19:42:24
実際に計ってみましたか?
>>106 おまえの存在してるケースの方がレアじゃね。
ASP.NETでサーバ単位の排他とか謎だな、としか
.NET 2.0でListView使ってるんですが、 複数アイテムを洗濯した状態でチェックボックスをクリックすると、 ItemCheckedがアイテム毎に呼ばれるので処理が重くなってしまいます。 何かいい案ないでしょうか。 やりたいこととしては、 チェックが変更された事を契機としたチェックされているアイテム数の表示です。
あります。
計った?何と何を?
開いているかどうか、じゃなくて、存在するかどうかを判定条件にすれば、 もう少し楽になると思うよ。
ありません。
>>116 ItemCheckedじゃなくてタイマで定期的に調べるようにしたら
チェックのコストは大きいぞ。API呼ぶんだから。 そんでもって実際に開くときに同じこともう一度やるはめになる。
>>119 あ!まさにそれがベストっぽいですね!
ありがとうございました!
>>122 開けないケースのほうが数多いので、開くときのコストは大きくてもOKです
以上、目的と手段がごっちゃになった例、でした。
ここで質問していいのかわからないので、まずかったら教えてください ネット上でフリーで公開されているソースコード?と呼ばれるものを 実行ファイルにしたいのですが(そこでは実行ファイルそのものは公開されていない) 拡張子が「xxxx.c」となっているのですが、これはコンパイルというものをすれば実行ファイルに変わるのでしょうか? プログラムは完全に初心者なので、どういうソフトで作業を行うのかすらわかりません 4つほど公開されいるソースコードを実行ファイルにするだけです なにかフリーで手頃なソフトがもし存在するのであれば、教えて頂けると助かります すれ違いの質問であれば、失礼致しました
とても失礼です。
そういう理解でいいですが、.c の場合は、Cコンパイラが必要です。 ここは C# のスレなので、スレ違いです。
>>116 System.Timers.TimerをAutoReset=falseにしといて、Intervalは33ぐらい、
タイマのイベントで数えて表示、
でItemCheckedではタイマのStart呼び出すだけ、とか
C#というのはCのすごい版…みたいな解釈をしていましたorz 該当スレを探して、再度そちらで質問させて頂きます スレ違い失礼いたしました
スレ立てるまでもない質問スレはなくなったんだな
>>129 いや、君のレベルだと人に聞く前にとりあえず基礎を調べてから勉強しといたほうが・・・。
>>128 なぜSystem.Windows.Forms.Timerじゃないんだよ。
>>132 AutoResetが便利だからつい
SynchronizingObjectはコンポーネントとしてデザイナにD&Dすれば自動設定だし
アレはうんこなので
>>128 UIをUIスレッド以外で弄ると発狂するよ
このスレの奴はレベルが低いのがよく分かるな。 低いってのは回答する側の方。 ググって過去スレなんか見た時なんかひどいもんだ。
>>135 SynchronizingObject
すいません、質問します。
TabControlについて研究していますが、
たとえば、JaneStyleにあるようなタブコントロールだと、
タブを左クリックすれば、すぐにそのタブが選択されますが、
一般的な.netのTabControlで、JaneStyleのようなFlatButtonの場合ですが、
マウスの右ボタンを押下(DOWN)した状態で→軽くボタンが浮き上がる表示(この状態ではまだ選択という状態になっていません)
そして、
マウスの右ボタンを離した(UP)した状態で→ボタンが押された表示(この状態で、タブが選択されたという状態になります)
となるのですが、
http://ghardzatudan6.es.land.to/up/img-box/img20100327070642.jpg Janeのように、マウスの右ボタンを押下(DOWN)した段階で、すぐに、そのタブが選択されるような処理をしたい
場合はどのようなコードを入れればいいのでしょうか?
Janeで実装できているのですから、VB.NETでも実装できないわけないと思い、調べていますが、
解決できません。
だれかご存知な方はいらっしゃいますか?
ClickじゃなくてDownイベントいいんでないの?
VBスレ行けw
そうだな。なぜ此処で聞くw
>>140 VBスレで答えがなかったからこっちに書いたと思うけど、
うそでも「C#でも実装できないわけないと思い、」と書いておけw
.NET の TabControl の MouseDown イベントで、どのボタンを
押そうとしているのかとか、マウスポインタがどのボタンの上に
あるのかとかが、取り出せないような気がするので、自分の
希望の挙動をするコントロールを自作しないといけないような
気がする。
気がする。笑
146 :
140 :2010/03/28(日) 12:58:09
解決しました Captureを外して(false)、その後、SelectedIndexに選択するインデックスを 設定すれば、ワンクリックで選択されるようになりました。
>>146 乙
そういえば、.NETスレないよね
C#とVBで分ける意味がわからない
148 :
140 :2010/03/28(日) 13:06:08
どうせ言語の質問に終始するだけだろ CLRの挙動やFCL全体について質問する奴は少なそうだし
VBユーザの中にはC#を絶対に読もうとしない民族がいる
底辺同士仲良くすればいいのにね
ですね
.NETスレがあっても事実上C#スレになっちゃうからな VBスレ以外の.NET関連のスレでVBのコードはほとんど見かけない
C#でコード例とか書いたら、「C#わからないのでVBのコードください」とか言うやつが 出てくるだけ。 なので、言語ごとでいいんじゃね?
俺VB.NETほとんど知らないけど、MSDNのサンプル位なら余裕で読めるな .NETFrameworkを使う以上、そんなに差は出ないんで
>>157 ところが「変換したものをコピペしてみましたが動きません」とか言い出すんだ
面倒だからC#で実行ファイル作って、VBソースとして復元しろw
>>156 C#とVBってキーワードが違うだけなのに。それはOOPが理解できてないってことなんじゃ?
VBにしかないの無かったっけ Myなんたら それはそれとしてRichTextBoxで挿入/上書きモードが解る方法ないですか
>>163 名前付き引数とか省略可能な引数とか。
COMを呼ぶときに便利だよ。
C#からExcelを呼ぶときにMissingを死ぬほど埋めるのはさすがにしんどい。
最近プログラム初めたのですが(C#) 今開発中のソースコードを見せて おっ これは! とか こいつw とか わいわいできるスレッドはありますか?
>>165 名前付き引数と省略可パラメータはC#4.0で追加
なんかもうCOMはラッパー使わずに全部dynamicでやってもいいんじゃないかとも思うけどな
Silverlight4なんかそうなってる
>>167 あと、インテリセンスだけは効いてくれるとありがたいんだけどなぁ。
>>167 IDispatchはともかくIUnknownはどうすんのよ
dynamicではキャストも動的にバインドされるから問題ない
>>163 public partial class Form1 : Form {
[DllImport("user32.dll")]
public static extern int GetKeyboardState(byte[] lpKeyState);
static bool isOverType() {
byte[] barr = new byte[256];
const int VK_INSERT = 0x2D;
GetKeyboardState(barr);
return 0 == (barr[VK_INSERT] & 0x01);
}
public Form1() {
InitializeComponent();
setTextMode();
}
void setTextMode() {
toolStripStatusLabel1.Text = isOverType() ? "Ins" : "Ovr";
}
private void richTextBox1_KeyUp(object sender, KeyEventArgs e) {
setTextMode();
}
}
こんな感じでいいらしい。
>>171 Ins状態はコントロールごとに独立してるから、キーのトグル状態調べるだけじゃダメ
VS(2008)でボタンを作成後、Visibleプロパティをfalseにすれば当然「表示されなくなる」が その状態で他の要素から"Perform.Click"しても実行されないのは仕様? Visibleは可視/不可視の設定だけだと思うんだが、Enableみたいな動き方をしてちょっと困ってる。
はは、画面上に存在してない物をどうやってクリックするって言うんだい
175 :
173 :2010/03/28(日) 16:21:48
>>174 プログラムの内部的には有効だから動くんじゃないかと思っていたんだが、動かないのか。
ラベルなんかはVisibleをfalseにしても使えるんで、当然ボタンも使えると思っていた。
ラベルの何のイベントだよ
>>172 とりあえずは動いてるんだが(テストアプリだけに独立してIns/Ovr状態が働いて
いるというレベルで)、正しくはどうやるの?
178 :
173 :2010/03/28(日) 16:29:35
>>176 ただ文字列を格納するだけ。
まあでも出来ないのが仕様と分かったんでd。
>>178 ラベルの格納とイベントはちげーだろw
表示されてないってことはイベント拾うための処理がスルーされるってことだぞw
180 :
173 :2010/03/28(日) 16:35:37
>>177 >>164 よ
IsOverwriteModeがあるMaskedTextBoxのOnKeyDownでもそう実装してる
RichTextBox二つ並べて、片方でInsキー押して上書きモードにしても
もう片方のRichTextBoxの方は挿入モードのままでしょ
この状態でどっちにフォーカスがあろうがGetKeyboardStateで取れるInsキーのトグル状態は同じ
182 :
177 :2010/03/28(日) 17:02:52
おー、駄目だわ。メンドウだな。
183 :
177 :2010/03/28(日) 17:30:34
[DllImport("user32.dll")] public static extern int GetKeyboardState(byte[] lpKeyState); static bool isOverType() { byte[] barr = new byte[256]; const int VK_INSERT = 0x2D; GetKeyboardState(barr); return 0 != (barr[VK_INSERT] & 0x01); } void setTextMode(ToolStripStatusLabel lab) { lab.Text = isOverType() ? "Ovr" : "Ins"; } bool OverType1 = false; bool OverType2 = false; public Form1() { InitializeComponent(); toolStripStatusLabel1.Text = OverType1 ? "Ovr" : "Ins"; toolStripStatusLabel2.Text = OverType2 ? "Ovr" : "Ins"; setTextMode(toolStripStatusLabel3); setTextMode(toolStripStatusLabel4); } private void richTextBox1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Insert) OverType1 = !OverType1; toolStripStatusLabel1.Text = OverType1 ? "Ovr" : "Ins"; setTextMode(toolStripStatusLabel3); } private void richTextBox2_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Insert) OverType2 = !OverType2; toolStripStatusLabel2.Text = OverType2 ? "Ovr" : "Ins"; setTextMode(toolStripStatusLabel4); } スレの肥やしに、試してみた比較コードは貼っておこう。自分で管理せにゃならんのか。
Visible=Falseだとイベントも向こうになるよ。
(`・ω・´)
ファイルシステムを単体テストするときのために、Fileクラスなどを置き換えるクラス作ってる人いる? StrategyパターンでFileクラスとテスト用のFileクラスを切り替えられるようなやつ ちょっと必要になったから同じようなことしている人がいたら意見聴きたい
ファイルシステムなんて作ろうとも思わない。
なんでStrategy? IFileでいいじゃん
Fileは無理じゃないかな、staticだし。mscorlib.dll 内だし。 プロキシかませてやることを抽象化しておいて、それを置き換えるくらいしか。 どのみちファイルシステムの単体テストにはなんないけど。
>>187 ,189
説明不足でした
ファイルシステムを使うシステムの単体テストです
>>188 インターフェイスだとFileクラスに適用できないので
こういうやつです public class Client { public FileBase FileBase { get; set; } public void DeleteXXXFiles() { ... FileBase.Delete("aaa.txt"); ... } [TestFixture] public class ClientTest { [Test] public void DeleteXXXFilesTest() { var c = new Clinet(); var testfile = new TestFile(); c.FileBase = testfile; c.DeleteXXXFiles(); Assert.IsFalse(testfile.Files.Contains("aaa.txt")); } }
こういうのMockっていうみたいだな。英語の情報ばっかで読めない・・・ 定番のファイルシステムモックとかないんかな
単体テストのときには実際にファイル作るからそんなのいらない
ばかばっか
195 :
192 :2010/03/29(月) 02:01:26
ファイルぐらいだったら作っちゃった方が早いかもねえ。 ネットワークとかDBだったらモックあるならモック使うけど。
Windows7用APICodePack使ってDirect2Dためしてみた。 直径80ピクセルぐらいのEllipseを、あらかじめ用意していたSolidBrushからランダムに切り替えながら3000個描画するのに130ミリセクぐらいなんだがこんなもん? マシンはCore2Duo9300、グラフィックは965Expressのオンボード。 同じような内容をGDI+でやるとダブルバッファーなしで9秒ぐらいだった。ダブルバッファーありだと40ミリせく。
C#からDirect2D使う意味がわからん C++向けのちょっと低レベルなWPFだろあれ
>>197 よくわからんけど.netでグラフィックって考えてるならやねうらお氏のところが
確か.net時代のゲームつくりってのでライブラリ公開しててそれが標準コントロールに
描画してた記憶があるのであれでみてきてみなよ
>>199 それ触ったことあるけど大した機能もない割に癖が強くて気持ち悪い
コントロールに直接描画するだけならDirect3Dで普通にできる
C++でしか触ったことないけどhWndからサーフェイス取って描画できるから C#でできないってことはないわ
202 :
197 :2010/03/29(月) 19:19:02
説明足らずですいません。 試したかったことはVista以降で動くはずのDirect2Dでの高速描画のテストです。 GDI+よりも高速にかけると色々と都合が良かった(既存のライブラリの以降に)のでどんなもんかと。 自分も詳しく把握してないですが,要はDirect3Dサーフェスを使ってかけるアクセラレーションの聞く2D描画APIという認識でいます。 WPFとかぶるところもありますが、Direct2Dはよりプリミティブな描画APIだと思っています。 テキスト描画とかからむとNativeAPIもしくはそのラッパーでゴニョゴニョできれば都合いいかとCodePackいじってみた次第です。
vista以降はGUIの変更の関係で従来の2D部分はソフトウェアレンダリングじゃなかったっけ? Direct2Dの深部がどうなってるか知らんけど
Direct2DってWPFとは違って即時モードで描画するんだっけ さすがに図形を毎回計算し直したりはしてないだろうけど 3000回テクスチャ切り替えてるとしたら結構なコストなんじゃないの
>>205 描画命令を発行してもプログラム側でタイミングを見計らってバッファ切替するなら効率もいいけど
windowsのGUIのように動かれると効率はよくないな
WPFでは宣言的に描画命令出してあとはお任せだから あまり動かない要素を自動的にビットマップでキャッシュしたりするよ たぶん現状WPFの方が遅いんだろうけど仕組み的にはWPFの方がUIには適してるんだろうな
208 :
197 :2010/03/29(月) 21:40:01
>205 MSのサンプルだがInvalidate時にDirect2Dもろもろをラップしたクラスから次のメソッドに飛んでくる。 private void RenderScene(){ CreateDeviceResources(); if (renderTarget.IsOccluded) return; renderTarget.BeginDraw(); renderTarget.Clear(WhiteBackgroundColor); foreach (DrawingShape shape in drawingShapes) shape.Draw(renderTarget); renderTarget.EndDraw(); } shapeの中は protected internal override void Draw(RenderTarget renderTarget){ if (_fill) renderTarget.FillRectangle(_rect, _parent.brushes[_selectedBrushIndex]); else renderTarget.DrawRectangle(_rect, _parent.brushes[_selectedBrushIndex], _strokeWidth); } こんな感じ。 renderTarget.FillRectangleの中まで見てない。これもC++/CLIで実装されたラップクラス。 shapeまわりとかあくまでサンプルなのでたぶん使い易い分かなり不効率なことやってそうだけど・・・
単なる丸投げラッパーだろ たぶんC++で同じようなの書いてもほとんど速度は変わらないと思うよ
Form1からForm2のウィンドウを生成するとウィンドウ自体は アクティブになるのですが、Form2上にDockさせたWebBrowser コントロールにフォーカスが当たっておらず、1回クリックしないと マウスホイールに反応してくれません。 Form2.Active()やForm2.Focus()あるいはWebBrowser.Focus() では制御出来ないのでしょうか?
211 :
デフォルトの名無しさん :2010/03/30(火) 12:09:55
212 :
163 :2010/03/30(火) 12:36:03
亀だけど色々ありがとう しかしTextBox系はあちこちウンコだのう かと言って巷のコンポーネントで日本語完全対応のは無いっぽいし 困ったもんだ
>>210 なんのこっちゃと思ってたがこういうことか
webBrowserの場合、マウスをクリックするとホイールが効いてスクロールするってことは
その中のDocumentにフォーカスを当てないとだめだよ
サンプルコード
http://ideone.com/MRJeDOwz でこのDocumentなんだけどNavigatedイベントもしくはDocumentCompletedイベント
発生後じゃないと無いので下手な場所でフォーカス当てるとこけるから
>>213 昔のExcelでもあったよな、前面にしただけじゃダメでクリックしないとホイール効かないっての
それに対処するフリーウェアあったけど・・・今でも配布してるんだろうかってスレチだな
>>214 webBrowserは便利そうでめんどくさいんだよな
使いこなせると強力なレンダリングエンジンの恩恵受けれるんだが
GraphicsPathのIsOutlineVisibleとIsVisibleの違いが分からない 引数違うだけ?
>>213 ありがとうございます。質問の仕方が下手でした…。
そのコード通りに実装してフォーカスが当たるようになりました。
あと自分で試したものでは下記のコードでも同様に動きました。
private void Form2_Activated(object sender, EventArgs e)
{
this.ActiveControl = WebBrowser;
}
TextBoxを半透明にしたいのですが調べてもいまいちわかりません・・・。
できません 見た目を気にするならきっぱり諦めてWPFに移行しましょう
無理ってことは無いけど面倒
専用に枠のない子ウィンドウを開くようなアホな方法はないこともないけど諦めた方がいい
フォームがアクティブでない時にキーが押されると フォームの処理を中断するようにしたいのですが どのようにすればいいでしょうか、ご教授宜しくお願いします
.NETがない環境でも動かしたい、見た目もほどほどには気にしたいって需要もあるわけで 不可能でなければアホな方法もアリだろう
インフラ用のTextBoxBase#BackGroundImageに背景画像を設定したら、どうなるんだろ。 試してみる気もしないが、これでナンチャッテ半透明TextBoxにならんかな?
.NETなしでC#動かしたかったらSilverlightくらいしかないな ちなみにSilverlightなら全くコード書かずにできる
まだ半透明がどうのとか言ってるのか。 そういう人はそもそもその「半透明」が何を意味してるのか、 恐らくちゃんと突き詰めて考えてないだろ。 透けて見えるようにしたいのはコンテナ(フォーム)の奥のコントロール(ウィンドウ)? それって透けてるのはTextBoxじゃなくてコンテナだろ。 TextBoxを半透明にしたってコンテナが透けて見えるだけだが、嬉しいかそんなの。
オサレな外観にしたいんじゃない?
WPF使わないと無理じゃないかな 外のコントロールだとオーナードロー駆使すればわりとなんとかなるが textboxだけはかなり深部いじってできるかどうか・・・?ってレベルのような
231 :
223 :2010/04/02(金) 14:20:40
半透明って言ってるだろ
Windows使ってて.NETが無い環境ってどれだけあるんだろうな キチガイとしか思えない
>>228 そんなに貧困な脳みそを自慢するなよw
そのコンテナがピクチャボックスだったら嬉しい事もあるだろ
B地区がみえたりしたらそこに文字入力したくなくなるけどね
俺の金曜日の最後の書き込みからだれも書き込んでないことに泣いた・・・
規制食らったからねえ あと専門板住人減ってるからあんまり詰まんないことして人いなくなるようなことしないでおこうよw
静かですな〜 こんなところへ質問しないと進まなかった人たちは がんばってぐぐって解決してるのかな?
俺もそうだけどここにいるのはほとんどが趣味プログラマだろ 別に分からなきゃ分からないで困るわけじゃない
>>238 質問が無いのは大規模規制があったから。
俺が規制されてないのに大規模規制とか笑わせる
知らんがな
ComboBoxでドロップダウンリストをクリックすると、そのアイテムが一番上に来るようにしたい DataSourceにはList<T>をバインドし、SelectedIndexChanged内でリストをSuspendBinding() & ResumeBinding()して強制更新 これが上手く行かない ドロップダウンから選択すると、ドロップダウン内が真っ白になる それでもリスト自体は存在するらしく、クリックするとリスト自体は更新される この問題を解決する何かいい方法はないだろうか ちなみにList<T>をBindingList<T>にすると無限ループする SelectedIndexChanged内でリスト変更してるから当たり前っちゃ当たり前だけど
単純にChangedイベント内部でフラグチェックで出来ない? bool changedEnabled = true; Changedイベント { if( changedEnabled ) { changedEnabled = false; 煮るなり焼くなり changedEnabled = true; } }
ああごめんちゃんと読んでなかった
直接張るならhtmlエンコードしてくれ そうじゃないなら外部のコード貼れるところ使ってくれ
あれほどサンプルソースさらせと・・・
>>244 ピンポイントで対応できる少数を待つか、自分がはまった箇所を再現できる適当な
ソースを晒してコードを見て対策考えれる多くの人から回答待つか
どちらか選べ
これっぽちのソース我慢しろよww
251 :
244 :2010/04/08(木) 16:36:58
自己解決 リストデータの中に何時の間にかnullが紛れてて、取り除いたら動いた お騒がせしました 詫びがてらコードを晒しとく この手の需要は微妙にあるような気がしないでもないようなあるような private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cb = (ComboBox)sender; int selno=cb.SelectedIndex == -1) return; cb.BindingContext[cb.DataSource].SuspendBinding(); string selecttext=combodata[selno]; combodata.RemoveAt(selno); combodata.Insert(0,selecttext); cb.BindingContext[cb.DataSource].ResumeBinding(); }
252 :
244 :2010/04/08(木) 16:39:37
ミス ×int selno=cb.SelectedIndex == -1) return; ○int selno=cb.SelectedIndex; if(selno==-1) return; ハンパにコピペするもんじゃないな
SuspendとResumeはなんで必要なの?
>>253 DataSourceのChangedイベントあるからなあ
それを止めるんじゃね?
RemoveAtやInsertの時に下手に見られてると困るじゃん
255 :
244 :2010/04/08(木) 17:05:14
hage
>>255 ありがとう!
そこだけ注意すれば後は簡単だね
>>244 たぶん余計なお世話だろうけど、要はcombodataの要素の並び替えをしたいんだろうから、
それならcombodataを直接バインドするんじゃなくて、
(0) SelectedIndexChangedにはcombodata.ToArray()をバインドしておく。
(1) SelectedIndexChangedイベントではcombodataの並び替えのみを行う。
(2) DropDownClosedあたりのイベントでcombodata.ToArray()をバインドする。
とかの方がいいのでは?
バインドしてるデータをSelectedIndexChangedでいじっちゃうって、たとえ動作に問題ないとしても
お行儀悪すぎじゃないの?
これならSuspendBindingだのResumeBindingだの訳のわからんメソッドを呼ぶ必要もないし。
あー
>>258 だと注意しないとイベントの無限連鎖になるから、
問題ないのなら全部DropDownClosedイベントで処理した方がいいかも。
とりあえずそれで
>>244 が言うような動作が可能なことは確認した。
そういえばみなさん開発途中のバージョン(やリビジョン)管理はどうしてますか? オープンソースならフォゲとかありますけど、ソースはクローズドでやりたい場合もありますよね・・
クローズなら管理委らんだろ
いや修正掛けてて戻したいなあ・・・とかありません?
SourceForgeの使い方を知っててそれはないだろ。釣りにしてはしつこすぎる。
つまりsubversionのサービスを非公開でやってるところが無いか?とかそんなの?
普通にSVNとか使えばいいだろ ローカルでも使えるし内部のサーバーに置いてもいいし
ローカルで使うって発想が無いんでしょ。
ローカルだったらTortoiseSVNでも使えば一瞬で構築完了
好きなフォルダをSQLCompactにバージョンつけてたたっ込める仕組み自前で作ったわ。
なぜそんな無駄なことを。
そこまで規模のでかい物作ったことないから一定量進んだら プロジェクト丸ごとコピペしてるけど不便だと思ったことは無いなぁ
と思ったけど調べてみたら便利そうなので使ってみることにしましたまる
ファイルが2〜3個ぐらいならそれで別に何の問題もないしな。 まあ今日日VCS使ったことない開発者なんて普通居ないだろうけど・・・
少人数でもそこそこ大きな物書いてるとsubversionは欲しくなるけど 今度はsubversion鯖の管理の手間が増えるからなあ・・・ 外部でそういうことがやれるのがあるといいんだがとは思う
結構いるんじゃね?
つSourceForge
>>275 それってコードをオープンにしないと基本的にサービス利用できないだろって・・・
クローズド開発だと有料なら結構あったような気がするけどな。
クローズドであることを辞めるとか。 まあ適当に安いレンタルサーバ借りて使えばいいんじゃね? ssh 使えるとこなら問題ないっしょ。 管理の手間っていっても一度構築しちゃえば問題無いだろし。
VCSなんて使うやつはチキン
>>277 結構あるね
MSはメールを無料でやる前にこういう方向も無料で進めていけばいいんじゃなのかね?w
ごめん MSってcodeplexっていうのをやってるんだな
svnはレポジトリから除去する時にメンド杉 ポリシーかなんか知らんけど、もう少し何とかならんものか それはそれとしてローカルでやるならVisualSVN最強
今なら分散型のgit, hg, bzrを使うだろ
分散型ってなにを分散してるの?
リポジトリを。
Mercurialいいよ。 VisualHGの出来もいいしCodePlexも対応してる。
分散リポジトリ型は 作りかけで動かない(けど保存しときたい)ローカルなコミットと テストも通るある程度纏まった完成品のコミットを ちゃんと分けて使えるのが良いんだよな。 でも運用ルールよく考えないと結構めんどくさい。
と思いきや規約変更(ソースはC、C++、ObjectiveC、WebKitのJavascriptに限定w)で使えなくなったでござるの巻
ヤード法かメートル法のうちどちらが単位として使われているか取得する方法はない? MSDNのCulterInfoの部分を調べたんだが、それらしいプロパティがなかった。
RegionInfoとかじゃねーの
>289 俺\(^o^)/オワタ
>>290 AppleはいつまでたってもAppleなんだなーって思ったわ。
VisualC++2008の本を買いに本屋に行ったら、C#の本のほうが多く展示されていたのだが、 世の中の主流はC#に移り変わってきたのですかね。
VCの本は、昔からそれほど多くない。
>>295 そういう本だと無料の開発環境とかで話進めなかったっけ?
VC++2008EEはGUI作るにはちょっと初心者向きじゃないしね
それにMSとしては.netで行きたいみたいだし
>>298 やっぱりSilverrightが本命なんですかね。
Flashはipadでサポートされないとかで、もうダメみたいだし。
その意味で言うなら、HTML5だろ。
そうでもないけどな・・・ 結局どういうマシンのソフトを開発したいかで使う物が変わるしなあ VC++でGUIやりたいならWTLでぐぐってみなよ それかゲームをやるならDXライブラリとか龍神録とか
>>299 iPad は C# もサポートしないから SilverLight もダメだよ。
徹底して囲いこみしてる。
囲いこみとか時代に逆行しまくりだよな。 オープンなものは使わせてもらうけど、こちらはオープンにしませんとかw
しょせんオープンだのなんだの、ってのは、売るための方便でしかないし。 圧倒的なシェアをとったところで手のひらを返す、ってのもよくあるパターン。
どういう動作になるのか保証できないからサポートしたくない、 というのなら気持ちは分からんでも無い
MSになら手のひらを返されてもいい。
今回のAppleのは、わけわかんないだろ。アセンブラ禁止といってもいい。 近いうち、マルウエアを防止するためAppleのサーバーでコンパイル、リンクしたものだけってことになるぞ。 その次は、Appleのソースコード利用権。
どんな言語で作ったアプリでも、動作保証なんてするわけないじゃん。
今回のはFlash(ActionScript)つぶしだよ。
>>308 まあそうだよな
何でもかんでも保証すればバグの面倒までアップルが見る羽目になる
あくまで場所貸しだからな
つーか内容の規制ならまだしも言語の規制とかイミフすぎる。 WM7 と Android を応援するぜ俺は。
つうか普通に特定ベンダの技術よりHTML5でどうにかしたいだけだろ
ともかく、このスレでappleを話題にするとしたらドトネト復活してからだな。 X05HTの次にと考えてたけど止めたわ。
.NETしたいなら素直にWindowsMobile搭載端末を買えよ・・・
monoを全否定かっこいいw
>>315 Objective-Cがクソだから、できれば使いたくない。
醜悪なコードになるよな C++以上に
使ったことない。が、スレ違いなのでどうでもいい。
Cでsmalltalkしたいから作ってみましたwww な言語なので
C#経験したあとだとどっちも一緒w C++だって糞じゃん ヘッダにクラスの宣言部書いて、cppの方にメンバ関数書くとか
>>319 C#での相談事という意味では、スレ違いでもないんだけど。
誰も相談なんてしてないだろ。
iPhoneってJavaで開発できんの?
スレチだし、そのくらい自分で調べろ
このスレ的にはもう iPhone さようならで終了なんだよな。
なんですぐ「スレ的には〜」とか馬鹿な事を言い出すんだ。
BeginInvokeやSystem.Timers.Timerでスレッドを実行中に例外が発生した場合、 スレッドが停止して例外が行方不明になるのですが、 このせいでどこが問題箇所なのかわかりません。 このような場合に皆さんはどうやってデバッグされますか?
BeginInvokeはEndInvokeしたら飛んでくるし、 System.Timers.Timer実行中ならキャッチしなけりゃ異常終了するし、 どう行方不明になると言ってるのか分からん。 異常終了の場合の話か?
単に発生場所が分からないだけなら、デバッグの例外オプションで スロー時に停止させりゃいい。
>>329 異常終了するのはSystem.Threadの方みたいです。
EndInvokeも使わない方向で。
Do(){ try{Do2();}catch{} }についてDo.BeginInvoke(null,null)して、
本来ならDo2の例外をDo内でcatchできると思う…のですが、
Do2内でInvokeによってUIスレッドを呼び出しているせい(?)か
Doごと死んでしまう、のです。
もう少し正確に書け。
333 :
328 :2010/04/11(日) 03:33:04
>異常終了するのはSystem.Threadの方みたいです。 System.Threadってなんだ? みたいってのはどういうことだ? >EndInvokeも使わない方向で。 使わない方向ってのはどういうことだ? BeginInvokeとかじゃないから元々使えないのか、 あえてEndInvokeを呼ばない糞コードにする気なのか? >Do(){ try{Do2();}catch{} }についてDo.BeginInvoke(null,null)して、 >本来ならDo2の例外をDo内でcatchできると思う…のですが、 >Do2内でInvokeによってUIスレッドを呼び出しているせい(?)か >Doごと死んでしまう、のです。 ControlのInvokeはちょっとまた話が違うからな。 UIスレッドでの例外はUIスレッド内でキャッチする必要がある。 しなければ、普通にUIで例外をキャッチしなかったのと同じ状態になる。
>>334 > BeginInvokeとかじゃないから
とかってなんだ?
> UIスレッドでの例外はUIスレッド内でキャッチする必要がある。
> しなければ、普通にUIで例外をキャッチしなかったのと同じ状態になる。
ご飯を食べる必要がある。食べなければご飯を食べなかったのと同じ状態になる
で? 意味が通じない書き方と意味が通じる書き方じゃ全然違うんだけどな。
で?といわれても、揚げ足を取ってるレスがあまりにもひどかったのでつい。
>>334 がどういう風にあげ足なのか言ってみろ。
お前は
>>334 で言ってることがちゃんと分かるのか?
お前は
>>334 で言ってることがちゃんと分かるのか?
↓
お前は
>>333 で言ってることがちゃんと分かるのか?
だった間違い。
System.Threadなんて名前空間はない
BeginInvokeとEndInvokeは対になるべき
別スレッドの例外を補足できない
だと思うんだが違うのかな
そもそも
>>333 で解決していることに対して面倒なレスをつけるなよ
え。
>>333 の言ってることは理解してるつもりだよ
てか、それ以外にどう読めばいいの
>お前は
>>334 で言ってることがちゃんと分かるのか?
>↓
>お前は
>>333 で言ってることがちゃんと分かるのか?
>だった間違い。
↓
お前は
>>331 で言ってることがちゃんと分かるのか?
の間違い。
間違いまくり。
勘弁してください寝てください
>>335 上げ足とりに突っ込んでるつもりで見当違いのことを言ってることに気づいてるの?
345 :
328 :2010/04/11(日) 04:09:15
>>334 申し訳ありません。私がいい加減なのはわかりますが、
ただ、あまり攻撃的に反応されても…。
System,Threading.TimerまたはThreadの方ですね。
らしいってのは↓見ただけなのと、理解が適当かもしれないので。
ttp://gushwell.ldblog.jp/archives/cat_50041244.html 実際には、BeginInvokeではなくてTimers.Timerの方を使っているのですが、
BeginInvokeのほうが書くの楽そうだったのでそれを書いて、
EndInvoke使わない方向で云々は話題をずらしたくなくて、です。
例外キャッチの心得は参考になりました。
ぐだぐだ言い訳みたいで申し訳ないのですが、
最後くらい誠実にレスしてみました。
姉歯設計に苛つかれるお気持ちはわかりますが、仲良く行きましょう^^
>>334 は伝わる書き方をすべき。
そもそも
>>328 で解決すべきは
> どこが問題箇所なのかわかりません
であり、BeginInvokeがどうとかは枝葉。
だから
>>330 で解決してんじゃん。
347 :
328 :2010/04/11(日) 04:11:02
本当にすみません。私のせいでこんな深夜に荒れてしまった。 仲良く行きましょう。なんかおもしろい話題ないですかね。。。
疑問に対して何故かの話を進めた方がプラスになると思ったんだがな。
>>331 で疑問に思ってるみたいだから何故かが気になってるんだと思ったんだが。
まあ
>>329 だけでよかったならもう言うことはない。
>BeginInvokeがどうとかは枝葉。
って言ってるけど、例外が行方不明になることと
BeginInvokeはめちゃめちゃ重要な関係がある話だよ。
まあ
>>331 の疑問がそのままでいいなら確かにどうでもいい話だが。
気にせずがんばれ
うぜえwどんだけ俺のレスの方が有意義だアピールをする気だよw
>>329 で解決してんじゃなくて、
>>330 によって、例外発生箇所が分かったことがよかったんじゃないの?
まじめだから
>>329 に分からないながらも、分かる範囲でレスしたんだろうな。
これに懲りずまた質問してね。
まあ基調が攻撃的だったのは悪かったよ、気にしないでくれ。 2ちゃんだから平気でこういう書き方する時がある。 別にそこまで恐縮してもらう必要はない。 ってか書いといてなんだけど基調をいちいち気にするな。
基調じゃなくて口調だすまん。 あと荒れたとしても最初の書き込み者がそれを気にする必要なんかない。
深夜に何騒いでんだ?
UnHanldedException ハンドラーていぎせぇよ
異常終了時の対応はmain()の中全部tryで囲うの? でもこれだとmain()が異常終了したときはどうすればいいの?
お前は何を言ってるんだ
すでに例外が出ているようです(´・ω・`)
retrun 0; してないから、ではないのか?
Action<T>型でBeginInvokeした時に、AsyncCallbackの受け口を一本化したいんだけど上手い手はないかな 普通にやるとAction<int>とAction<string>とで別の受け口用意しなきゃならん AsyncDelegateはキャストしないと使えないし 単にEndInvoke呼びたいだけなんだからもちっと簡便にならないかと
ジェネリックでAction<T>にキャストしたら?
なるほど ジェネリックメソッド定義してキャストに使うと いい感じサンクス
まじでEndInvoke()呼ぶだけなら、無理にまとめる必要ないと思うが action.BeginInvoke(obj, action.EndInvoke, null); これでも十分簡潔なのに、これ以上何を求めるのか public static void AsyncInvoke(this Action action, T obj) { ... } public static void AsyncInvoke<T>(this Action<T> action, T obj) { ... } public static void AsyncInvoke<T1, T2>(this Action<T1, T2> action, T1 arg1, T2 arg2) { ... } // 以下<T1,...,T16>まで同様 (.NET 4.0) ここまでしないと不満とか?
Int16からUInt32へビット数を保持したまま 変換する関数ってありますか?
わかりにくくて申し訳ない。 Int16の0xFFFFをUInt32の0x0000FFFFに 変換したいという意味でした。 そのまま0x0000FFFFの論理和で出来るみたいですが 正式なやり方あるのかなと。
uncheckedでいったんUInt16にキャストすれば
すいません。相談にのってください。 UIスレッドとタスクスレッドの2つのスレッドで 構成されているアプリケーションを作っています。 タスクスレッドにて例外が発生した時、 適切な例外処理ってどんなもんなんでしょうか? Thread.GetDomain().UnhandledException にて例外を集約させるところまではgoogle先生で調べれたのですが、 このイベントハンドラ内で、アプリの強制終了を行うしか手が無いのかな? //UIスレッド try{ //タスクスレッド起動 UI.ShowDialog() //タスクスレッドJoin }finally{ //UI後処理 } 本当は、UIスレッドの後処理(finally節)も確実に実行したいのですが・・
タスクスレッドって初めて聞いた。
普通に UI 側に通知して終わればいいんじゃね?
decimal.Tryparse の 第1引数て、どんなの渡せばいい? "1.00E+4"を渡しても変換結果が0なんだわ。+外しても駄目だった。
>>376 試してないけど NumberStyles.AllowExponent フラグをたてなきゃいけないんじゃね?
double.TryParseでパースしておいてdecimalに変換すれば。
C#2.0でツールパレットを実装するのに簡単な方法は無いでしょうか? アプリの状態によってボタンが変わるので、List系コントロールが使えればいいのですが ボタンをタイル状に敷き詰めるのはどうやら無いっぽいので・・・ FlowLayoutPanelにRadioButtonを自力で詰め込んでいくしかないのでしょうか?
382 :
デフォルトの名無しさん :2010/04/14(水) 12:44:39
ツールパレットってのがどういうのかわからん ざっくりしたイメージ画像とかない?
ないない
385 :
デフォルトの名無しさん :2010/04/14(水) 12:52:13
ツールパレットでぐぐるとそれなりにヒットするので何かのソフトが ツールパレットと呼んでる物があってそれと同じような物が実装 したいんだろうから、そのスクリーンショットでもいいんだがな
386 :
381 :2010/04/14(水) 12:52:59
387 :
デフォルトの名無しさん :2010/04/14(水) 12:53:23
>>384 それならC#にあるやん
あとはツールバーへコントロールを動的に増減してやればいいだけだよ
389 :
381 :2010/04/14(水) 13:26:24
>>388 ありがとうございます
なんとかやってみます
390 :
デフォルトの名無しさん :2010/04/14(水) 20:05:51
private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); backgroundWorker2.RunWorkerAsync(); backgroundWorker3.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while(){重い処理} } backgroundWorker2_DoWork,backgroundWorker3_DoWorkも1と同じような処理。 これを実行すると、初回起動時に1,2は同じタイミングで始まるんだが、3だけ遅れて始まる。 一旦停止して、再スタートするとすべて遅れなく始まるんだが、初回から、1から3すべて遅れなく始める方法ない?
なぜ開始タイミングを揃えなければならないのか
>>391 各スレッドの処理結果を呼出しもとで使用するのに、
タイミングが揃っていた方が都合がよいからです。
内部で同期させる仕組みを作れよ
>>392 同時に開始しても同時に終了するとは限らないんだけど。
結局は、終わったかどうか個別にチェックしないと。
>>392 処理結果を呼び出しもとで使用するときに処理が終わってるかどうかは見ないのかい?
見てるなら別にいつ始まっていつ終わってもよかろ
終了タイミングが揃うことを前提にした実装なんか怖すぎるだろ 実際にだいたい揃ってるとしても必ず待つように作るわ
処理が終わったかどうかはチェックしています。 すべての処理が終わってからメインのスレッドで次の処理をしています。 ただ、初回は3番のスレッドだけ遅れてスタートし、2回目以降は遅れなくすべてのスレッドが スタートするという現象が気になったので、質問しました。
スレッドプール使う以上は黙って任せるしかない 嫌ならThreadクラスを直に使えばいいよ
>>398 ならCPU増やすかThreadPoolの設定変えるか
答えてくださった方々ありがとうございました。 試行錯誤してみます。
ThreadPoolでは、CPUが空いてなければ処理は投入されない。 もうひとつ、CPUが空けばプロセッサ数以上のスレッドも投入されるが、 その際は0.5秒に一つずつスレッドが開始される。 例えばThreadPoolの最小スレッド数はデフォルトでプロセッサ数になっているが、 これを増やしてやれば必要になった時点でスレッドを作成するときの0.5秒のタイムラグがなくなる。 ただ、どっちにしても基本的にはCPUが空いてるときに動く仕組みだからその辺は注意。
0.5秒って宇宙刑事ギャバンじゃあるまいしw そんなに遅いわけないだろ常識で考えて。 どんな妄想だよそれ
>>402 ありがとうございます。
ThreadPool..::.SetMinThreads メソッドを使用して、最小スレッドを変更したらできました。
>>403 msdnライブラリから抜粋
スレッド プールは、最少数のアイドル スレッドを維持します。
ワーカー スレッドでは、この最少数の既定値はプロセッサ数です。
GetMinThreads メソッドを使用すると、最少数のアイドル ワーカーと
I/O 完了スレッドを取得できます。
スレッド プールのすべてのスレッドがタスクに割り当てられている場合、
スレッド プールは新しいアイドル スレッドの作成をすぐには開始しません。
スレッドのスタック領域の不要な割り当てを避けるために、
新しいアイドル スレッドは間隔を置いて作成されます。
"この間隔は現在 0.5 秒です"が、.NET Framework の将来のバージョンでは
変更される可能性があります。
スレッド プールの多数のタスクがキューに置かれて
アプリケーションのアクティビティが急激に増加した場合は、
SetMinThreads メソッドを使用してアイドル スレッドの最少数を増やします。
この操作をしないと、新しいアイドル スレッドの作成が遅延するこの組み込み
の設定が、ボトルネックになる可能性があります。
こういうのみてるとスレッドとかバカをふるい落とす壁になるのがわかる・・・
しかしまあ正直言って0.5秒はちょっと待ちすぎのようには思ったりする。
細かいな
0.5秒おきに起動されるのを目の当たりにしたときは何かの間違いかと思うよな。 で、MSDN見てびっくりして設定変える、と。
逆にあれが50msecくらいの遅延だったりしたら、その遅延の存在に気付かない恐れがあるから もっと遅くてもいいかも知れん
412 :
デフォルトの名無しさん :2010/04/14(水) 22:47:02
短縮URLはんなカス
ドキドキしちゃった
415 :
デフォルトの名無しさん :2010/04/14(水) 23:15:12
>>413 黙れゴミ。誰にたてついてるんだ?コラ。あ?シバキアゲタルゾこのクソが。
ウンコがいきがってんなよ
Visual C# 2008でwindowsフォームアプリケーション作成中です。 テキストボックスで文字を反転した際の色を変更したいのですが、SystemColors.Highlightは読み取り専用で変えることが出来ません。 どのような方法を取ればいいのかご教授お願いします。
SystemColors.Highlight.Value=
自作ジェネリッククラスを型付コレクションにするのは無理かな class A<T> { } List<A<T>> a_list; ←コンパイルエラー ArrayListでキャストしてやればいいっちゃいいんだけど、可能なら型付がいい あ、Tは違うのが混在するんでList宣言のところで固定はできない
試さないでいうけど A<T>のスーパークラスを作って List<Super> a_list じゃだめなん?
>>422 それよくやる
インターフェイス使う方が多いかな
スーパークラス!!そういうものもあるのか それで行こう THX.
ふーん
427 :
デフォルトの名無しさん :2010/04/15(木) 16:00:48
SystemColorsってBrushesなんかと同じであくまで システムデフォルトなんかの塊なんじゃないの? やるとしたらwindowsその物の設定をいじるとかになりそうな予感
428 :
デフォルトの名無しさん :2010/04/15(木) 16:03:07
アプリ単位では変えられないって事ですか。分かりました諦めます。 ありがとうございました。
429 :
デフォルトの名無しさん :2010/04/15(木) 16:08:38
┐(´д`)┌ヤレヤレ
431 :
デフォルトの名無しさん :2010/04/17(土) 10:34:39
過疎ですな
>>430 何にあきれててるの?
それともそれは某バーガーさんを模したAA?
.NET 3.5 から .NET 4 へプロジェクトを乗せ替えるのって何か弊害になることあるんですか?
動かすのに.NET4が必要 Windows7ですらそのままでは動かん
434 :
デフォルトの名無しさん :2010/04/18(日) 03:06:21
sliverlightでゲームループ作るにはどうすればいいんだ 検索結果の上にくるところは書いてる人の能書きばっかりが目立つし 能書きよりサンプルコード晒してくれた方がよっぽど役に立つのに・・・
>>434 能書きですみません。
あなたの技術レベルが分からないと教えようがないので、今までの実績を教えてくれますか?
>>434 お前が理解出来ないことは全て相手の能書きか
あるクラスを継承してoverrideしたメソッドを持つクラスが さらに継承されたときそのメソッドをoverrideして欲しくないときってどうすればいいですか?
sealed
>>434 SilverlightにはDoEventsみたいなのがないのでいわゆるゲームループは作れない。
CompositionTarget.RenderingやDispatcherTimerやStoryboardでコールバックかける。
442 :
デフォルトの名無しさん :2010/04/18(日) 22:59:40
日本語の解説なくていいのでコードを乗せてくれれば勝手にやるよってことでしょ プログラマーはコードで会話する 日本語で語ろうとする=能書き
>>435 で理解できないなら何使ってもできないと思うよ
コードあっても理解できないだろうね
444 :
デフォルトの名無しさん :2010/04/18(日) 23:04:23
>>443 うーん
sliverlight初心者だとサンプルソースをプロジェクトごと眺めてみたいってのもあるだろうから
>>435 ででてくる日本語ずらずらコードは一部で説明されると能書きだけに見えるよね
日本語はいいコード出せって感じで
445 :
デフォルトの名無しさん :2010/04/18(日) 23:18:46
ゲーム作ったことある俺でC#もできるが
>>435 は日本語多すぎだな
サンプルプロジェクトと一緒にその説明だと親切だなあと思うが
そのままだと重いつたこと書き散らしただけのチラシの裏に書いておけ
でしかないような気がする
447 :
デフォルトの名無しさん :2010/04/18(日) 23:25:40
>>446 言いたいことは俺も能書きが多くみえるということだ
検索してこの手が一番迷惑なんだよね
必要な情報を取捨選択する能力にかけてるってことですね
449 :
デフォルトの名無しさん :2010/04/18(日) 23:28:19
>>448 開く時間も持ったないと言ってる
ツイッターが引っかかるくらいうざい
ageてるから自作自演バレてるぞ
そうだぞ
452 :
デフォルトの名無しさん :2010/04/18(日) 23:34:36
そうだぞ
Silverlightなんかまだまだマイナーだしゲーム用でもないんだから情報があるだけマシ
454 :
デフォルトの名無しさん :2010/04/18(日) 23:36:20
そうだぞ
>>445 >ゲーム作ったことある俺でC#もできるが
今更だがこれって「能書きたれてるのはお前の方だ」っていうツッコミ待ちだったのでは?
みんな気づいてあげろよ……。
>検索してこの手が一番迷惑なんだよね >開く時間も持ったないと言ってる >ツイッターが引っかかるくらいうざい 検索したら自分の欲しい物だけが与えられると思っているのは、いかにもゆとりらしい考え方だな。
ゆとりでなくてもはてなウゼーとかよく言ってるのを目にするが
でたらめ書いてあるのは迷惑と思ったりもするが、 そうでないなら何様だとしか言いようがない。
うざいならスクリプトでも書いて除外すればいいじゃん プログラマなんでしょ
最近本当にうざいのは、はてなよりもウィキペディアのコピペサイト
俺は別のブログ記事へのリンクだけの広告ブログが本当にいやだ
463 :
デフォルトの名無しさん :2010/04/20(火) 00:43:48
スパムでいいじゃん
>>460 どれも技術サンプル程度
昔のDOMはともかく今はLINQ to XMLという優秀なライブラリがあるから
dynamicで使えてもそんなに変わらないよ
htmlやデータなどからURLを抜き出すクラスの名前は何がいいでしょうか? 抜き出すメソッド名はGetURL()にしようかと思っています
466 :
465 :2010/04/21(水) 23:50:50
スレ間違えました
C#というよりXAML(3D)についての質問ですが、専用質問スレがないのでここで お願いします。メタセコイア形式mqoからXAMLに変換するプログラムを つくりたいのですが、カメラの変換手法をご存じの方いらっしゃませんか。 既存の変換ソフトウェアでは、 Scene { pos 0.0000 0.0000 1494.2412 lookat 4.5152 74.7634 0.3124 head 0.3000 pich 0.3100 ortho 1 zoom2 6.6503 amb 0.250 0.250 0.250 } から <PerspectiveCamera x:Name="Camera_blueknight" Position="-244.763901,513.030212,1388.125000" LookDirection="0.163176,-0.342020,-0.925416" UpDirection="0.000000,1.000000,0.000000" FieldOfView="20.000000" NearPlaneDistance="1" FarPlaneDistance="10000" /> に変換されているのですが、数字に関連性を見つけられなくて やり方の見当がつかないのです。
WPFの3Dって触ったことないけどプロパティ名見る限りDirect3Dそのまんまなんだなw Direct3Dのドキュメントとか解説サイトとか見たらわかるよ
469 :
467 :2010/04/23(金) 21:10:59
自己解決しますた。
>>469 他人になりすますのって意味があるのでしょうか。
自己解決したならおしえてほすぃです。
>>469 Direct3D方面で調べます。ありがとうございました。
mqoからXあたりにコンバートしてさらにってのは駄目なのかね? MDXとかXNA関連であさればコンバートライブラリとかでてきそうだな
作者がmqoは互換性考えていないと言い切ってるから、やるならプラグイン じゃね?C++だからスレチになっちゃうけど。
XMLってソフトウェアからすると読みやすいかもしれないけど 人間には読みづらい もっと人間寄りのいいアイディアないものかね
あ、ふらっとの方に書いたつもりだったのに、まぁいいか
>>473 ツールで編集できるようにするしかないね
XMLをGUIで編集するツールあるでしょ
XMLスキーマとかメモ帳で書ける奴いるんだろうか VSならインテリセンス頼みでなんとか書けるけど
スキーマはRelaxNGでしか書けない。 XSDじゃ書けない構造があるんでまともな変換ツールがないとかあって、C#じゃ 使ってないが・・・良いライブラリとか無いかな?
結局諦めてXSD使ってる スキーマ指定してXML編集するときにインテリセンスが効いたりとかサポートが強力すぎる
質問させてください: MenuStripをカスタムドローしようとしているのですが、 OnRenderItemTextでDrawThemeTextEx()を使って 文字を描画しようとすると、 真っ黒な四角が表示されてしまいます。 Graphic.DrawString()を使えば描画は出来るのですが、 ウィンドウにAero Glassを適用したとき、ClearTypeのフォントを描画すると 周りにアンチエイリアスのゴミが表示されるので、敬遠してます。 メイリオ使うなw とか言わずによろしくお願いします。
481 :
480 :2010/04/25(日) 19:06:48
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { base.OnRenderItemText(e); if (e.ToolStrip.IsDropDown) { return; } using (var img = new Bitmap((int)e.Graphics.VisibleClipBounds.Width, (int)e.Graphics.VisibleClipBounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)) { using (var g = Graphics.FromImage(img)) { var hDC = g.GetHdc(); var hMemDC = IntPtr.Zero; var rect = new RECT(); rect.left = e.TextRectangle.Left; rect.top = e.TextRectangle.Top; rect.right = e.TextRectangle.Right; rect.bottom = e.TextRectangle.Bottom; var pb = BeginBufferedPaint(hDC, ref rect, BPBF_TOPDOWNDIB, IntPtr.Zero, out hMemDC); //BufferedPaintSetAlpha(hMemDC, IntPtr.Zero, 255); DrawThemeTextEx(hTheme, hMemDC, 0, 0, e.Text, -1, DT_NOCLIP | DT_CENTER | DT_SINGLELINE | DT_VCENTER, ref rect, ref option); Uxtheme.EndBufferedPaint(pb, true); g.ReleaseHdc(hDC); e.Graphics.DrawImage(img, g.VisibleClipBounds); } } }
TextRendererは?
>>481 Win32詳しくないんで違ってたらごめん。
普通にBitmapの背景を塗ってないから、なんて間抜けなオチじゃないよねまさか。
484 :
480 :2010/04/25(日) 19:37:12
>>482 ありがとうございます。
試してみたところうまくいきましたが、
DwmExtendFrameIntoClientArea()でAeroにしたら
Color.FromArgb(255, 0, 0, 0)でも文字が透明になりました。。
>>483 ありがとうございます。
それは確認してます。
背景をあらかじめ描いておいても、
上書きで黒い四角が現れます。
>>484 くどいようだけど、
>背景をあらかじめ描いておいても、
これって、ちゃんと
>>480 のコードのimgのGraphicsに対して行ってるんだよね?
どうもe.Graphicsに対して描画してるようにも聞こえるけど....
for (int i = 0; i < 10; i++) { textBox1.Text = "実験"; Thread.Sleep(500); textBox1.Text = ""; //Thread.Sleep(500); }
テキストボックスの文字を点滅させたくて ためしに上のようにしたのですが処理が終わるまで固まったように なります。 簡単に点滅させられないのでしょうか
//Thread.Sleep(500); //があるのは間違いです。ごめん。
489 :
480 :2010/04/25(日) 20:04:15
>>485 はい。 e.Graphics ではなく、Graphics.FromImage(img) でつくった g にです。
あっ…
でも、hMemDCには何も描いていませんでした。
DrawThemeTextEx() の直前に FillRect(hMemDC, ref rect, GetStockObject(LTGRAY_BRUSH))
を入れてみたところ、
灰色の四角が現れました。
でも、文字は描画されません…
文字の色を白にしてもみてもダメでした。
>>486 そのコードはどう見ても10秒間一切操作ができなくなるけど
for()ループを使うんじゃなくて、
System.Windows.Forms.Timer クラスを使うべきなんじゃない?
491 :
467 :2010/04/25(日) 20:28:37
492 :
480 :2010/04/25(日) 20:51:49
メイリオをあきらめてフォントをMS ゴシックにしたら、 「ファイル(F)」が「ブアゥレ(F)」に文字化けしたwww だれか、Aero Glassのメニューに綺麗に文字が描ける方法を知りませんか?
>>490 タイマを使うとテキストボックスの文字を点滅できました
forを使うとなぜ10秒間、「実験」の文字すらでてこなくなるのか
教えていただけるとありがたいのですが。
テキストボックス以外が固まるのはそうだろうなと思うのですが。
>>492 VisualStyleRenderer.DrawText使えば?
>>493 > forを使うとなぜ10秒間、「実験」の文字すらでてこなくなるのか
描画するのも同じスレッド
ところがそのスレッドがループで詰まってるから描画もできない
>>495 さん
ほえー
ありがとう。今日ずっと悩んでいたんです。
.AppendTextなら文字がでてくるのに
なんで.textでは出てこないのかなーと。
本当にありがとう。
for (int i = 0; i < 10; i++) { textBox1.Text = "実験"; textBox1.Refresh(); Thread.Sleep(200); textBox1.Text = ""; textBox1.Refresh(); Thread.Sleep(200); } としたらちゃんと点滅できました。ありがとう。
>>497 お前は何もわかっていない
Thread.Sleepはマルチスレッドなど非同期で動かしたりする場合に使う
シングルスレッド、ましてやFormクラスで使うべきじゃない
>>498 さん
そのとおりです
今、マルチスレッドをやっているところなんです。
通信を別スレッドで受けている間
文字を点滅させられないかなと悩んでました。
怒らないで。
500 :
480 :2010/04/25(日) 21:23:45
>>494 ありがとうございます。
やってみましたが、やっぱり文字が透明になりました。
で、通信データは別スレッドからテキストに固まらずに表示されるのに なぜ、点滅みたいな簡単なことで固まるのかわからなかったので。
>>501 それはマルチスレッドじゃなくて
ただのスレッド処理だから
もう一方が処理している間、他のスレッドは割り込めない
割り込みたいならlockキーワードを使うべし
503 :
490 :2010/04/25(日) 21:32:36
「メッセージループ」でぐぐるといいよ。
そう言えばスレの流れとあんま関係ないんだけどさ BitmapとかGraphicsとか、巷のサンプルだと必ずDisposeしてるじゃん? GC来るまで残りっぱなのは理解してるけど、マネージリソースなんだから そんな明示的にせんでもいいような気がするんだけど なんか理由あるん?
GraphicsもBitmapもどっちもアンマネージリソース抱えてるよ Bitmapなんか実体はほとんどアンマネージメモリに置かれてるわけだし
>>480 少なくともVistaまでのAPIで透明の上にClearTypeで描画することはできない。
これはClearTypeの技術上仕方がない。
だからIEとかグラスの上に乗せるテキストはClearTypeじゃなくてただのアンチエイリアシングになっている。
直接の解決策ではないが.NET 4.0のWPFでは自己責任で透明の上にClearTypeで描画できるようになった。
Direct2Dは調べてないので知らないができるかもしれない。
>>508 ReflectorでSystem.Drawing.dllを逆アセンブルしてみると分かるが、
これはGDI+のラッパーだから。
ハンドル持ってる時点で分かると思うんだがなぁ
IDisposableが継承してるならDisposeしろ。 GCで解決するならIDisposable継承しない、するな。
IDisposableってのは、「Disposeしろ!」っていう開発者からのメッセージだから。
アクションゲームなのだとスターを取ると無敵とかありますよね 他にもフラワーをとったら火が出たりするのとかメタル化したりとか こういうのをやるときにそのキャラクターのクラスにフラグを持たせる方法もあると思いますが そうしないで外からそのキャラクターのインスタンスに機能を拡張するのはどうすればいいでしょうか まあ、上の例位だと、あたり判定の部分にデリゲードを使って その部分を差し替えるとかでもいいかもしれませんが はじめからyを押された時の処理を描くつもりがなくてそういう関数を用意していない時とかに フラワーとったらどうしたらいいでしょうか。
>>515 ありがとうございます
今ちょっとぐぐってみました
.Netから使えるスプリクト言語みたいなものですか?
ちょっと調べてやってみます.
オブジェクト指向を勉強したら
>>514 みたいに考えたくなるのはよくわかるけど
特にゲームは実際やってみるとやっぱり上から神様が管理しないと難しいよ
>>517 そうですね痛感してますw
でも趣味の勉強なのでいろいろ試してみたいと思います。
ゲームはソース読んで勉強するのが一番わかり易いと思う
DataTableに自作のクラスを入れることができますか? 入れようとするとToStringの中身が入ってしまうようですが。
できますん
>>514 継承できなければ委譲。拡張メソッドで行ける場合もある。
>>514 has-aでいいんじゃない?
Marioをコンストラクタで受け取る
FlowerMarioクラスを作ってやればいいと思う
と、どう考えても回答者側の知識量ではない俺がいってみる。
>>520 できるよ
単に表示されるときにToStringが呼ばれてるだけでしょ
>>523 それは無意味
MarioとFlowerMarioの間に継承関係が無いなら
アプリケーションがFlowerMarioをあらかじめ知っていないといけない
>>525 ああそうだね、じゃあ両方にインターフェースをつけるとか
>>512 Disposeできない時のためにFinalizeがあるんじゃないの
>>514 ステートマシンを内部に持てばいいんじゃないの、と適当言ってみる
それをオブザーバーパターンで外から操作とか
Decoratorとか? まあゲームだったら結局仕様をきっちり決めて決め打ちが一番いいと思うけど
ゲームの場合、一度納品してから仕様変更なんて、基本的にはないだろうしな。
ゲームのキャラクターなんか激しく周りの環境に依存するんだから プラグイン的な拡張をやろうとすると結局グローバル環境的なものを丸ごと渡すことになって あんまり意味が無さそう
ありがとうございます
>>519-531 Decoratorパターンていうんですね
>>526 さんの
方法は一応考えたんですが、羽と花をとったときに
両方の効果を使える用にしたいなと思いまして。
>>528 調べてみます
拡張性に意味はないかもしれませんが勉強なので。
>>521 ,524
ありがとう
次のようなコードで試したんですが、使い方間違ってますか?
foreach( DataRow row in table.Rows )
{
row["col1"] = new MyClass();
MyClass obj = row["col1"] as MyClass; //失敗する
}
それ、col1列のDataColumnのDataTypeがStringになってる
>>523 重要なことだからつっこませてもらうと、MarioがFireFlowerを取るとFireMarioになるんです。
Luigiクラスはいりません。バグの元ですから。
>>530 最近はオンラインアップデートがあるからなんとも言えなくなってきたかも。
追加要素という名のアンロックは別としても、修正パッチあたるよ。
てか、MODだろ
539 :
536 :2010/04/26(月) 17:00:05
ああ、家庭用ゲームだと思い込んでレスした
>>523 has-aならStateをキャラクターとアイテムが持ったらいいんじゃね?
FireStateを持ったFireFlowerをMarioがとるとMarioがFireStateを持つようにする
正直、マリオ程度のゲームなら 愚直にステート値でswitchするコードを書くほうが結局分かりやすいと思う。 こういうの、最近はすっかり「不吉な臭い」扱いになっちゃてるけどw デリゲートやインターフェイス使ってストラテージパターンみたいなことしても、 自己満足以上の効果はないと思う。
風マリオと雷マリオと闇マリオと土マリオとマリエと・・・ stateの量の問題?
実際のゲーム機の開発でそこまで綺麗にクラス使ってるのかね?
ゲーム機のゲームも結構な規模になってるだろし それなりに綺麗な設計せざるを得なくなってるんじゃないかね?
家庭用ゲームのソースコードなんて見る機会無いからね。 このスレに業界人は居るのかなぁ。
テートスとかジーラテはスーコーあげあげだからねー ウィチスーでスーケーしてるほうが現実見てるってyou know?
日本語でおk
StateまたはStrategypatternは時間がかかります。 switch caseを使用するのは現実的です。理解?
把握した
スーコーあげあげいいなw スーコーマシマシ!
object同士でプリミティブ型であれば ある程度大小比較してくれる関数ってありますか? 具体的に言うとstringとint(byteなど)で比較を 正しく行いたいのですが。
"a"と100のどっちが大きいかなんか定義次第なんだから正しい比較も何もないだろ
どうやって"one"と5を比較できると思うんだ? 数値に変換できる文字列なら、数値に変換して比較するしかなかろう。
int.Parse
555 :
551 :2010/04/27(火) 21:56:06
書き忘れました。
型が同じことが前提です。
>>552-554 ありがとう
やはりParseが一般的ですか。
DataViewもParseで比較してるのかな。
型が同じって、Objectに入ってるInt32同士を比較したいってことなのか? ならComparerクラスとか
もう、自分がやろうとしていることを意味的に把握してないから人にうまく説明できないわけで、 その時点でちょっと.....
関係ないけどstringやobjectは組み込み型だけどプリミティブ型ではないよ
まあ確かにWin9xでなきゃ目くじら立ててDisposeする必要がないものでもIDisposable 実装してたりするし 関係ないけどインターフェイスを「継承」する、って言い回しはJava方面の方言? それとも単にありがちな誤用ってだけなのか。
ありがちな誤用
>>560 C#方言。
インターフェイスの概要
インターフェイスには、次の特徴があります。
インターフェイスは抽象基本クラスに似ています。インターフェイスを継承する非抽象型は、すべてのインターフェイス メンバを実装する必要があります。
インターフェイスは直接インスタンス化できません。
インターフェイスには、イベント、インデクサ、メソッド、およびプロパティを含めることができます。
インターフェイスには、メソッドの実装が含まれません。
クラスと構造体は、複数のインターフェイスを継承できます。
インターフェイス自体が複数のインターフェイスを継承できます。
かと思ったら、Javaでも使ってるな。 interface inheritance 言語規定より。 This (multiple) interface inheritance allows objects to support (multiple) common behaviors without sharing any implementation. この(多重)インタフェース継承は,オブジェクトがいかなる実装も共有せずに(多重の)共通的な振る舞いをサポートすることを可能とする。
インターフェースはインターフェースを継承できる
>>565 なるほど、それが「実装」だったら確かにおかしいな。
Javaだと、implements と extends とキーワード異なるけれども、C#だと、どっちもコロンだから用語を忘れてしまうんだな。
クラスがインターフェースを継承している時点で実装があるはずなんだから、継承だけ使えば意味通じるでしょ
>具体的に言うとstringとint(byteなど)で比較を >正しく行いたいのですが。 >型が同じことが前提です。 どっちだよw
571 :
デフォルトの名無しさん :2010/04/28(水) 08:01:22
>>551 遅レスだけどこんなのダメだっけ
if (obj1 is IComparable)
{
return (obj1 as IComparable).CompareTo(obj2);
}
インターフェースて使った事ないんだけど どういうときに使うの?
>>572 継承関係にない型の間に共通の機能を持たせて、同じように扱いたいとき。
>>563 ,571がまさにそれ。
C#の言語仕様(foreachだのusingだの)とも密接に結びついているので、
知らず知らずのうちにインターフェースを活用しているはず。
たとえば、IEnumerableを実装しさえすれば、どんな型でもforeachで列挙できる。
あるクラスを継承してメンバ関数だけオーバーライドして使いたい場合 元のクラスで扱っても大丈夫でしたっけ?
>元のクラスで扱っても大丈夫でしたっけ? インスタンスを作った後も元のクラスで扱っても大丈夫でしたっけ?
元のクラスで扱うってのはどういうことなんだ? 継承元のクラスにキャストするとかそういうこと?
>>579 ゲームの中にでてくる物体(障害物、自機、敵など)はすべて座標系など特定の
情報を持つという部分では共通ですが、動きだけが違うので管理上は継承前の
クラスで管理して、動きに関連するメンバ関数だけを差し替えを実現したい・・
という感じです
オーバーライドしなくてもいいんじゃないか? 継承先で個別に実装すれば 100%書き換えることが前提になってる感じだからむしろIFとかにしてみるとか・・・ いや・・・いろいろ方法はあると思うが 継承元で関数書いてもどうせ空の実装とかにしかならんだろうし オーバーライドしなけりゃ元の動作のまんまになってしまうのはバグの元だと思うんだ・・・
>>581 むかーしgcc上で書いた物を移植中なので.netなりの方法はないかなあと模索してたりします。
C時代は関数ポインタのテーブルを用意して・・・とかやってたんですけどね
>>582 どんな感じでやればいいですかね?
>>583 いやだから基本クラスで動き意外の関数作って
継承したクラスで新しく動きの関数作ればいいだけだけど
何が問題なの?
class 物体 { public void 動き以外の処理(){} } class 自機:物体 { public void 動きの処理(){} }
>>584 Hogeクラスを継承したHogeA,HogeB・・・・・HogeZとかあったとして
管理はList<Hoge>として全体をまとめたいんです・・
抽象クラス使えば?
関数ポインタ使っていたなら、そのまま構造体を抽象クラスにして、関数ポインタを仮想関数にしたら、完成のように思うが。
>>577 やってみたらいいのに何でわざわざ面倒な手順を踏んでるんだ?
まあvirtualでググればいいんじゃないかな!かな!
>>577
模索している割には他の提案を聞き入れようとしない件について もし判ってないならそれは技術力不足以外の何物でもないな
>>592 聞き入れないわけではなく聞いた上で調べた結果実装を考えた際に
こういう時どうしようとか悩んでるわけなんですよ
たとえばクラスを継承してインスタンスを作る際は確かに一つの
メンバ関数をオーバーライドですれば済みますが状態がわかった際に
インスタンス化されてしまってるクラスのメンバ関数を状態遷移に応じて
さらにオーバーライドできるかとか
できないなら、昔書いたように関数ポインタもどきを実装するしかないのだろうかとか
でもクラスに関数ポインタぽいことを実装すると関数ポインタのテーブルを
もったインスタンスがいっぱいできる?・・・とか
>状態がわかった際に この記述は無しで
頭の中が混乱してるみたいですね。 デザインパターンのテンプレートメソッドとストラテジーあたりを勉強するといいかも。 理解できないならIF文で押し切れw
以下のようなメソッドを用意して、データをネットワーク越しに通信するプログラムを書いています。 private byte[] CompressBytes(object rawData) { using (MemoryStream stream = new MemoryStream()) { using (DeflateStream compressedStream = new DeflateStream(stream, CompressionMode.Compress, true)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(compressedStream, rawData); } return stream.ToArray(); } }
598 :
597 :2010/04/28(水) 20:06:16
private object DecompressBytes(byte[] compressedData) { using (MemoryStream stream = new MemoryStream(compressedData)) { using (DeflateStream decompressedStream = new DeflateStream(stream, CompressionMode.Decompress)) { BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(decompressedStream); } } } 単一のプログラムでテストする場合は問題なく動作するのですが、 クライアント・サーバのプログラムにそれぞれメソッドを組み込んで通信をしていると、 return formatter.Deserialize(decompressedStream); の部分で、「デコード中に無効なデータが見つかりました。」というエラーが出ます。 具体的にはNetwork Streamに対してbyte配列を書き込み、 相手側で読み出すという作業をしているだけなのですが、ローカルとネットワークの場合で挙動が変わるのかよくわかりません。 # ネットワーク越しといっても、サーバプログラムで127.0.0.1に対してポートを開いて、クライアントプログラムで127.0.01にアクセスしているので、マシンスペックに違いは無いはずなのですが… もし何か注意することがあれば教えていただけないでしょうか?
俺的に3Dゲームはudkやsource modを使うのが一番現実的だと結論付けた
>>599 inしてみたが週末Flashスレで貼られる戦車のゲームとエリア規模は似てるな
まあ4MBってのも圧縮した状態だと小さくなるしなあ
気軽に対戦ゲーム作りたくてもサーバーが難しいよね
↓ここで簡単厨のターン
604 :
デフォルトの名無しさん :2010/04/28(水) 21:17:01
まぁ俺にかかったら1日で何でもできるけどね
>>598 そのエラーが出てるとこのデータの中身はどうなってるんだ?
ちゃんと送りつけた時と一緒になってるか?
まずはそこからだ
>>602 ほとんどのレンタルサーバーはゲーム禁止だからな
ATPAGESではOKだが、負荷をかけすぎるとアカウント自体止められる
>>583 abstract class foo
{
foo(){}
abstract bar(){}
}
class xxx : foo
{
override bar(){}
}
とやって、xxxのインスタンスをList<foo>にでも突っ込めばいける
あと、遷移ごとにfooを継承したクラスを作って突っ込めばいい 詳しくResponserパターンでくぐってみろ
デザインパターンなんてみんな覚えてるの?
>>609 そりゃデザパタから入った人は「覚える」って意識になるんだろな。
趣味で一人でプログラミングするなら、無理にオブジェクト指向を意識する必要はないけどな。 下手にクラス設計に凝るくらいなら、ひたすらstaticでプログラム組んだ方がましだと思う。 どうせ誰かにソースを見せたり、過去の資産を利用したり、誰かから仕様変更を言い渡されたりはしないんだろ。
いや、正しい
いや、過程に過ぎない つまり妄想
構造体の配列で回して、キャラのタイプIDでswitchしまくりで別に問題ない
趣味なら作ってて楽しければいいし、どんなソースでも動けばいいんだよ。
正解
うん。 でもね、べつにクラス設計とかって伊達で導入されてるわけじゃないんだけどな。 規模が大きくならないとあんまり意味がないってことなら同意だけど。
>>616 動いたけどsbyteで済むようなただのフラグ用の変数すらintで書いていて起動しただけで10MB超のメモリを食ったのは恥ずかしい経験w
やっていくうちに分かるってのはあるが、どんなソースでもとかいう気持ちだといつまで経っても向上しないような気はする。
まあ目的と手段を間違えないことだな
ゲームの場合オブジェクト指向が有効そうにみえるんだが 案外そうでもなかったりするんだよな・・・ もうちょっといい方法があればいいんだが
>>598 受信途中のデータの後ろが欠けてるんじゃない?
MemoryStreamじゃなくて、直接NetworkStream渡せば?
>>620 それはあるねー。
もっとも趣味プログラマの場合、楽しく正しく書くってのも目的に入ってる人は多いんじゃね?
WPFやっててバインディングがものすごくよかったんだけど WinFormでも同じようなことできましたっけ?
バインディングの仕組み自体は似たようなもんだけどUIが貧弱なんだよ コレクションへのDataTemplateを使ったバインディングのようなことをやろうとすると大量のコードが必要になる
626 :
624 :2010/04/29(木) 15:19:16
>>623 プログラムのプロをプロフェッショナルとかけたダジャレで
昭和生まれは素人プログラマのことをアマグラマって言うんだぜ
>>625 WPFだとTreeNode.TagにList<>なんかが入ってても
簡単に取得できるの?
WPFではTreeNodeみたいなのは直接扱わないんだよ 元々ツリー上になってるオブジェクトグラフからバインディングだけでノードを生成する
>>628 WPFのサンプルみた感じだとTreeNodeじゃなくてツリーを形成するための
クラスを自分で作ってTreeViewにぶっこめば勝手に表示してくれてたな
C#で作られたものをWPFに移植しようとしたら また1から作り直し?
>>631 WinForm依存のデータ格納クラスはそうなるかも
でも最初から依存をなるべく避けたコード書いてればそれほど問題にならない
ロジックからコントロールを直接触ったりするような馬鹿な造りにしていなければ修正はUIまわりだけ
>>630 ほー
今メニューの項目をそのままTreeViewに表示しようとしているんだけど
激しく面倒くさい
ツリービューの項目にボタンを付けてボタンの上にhoge.ImageUriプロパティの値をバインドしてアイコンを表示して アイコンの右にhoge.Nameプロパティをバインドしてテキストを表示して 子プロパティとしてhoge.Childrenプロパティをバインドして再帰的に展開して… みたいなことがXAMLだけでできる
とにかくすごいわ C++からC#でかなり楽になったけどさらにWPFで楽できそうな感じ
MSはWinFormよりWPFに力入れてるの? おれもやってみようかな
WinFormsは完成放置状態 Silverlightに力入れててWPFはそれに合わせてる感じ
2008expressはもうダウンロード出来ないのかよ
銀光はApacheとかがMIMEタイプを標準で持つようにならないと普及しないと思う 窓鯖でもIIS7でないと標準で対応してないのがもうね これ、意外と高い壁だよ
>>641 おいおい
.netにはおさるさんがあるじゃなか
銀光とセットで月光あるしLinux上で.net動くぞ
完全互換とは言いがたいが
WinFormで出来てWPFでできないことって何?
>>643 wndprocのフック
コモンコントロールがないに等しいので自作しないといけない
お客さんに売り込み辛いんだよな、WPF・・・
短期納品、コストさげろ これって生産性あげろってことなのにWPFだめって言われるとねえ・・・
WPFって実際生産性高いのか xamlが手間かかりそうなんだけど
最近コンソールとかサーバーサイドばっかりで、UIのあるアプリ作ってないなぁ。
>>647 なれるまでが面倒かな
XAMLその物はHTMLでwebページ作成するような感じなので
慣れが必要かなあ
>>641 MIMEタイプが問題になるのはSilverlightより、WPF/XBAPやClickOnceだな。
htmlはコード見ただけで拒絶反応
ルーズXAML application/xaml+xml XBAP application/x-ms-xbap ClickOnce application/x-ms-application このくらいかな。IEは無くても処理してくれるが、firefoxの.NET Assistantアドオンを使う場合に必要。
.htaccessをいじらせてもらえなくても、perlは使えるところが多いので、 こんな感じで無理やり対応できる。 #!/usr/local/bin/perl # -- hoge.cgi -- print "Content-type: application/xaml+xml\r\n"; print "\r\n"; open(INF,"<hoge.xaml"); for (<INF>) { print $_ } close(INF);
とりあえず画像ビュアー的なのを作ろうと思うんだけど 皆さんだとWinFormとWPFだとどっちが速く作れます? サムネイル一覧表示 書庫から画像読み込み 各種フィルタ機能 画像の変換 を予定してます
>>654 >wndprocのフック
こりゃありがてえ!
>>642 いやそう言う話じゃなくて
.xapのMIMEタイプを指定してやらんと貼っても認識しない
>>653 みたいなことも出来なくはないけど、それじゃあFlashの代わりとしては敷居が高すぎる
>>657 ああすまん
httpヘッダのあれか・・
あれ・・・yahoo移管後のGyaoってSLのプレーヤーだな・・・ どうやってるんだろ
>654 できるのか。知らんかった >WPF Toolkitが便利。DataGrid/DatePicker/Calendar/Visual State Manager(VSM)は.NET 4に取り込まれた。 コモンコントロールあるのか・・・ そのキットにはコモンダイアログもついてるのか? フォントダイアログを自作する作業はもう嫌だよ・・・ せめてそのくらいつけてくれ>MS
ファイルダイアログくらいは仕方ないとしても、 コモンダイアログは本質的にWPFの範囲外だから付けたくないんだろ
>>661 WPFだとFont列挙してListboxにでも入れてしまえばいいような気がする
C#に限ったことではないのですが ループする項目に対していろいろな条件によって continue;するプログラムを書いていると ついループが長くなりがちでなんとかしたいのですが コツのようなものはありますでしょうか すぐ思いつくのは ・ループ内からメソッドを呼ぶようにして 結果をboolで返すとか(処理結果を他で使いたい場合に問題) ・例外でループまで戻ってくる (処理コストの面と意味的な面で例外を使うのはどうか) と言った辺りですが思いつくことありましたらご意見を。
>ついループが長くなりがち
なったことないのでわからん
どんな処理書いてるのか見せてもらえると一番なんだが・・・
コード晒す場合は
>>4 の※コードの量が多い場合・・・のところを使ってね
>>665 bool返すメソッドをデリゲートに設定すれば
一つのメソッドで複数のメソッドを呼び出すことができる
一つのif文で済む
あとはその処理用にデータ構造を設けてコードが短く済むようにする
よく分からんが、ループ内をごっそり他の関数にするとか大きな処理にまとめるとか?
多態使うとか
↓な感じでPictureBoxのサイズ変更時にImageのサイズも 変更しようとしてるんですけどImageのサイズが変わりません。 この方法まずいでしょうか。 ※PictureBoxはフォーム全体にアンカーを貼っていてフォームサイズが変わると 連動するようになっています。 Private void pictureBox1_Resize(object sender, EventArgs e) { pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); }
変更したサイズのImageが実際に欲しいのか、 Pictureboxのサイズに合わせて表示も拡大したいのか良く分からんけど、 後者ならプロパティに設定するだけ。 SizeModeをZoomかStretchImageにすればいける。
それよりぶち抜きでcontinueとかbreakしたいのは俺だけか 一番内側から最外ループまで一気に戻りたい時とか面倒で仕方ない
そんなのはケースによるしな
どんなコードの状況になてて
>>665 なのかわからんし
当たり障りの無い回答しかできないのも事実
>>672 SizeMode設定で出来ました。
ありがとうございます。
別のGraphicsの画像をPictureBox.Imageに拡縮貼り付けしていて
PictureBoxのサイズが変わったら貼り付ける座標も変わるだろうということで
PictureBox.ImageのサイズをPictureBoxのサイズに変えたかったんですけど
PictureBoxはPictureBox.ImageをStretchBltしてくれるみたいなイメージなんですね。
>>671 なんだか・・・いろいろやってくれるんですね.NETは
今までWin32APIでしかウインドウズプログラミングしたことなかったので
勉強になります・v・
次は、縮小画像がガタガタなんですけど…という質問が来るにちがいない。
>>676 ファミコンの画像を縮小したら変に滑らかになって困ります。RGB接続した時のようなまま縮小したいです
>>677 Bitmapオブジェクトを直接弄るしかない
679 :
665 :2010/05/01(土) 01:05:49
意見ありがとうございます。 実物はアレなので話のネタにサンプルコードとしますがこんな感じ IEnumerable<T> e = xx; foreach (var x in e) { bool a = this.A(x); if (a) { continue; } bool b = this.B(x); if (!b) { continue; } string c = ExtLibC.C(a, b) if (c == null) { continue; } DD d = ExtLibD.D(x, a, b, c) if (d == null || d.D == null || d.DD == null) { continue; } // こんな処理が数十行続くとか // もっとネストが深いとか }
適当な粒度でメソッドに分ければ? この例だと有効なdを取得したいんだろうから、こんな感じかね foreach(var x in e) { var d = D(x); if (d == null || d.D == null || d.DD == null) continue; // 処理 } -- DD D<T>(T x) { if (A(x) || !B(x)) return null; string c = ExtLibC.C(false, true); return (c != null) ? ExtLibD.D(x, false, true, c) : null; }
>>679 まあ分かって聞いてるんだと思うけど、そんなの汎用的な方法論なんてあるわけないよね。
冗長なコードが悪なのは誰も異論がないとしても、
それは全ての処理はコンパクトな記述が可能だってことを意味しないわけで。
ListViewのLargeIconモードでD&D並べ替えがしたいんだけど、スクロールが出来ない DragDropEffects.Scroll指定するだけじゃダメなの?
DataGridViewってセル結合出来ないのね・・・
>>683 諦めるんだ・・・
サードパーティが売れなくなるだろ?
できないことはないけど、コードガリガリ書くの面倒だよ
面倒なんでhtmlにしてWebBrowser貼付けた 楽すぎるw
>>686 ブラウザで代替出来る程度のことなら、素直にTableLayoutPanelでも使った方が
もっと簡単なんじゃないかと....
>>687 中の文章でセルサイズを自動調節したいんで、
TableLayoutPanelでは難しいです
if(a == 1 && a == 2 && a == 3) { } こんな感じのコードをもっとスマートに書く方法ってないですかね。 例えば if(a == (1 && 2 && 3))みたいな感じで。 「かつ」ではなく「もしくは」ならswitch文で代用できるんですけど。 よろしくお願いします。
if(false)
すみません。間違えました。確かにこれはおかしいですねw if(a != 1 && a != 2 && a != 3) { } こんな感じのです。
また「スマート = 文字数が少ないこと」と勘違いしている人かな。
switchとか!(new[] { 1, 2, 3 }.Contains(a))とか
>>691 用途上 a >= 0 に限定できるなら
if (a && a > 3)
{
}
>>692 今回例に出したのは数値型でしたが、文字列型だった場合には条件式の組み合わせが非常に多くなってしまって鬱陶しかったんで。
個人的なことですが、if文等の括弧の途中で改行挟むのが嫌いなものの、改行しないでいると横スクロールが面倒になるという始末。
まぁ比較用のbool変数に対して予め比較を終わらせておくって手段もあるんですがね。
要はわがままです。
>>693-694 ありがとうございます。配列に対してContainsを使う方法は思いつきませんでした。
文字列型の場合にも有効活用できそうですね。
>>695 いずれにせよ、値の評価関数(ようはintならintを引数にとってboolを返す関数)
をつくるベタなやり方の方がいいと思うけど。
ifの()の中の記述に場当たり的な技巧を凝らすのは時間の無駄だし馬鹿っぽい。
実行速度を計測してみたところまぁ当たり前な気もしますが、単純に比較するのとContainsを使う方法では前者のほうが圧倒的に速かったです。
実行速度を気にしなくて言い場合にはContainsは有効ですね。
>>696 上記の理由より、予め比較を終わらせておく手段をとるのが最善のようですね。
数が多くなるならリストを予め作っといて
>>693 の後者の考え方で判定するのがきれい
>>695 >>まぁ比較用のbool変数に対して予め比較を終わらせておくって手段もあるんですがね。
俺もこうするかな
bool b1 = a != 1;
bool b2 = a != 2;
bool b3 = a != 3;
if( b1 && b2 && b3 )
{
}
俺は状態を管理するクラスを作るかな。
var b = a != 1; b &= a != 2; b &= a != 3; if (b) { } だろ
ただ条件文自体は普通に書くのが一番分かり易いし取り回しもいいと思う。
>>702 まあ状況によりけりだが素直に条件式書く方がスマートだったりするよな
拡張メソッドでNotIn作れば良いよ
素直に条件式書いた方がコンパイラ的にも最適化しやすいと思うし。
業務アプリならifのパフォーマンスなんかどうでも良くて人間が見やすいことが優先されることが圧倒的に多いけどな
業務アプリなら他のプログラマが見ることもあるだろうから普通に書いた方がいい。 個人なら好きにすればいいよ。
>>695 つまらないこだわりはよせ
月にロケットを飛ばすプログラムが一行で書けたところで
何の意味もない
あれ?2010からはヘルプはドキュメントブラウザじゃなくてウェブブラウザになったの? しかもオンラインのみ? ローカルに設定したんだけど・・・
あ、失礼w ローカルアドレス参照になってましたorz
俺ルールだと if ( a != 1 && a != 2 && a != 3 ) { } 条件の追加削除が楽だし、&&なのか||なのかが前に並んで、俺が分かりやすい。 後ろに置くとチェック変数の変数名長でガタついて見間違えやすいから。 横並びなんて誰得。複合条件ならカッコつけてインデント。複雑なら変数方式。 これを部下に押し付けてる。 途中で||とか変な条件入ったら693なんてどーすんの?
大昔のパソコン雑誌(確かASCII)にはその手のコンテストがあったな。 一行プログラムコンテストだっけ? オッサンの独り言でした
>>713 これとか、カンマを文頭に書くのは好きになれないなぁ。
確かに見やすい&わかりやすいけどね。
>>713 途中で||が入ったとしても、&&で括れるグループ毎にまとめるとかはできるでしょう。
それに様々な条件が入り交ざったモノってそこまで条件式自体は長くないのが多いし、仮に長かった場合には関数なりなんなりでわかりやすく分離すればいいかと。
>>716 分解したら今度は読み解くのにあっちこっち見に行かなければならない
神経質な人はやりたくなるのは分かるけど、 手作業でコードの整形とか時間の無駄なんだよな。
そんなことよりswitch文で必ずbreak入れなければならない仕様は改悪だと思うんだ
caseの中身書かなければ並べられるので不便だと感じたことはないな
722 :
デフォルトの名無しさん :2010/05/02(日) 22:30:54
フォールスルーの読みづらさは凶悪 フォールスルーが言語でもめったに使われてないからたまに使われてるとほぼ確実に見落とす
724 :
723 :2010/05/02(日) 22:35:15
フォールスルーが許されてる言語でも の間違い
まさかプログラム板でグロ画像見るとは思わなかった。
病んでるんだろ ほっとけ
長期休暇は変な人があちこちに出没するなぁw
>>723 フォールスルーするならコメント書いとけ
削除ガイドライン違反 8. URL表記・リンク 宣伝・罠・実行リンク ・明らかに宣伝を目的としたリンク・クリックや訪問で課金が発生するもの等は、宣伝掲示板以外では削除します。
コピペ君も同類だけどな、まで読んだ。
このプログラムなのですが、どうしてもエラーが消えません。 どこがおかしいのでしょうか? C:\Documents and Settings\tutomu\My Documents\Visual Studio 2008\Projects\gomokuproguram\sironoisi.cs
キチガイの相手すんな
知らんがな。つとむくん。
うお、うpろだにあげるの忘れてた
つとむくん 忘れてたってレベルじゃねぇぞ! ところで gomokuproguram は GomokuProgram ではないか?
もうやめて!つとむくんのライフゼロよ!
つとむくんは盲点だったわww 確かにwwww
山口さんちのツトム君 このごろ少し変よ どうしたのかナ
何歳だよお前
うpろだにつながらなくなってしまった なんで名前知ってるの・・・? いちようウイルスソフトは入れている 2chになんかカキコするんじゃなかった
誰だよお前
例え私が滅びようが第二、第三のツトムが五目プログラムを作るであろう・・・ グフッ
ツトム君の人気に嫉妬した
プログラム一通り見たけど、設計がなってない
シロノイシ なんか小説でも書けそうなタイトル
つとむ君のスレになりそうだな 【五目】C#相談室【白の石】
こうだろ 【五目】C#相談室(ツトム君専用)【白の石】
OSに頼らずにジェスチャーを実装することって可能かなあ・・・ マウスだとボタンとポインター移動部分が独立してるけど タッチパネルとなるとタッチした瞬間にカーソル移動+ MouseDownとかイベント発生しそうだし・・・
>>753 戦車ゲームが難しいな
タッチしたら旋回して即発射
つねに振り向きざま即発射
白の意思・・・か・・・ ついにはじまるのか・・・
燃え尽きた・・・真っ白に・・・
原因がわかりました iとjをまちがいていました 変数名をtateとyokoにすることによって解決。 forの変数はiから順に使うとならったけど 名前を使ったほうが分かりやすいと思う あと名前をカキコするのはやめてください。 どこで知ったのかわかりませんが ちゃんとうpろだに成功してたのかな?
"つとむ" はローマ字だと"tsutomu"だよ。 "tutomu"じゃないよ。
>>757 ネタなのかマジなのか
>>734 で自分で晒してるよ
IDEのデフォルトの保存場所にするとマイドキュメントになるので
下手にプロジェクトとか晒すとユーザーネームまるばれなんだよw
>>758 僕はtutomuって書くことが多いですね
最近はローマ字で名前書いたことないですけど
>>759 はぁー!
フォルダに名前使ったおぼえないのに
C#が勝手に作った!?_
>>761 プロジェクト保存するときに保存先を聞いてくるので
見逃してたら自己責任だろうw
だめだフォルダの名前が変えれない 名前フォルダの中にデスクトップがあるし訳が分からない デスクトップの中にエクスプローラーがあってその中にデスクトップがある。 でも普通にファイル開けた
もうやめてあげて!ツトムくんが人間の形を留めていられなくなっちゃう!
鼠人間ツトム
そろそろ板違いだから。 これ以上やりたければ、パソコン初心者板でも行こうな。つとむくん。
ネタじゃなくてマジだったのかw
板を超えた釣りだろ
プログラム作る前にやることあるだろ
「白の石」って響きがすごくかっこよいんですけど。
でも、黒の石と別にする合理的な理由が思いつかない
黒の意思か・・・ ・・・風が吹いてきたな・・・
本人だけじゃなくてパソコンの先生にも問題があると思う 無条件に変数をiから使うとか教えてるっぽいし
パソコンの先生wwwww
VS2008を使ってます。 httpでHEADリクエストを送るにはどうすればいいでしょうか。 WebRequest, WebResponseを使うとGETで全部取ってきてしまうので・・
>>779 Method プロパティに "HEAD" 入れりゃいいだけの話。
"POST" したことあるならやり方わかるよね?
>>780 Method指定でできましたー
どうもありがとうございます
782 :
デフォルトの名無しさん :2010/05/05(水) 15:10:58
VS2005なんですが、デザイナで自動生成されるコードで、 プロジェクト規定の名前空間を含めないようにすることはできますか? 規定の名前空間が'hoge'で、コンパイル時に 型名'hoge1'は型'hoge.hoge'に存在しませんとなるのを避けたいのですが・・・
テンプレートをいじればいけるかも。
C#をやってみようと思いますが、 Visual C# 2010 Expressというのは製品版と比べて どんな制限があるんでしょうか?
>>784 普通にやる分には、全く制限が無いと思ってもいい。
>>785 えーっすごいですね!
早速参考書を買いに行ってきます。
そういやC#部分だけ見たらほとんど制限ないな
ところで、どこかに比較表とかありますか?
2010の比較表はまだ無いようだ。 参考書はとりあえずやめとけ。ネットで調べたらいくらでも出てくる。
MSのサイトにあるだろ。
> 1. 無償 > Visual Studio 2008 Express Edition は無償で提供しています。さらに作ったアプリケーションは商用利用が可能です。 これすごいですね
初心者スレ行けば?
ちょいと行ってくる
C# Builder Personalとか、商用利用はダメじゃなかったっけ? それを考えれば「当たり前」とは言えないでしょ。
何でも人の逆を言ってみたいだけのガキを相手にしてくてもいいのに
天邪鬼か
「天邪鬼」とは言えないでしょ。
C#ExpressはFormだけで完結するアプリ作るんなら必要十分だが DB絡むと途端に使えない子になる まあ無償だからしょうがないが
>>792 >・ アドインが使えないので、TestDriven.Net を使うには工夫が必要がある。
どうすれば使えるんですか?
ご教示ください。
スレッドの意味がよくわかりません。 デリゲートと比較すると引数もコールバックも渡せない。 敢えてスレッドを選択するのはどういう場面なんでしょうか。
807 :
682 :2010/05/06(木) 15:03:43
自力でなんとか調べて、InsertionMark.NearestIndexとEnsureVisibleで ある程度D&D時のスクロールは実現出来た ただ、上方向へはスクロールするけど下方向がスクロールしない マウス近くのアイテムが表示範囲に入ったところで止まってしまう 下方向へもスクロールするにはどうしたらいい?
>>806 常にバックグランドで待ち構えていなければならないような用途かな
例えばアーカイバプロジェクトDLLはほとんどがマルチスレッドに対応していない
だからアクセス専用スレッド待機させて、生産者消費者パターンでシリアル化する、みたいな
まあUIスレッドのために存在する、って言っちゃってもいいんだけどw
>>808 なるほど。
スレッド=タスク分散のためのマルチスレッド処理に使う物
と勝手に思い込んでたのでなんでこんな糞仕様なのかと疑問だったのですが
そもそもそういうことに使うものじゃないんですね。
もやが晴れましたどうもありがとうございました。
>スレッド=タスク分散のためのマルチスレッド処理に使う物 これはこれで合ってるんじゃね?
デリゲートの非同期呼び出しやスレッドプールはスレッドを使って実装されてる ややこしい手続きを引き受けてくれる代理店みたいなもん
非同期呼び出しのおかげで明示的にスレッドを使う機会がめっきり減った。
ExcelやVisualStudioのタブみたいなTabControlが使いたい件。
メールのタイトル?
つWPF
コードプロジェクト行けばそういうサンプルなんて何ぼでもあるぞ とくにそれは見掛けたことがあるから絶対になるわ
818 :
デフォルトの名無しさん :2010/05/07(金) 03:39:53
てs
ThreadPoolもどきを実装してるのは俺だけでいい
CCRもどきを実装するのも俺だけで十分だ( ^ω^)・・・
時間で消えるメッセージボックスもどきを実装させられるのも俺だけで十分だ
それは割とよくあるな。
そんなもん非同期にしなくてもWinFormsのタイマで頻繁に時間調べればいいだけじゃね 5分で作れる
User32.dllに MessageBoxTimeout という関数があってな。
>>823 メッセージボックスの場合はDialogResult返さないといけないから、
普通はそう単純にはいかない。
あと数値だけ受け付けるTextBoxとかComboBoxなんかも
かなりの頻度で車輪の再発明されてそうだな。
入力内容の制限は本来はバインディングでやるべきだな WPFでは実際にそうなってるが
>>828 それって「馬鹿の一つ覚え」でしょ。
そういう方法論もあるとは思うが、それが「べき」なんていえる万能な方法なわけがない。
だいいち、入力を弾くなんていうGUI寄りの泥臭い処理を
データを持ってるオブジェクトが担当するなんて、どう考えても悪い設計にしか思えない。
>>829 「入力を弾く」のはロジックであって、そもそもGUIの仕事ではない。
逆に入力ルールをUIに持たせようとする神経を疑う。
UIは、あくまでデータの見せ方を定義するもの。ロジックは他に任せろ。
いい加減スレ違い。
>>830 話が噛みあってないな恐らく。
同じ「入力を弾く」という言葉を使っていても、
君は例えば設定範囲外の数値を弾くようなことを想定しているんだろう。
俺はそんな話はしてないの。(
>>827 )
C#ってもしかしてJavaにそっくり? Javaが使えれば、何となくC#もできちゃう?
よくわからんな、入力書式のチェックの話でしょ?別に勘違いはしてないと思う。 指定したキー(文字)以外の入力は受け付けない、という機能であればViewの仕事だと 思うけど、そういう話? # 単にキーで入力制限すると、数値しか入力させないつもりが"1.1.0-"なんて # 入力ができちゃったりするから、個人的にはあんまり意味ないと思うけど。
>>834 そうそういう話。
君自身言ってるとおり、そんなのはViewあるいはGUI部品の仕事でしょ。
1個以上の小数点の入力を抑止したり、先頭以外の-の入力を抑止(あるいは、初めて
-が入力された時、先頭に-を表示する)するのは別に難しくない。というか普通そうする。
>>833 Javaよりだいぶ洗練されてるけど、まあ、似てるっちゃ似てる。
元々が「SUNがあまりに要領得ないからうちでJavaに似た別言語創るよ」みたなノリだし。
今やJavaよりかなり高機能になってるけど、逆にJava側がC#の機能を輸入してたりするし。
Javaより良いのか! 今まで興味なかったけど、何だか急に興味が沸いてきちゃったじゃないか。
ただ最近ちょっと言語仕様太りすぎじゃね?って気もしてきたけど IDEが優秀だからあんまり気にならなかったり
>>837 後発で MS が作ってるものが悪いわけないじゃん。
MS が Java の仕様をあれこれ改善しようとして、それを SUN が断固拒否しなけりゃ
今頃 Java はいい言語になってただろうにねぇ。
>>838 IDE 抜きでもなかなかきれいにまとめてると思うよ、あれだけの高機能を。
実際はVJ++で改悪しようとしてたけどな
VJ++のどこら辺が悪いかな? Write once, run everywhere. でなくなることぐらいだったような。 いろいろ便利なので、JDK1.1で成長を止められてしまったのに、長々と使われていた(日本ではほとんど使われなかったけど)。
テキストボックスに開いたCSVを、1次元配列に入れていこうとしたのですが 配列の要素数が後ろに増えていくと思ったのですが 1行分の要素しか格納されていきません 要素全てを格納したいのですがどう直せばいいのでしょうか? // 変数の宣言 string Str = ""; string[] stArrayData = {}; // テキストボックスの1行単位処理 for(int i=0;i<textBox1.Lines.Length;i++){ Str = textBox1.Lines[i]; // テキストボックスから1行取得 stArrayData = Str.Split(','); // カンマでsplit }
> Write once, run everywhere. でなくなることぐらいだったような。 それ駄目だろ、最大のウリだったのに。
カンマでSplitした配列をListにAddすれば?
>>841 当時 Pure Java とか言ってたくらいだし、
亜種作ることを SUN がとことん嫌ってたから。
なんか係争に発展してなかったっけ?
>>841 Write once, run anywhere.
Write once, debug everywhere.
混ざってないか
>>842 stArrayData = textBox1.Lines.SelectMany(s => s.Split(',')).ToArray();
>>844 すみません。頂いたヒントからググっても
どうにも上手くいかず
上のコードをどう直していけばよいのでしょうか
C# の欠点はオープン系のみで構築したいなんて案件だとちょっと辛いってとこぐらいかな。 MONOってどうなの?業務で使った人居る?
GPLが混入した時点で全く使い物にならないだろ .NET関連のオープンソースプロジェクトってGPLより緩いライセンスがほとんどだし サードパーティのライブラリとかも全滅
>>847 // 変数の宣言
string Str = "";
List<string> arrayData = new List<string>();
// テキストボックスの1行単位処理
for (int i = 0; i < textBox1.Lines.Length; i++)
{
Str = textBox1.Lines[i]; // テキストボックスから1行取得
arrayData.AddRange(Str.Split(','));
}
// string[]に変換
// arrayData.ToArray();
>>850 ありがとうございます!できました
…C#難しいよ…Perlのが楽だよ
面倒というならわかるが難しいならそりゃPerlもわかってないんだよ オブジェクト指向してないでしょ
2002年以前の情報のままの奴がいるな。 GPLじゃなくなってから8年もたつのに。
>>850 Strの場所おかしくないか?(そして何故大文字)
>>854 元のソースで、とりあえずそのままでもいいところは
そのままにしているだけ、だと思う。
本家もできてないけどな
Perlでもあのロジックじゃ上手く行かないと思うのは俺だけか
Perl はぶっちゃけオブジェクト指向する必要ないと思うぜ
Perlでオブジェクト指向するくらいならRubyがいいな。
スレ違い。
enum を作るときって、関連するクラスの中に作ります? それとも同じ名前空間内のクラスの外側に作ります?
そのクラスの外に見せるならクラスの外に作らないとガイドライン違反
キリ
クラス内のenumを使うユーザーコントロールがデザイン時にエラーになってかなり困ったことがあるよ。 あんまり想定されてなくて危ないのでやめたほうがいい。
わかりにくいし使いにくいし探しにくい
>>862 ,865,867
なるほど。
確かに名前空間の分離で充分賄える内容でした。
とはいえ流石に enum 用の名前空間分けるのも変なかんじなんで
"Foo"StatusType みたいにそれっぽいプリフィクス付けて対処してみます。
ありがとうございました。
めんどくせーからpublic classの中にpublic enumでつくってもごもご。
namespace HogeProject { public class HageClass { //(ry } } namespace HogeProject.HageClass { enum StatusType { hoge = 0, hage = 1, } }
872 :
デフォルトの名無しさん :2010/05/10(月) 12:02:19
禿ワロタw
if(this.Status == HogeProject.HageClass.StatusType.hage) { MessageBox.Show("禿"); }
874 :
デフォルトの名無しさん :2010/05/10(月) 12:46:53
>>871 using HogeProject;
var hage = new HageClass(); // <- 名前空間はnewできない
って書けなくなるじゃん
C#で文字解析をしたいのですが、 なにかいい方法はあるでしょうか? 例えば、テキストボックスにある 文字列が "A B" C | D -E という場合は、 A B AND C OR D ANDNOT E という文字列に置換したいです。 今は文字列を1バイトずつ調べて いますが、なにかmethodを使い よい方法があればと思い質問します。 C#は初心者ですが、よろしく お願いします。
正規表現とか
ぶっちゃけいうとF#でFslex,yacc使った方が幸せになる
C#でExcelシートを読み込む処理を作っています。 OleDbで接続して読み込むことはできるのですが、 どうしても読み込むことのできない列があり、その列の値だけは 何行目でも空になってしまいます。 試しに他のExcelファイルに変えてみましたが、最初のファイルとは別の 列がまったく読み込めませんでした。 Excelファイルに問題があるのでしょうか? それともOleDbでDBのように読み込むには何かの制限があるのでしょうか? よろしくお願いします。
で、それはどんな列なんだ?
>>881 商品一覧のようなシートで、読めない列には金額が入っています。
他の列にも同じような値が入っているのですが、一部の列だけ読めないんです。
やはりこれだけの情報では厳しいでしょうか?
じゃぁその読めない列と読める列の適当なサンプル提示してみれば? 個人情報が残らないようにしてソースの一部とともに公開すれば親切な誰かが見てくれるかもしれんよ
接続文字列に IMEX=1とか?
皆さんありがとうございます。
>>884 さんの仰るとおりIMEX=1を追加したところ
動作しました。
C#に全然関係ない質問しちゃって失礼しました。
886 :
デフォルトの名無しさん :2010/05/11(火) 11:09:52
どっちにしてもソース晒すのが礼儀
>>886 予想が当たったけど、データがなければ分からんのだから、指摘変だよ。
接続文字列の情報があれば IMEX=1 が無かったは明白だったわけだから解決は早かったかもしれんの
C#2010で2008のプロジェクトを変換すると プロジェクトプロパティにビルド構成が表示されるように なったんですが、2008と同じようにする方法はありますか? 2010の新規プロジェクトを作ると2008と同じになるようですが・・。
上の件で、どうも元のソリューションのプラットフォームがAnyCPU だと変換後に2008と同じような表示にならないようでした。 (テキストエディタでslnとcsprojのAnyCPUをx86に書き換えて確認) 書き忘れましたが環境はC# 2008 Express(一度削除)→C# 2010 Expressです 2010ExpressだとAnyCPUは推奨されないーとか、AnyCPUのときは手動で ビルド構成の切り替えが必要ーとか、何か関連がありそうな事があれば 教えていただきたい。
>>891 メニューの「ツール」ー「設定」に基本設定と上級者設定があるからそれで切り替える。
変換元が基本設定でカバーできない範囲だったら上級者設定になるんじゃねーか?
その他の微調整はカスタマイズ、オプションで。
VisualStudioのエディタのデフォルトエンコードを UTF-8 から ShiftJIS に したいのですが、何かレジストリとかで設定できないでしょうか? 保存オプションの詳細設定でいちいち変更するのが面倒になりました。 UTF-8でいいじゃないかという意見もあるでしょうが、UTF-8 をサポートしない ツールにソースをコピーペーストすると文字が化けるので。 例) かちゅ〜しゃ /// <summary> /// 繝?繧ケ繝? /// </summary>
一旦メモ帳にペーストして再コピーすると良いよ 多分無いんじゃないかな
テンプレートを修正するんだったかな。
そもそもファイルの文字コードと関係なくクリップボードはUnicodeでコピーされる。
つまり、vsのファイルはシフトJISだから、そのファイルを他の エディタで開けば読めると思うが、コピペだと文字化けする、 ということか。
嘘と言い切ることもできないが(CF_UNICODETEXTも付いてるから) しかしCF_TEXTにUTF-8とか止めて欲しいもんだ
UTF-8 をサポートしないツールを捨てよう
WinDiffのことかー!
windiffはもうずっと使っていないなぁ。WinMerge便利だし。 変な文字コードのクリップボードはxyzzyでクリップボードエンコーディングを指定して貼付けがいいよ。 xyzzyは貼付けの文字コード自動判別もできると楽なんだけどなぁ。
秀丸はOK
/// <summary> /// テスト /// </summary> うん、Windows7で動作。 オプションでShiftJISに変換するのとどちらが便利か比べてみる。 ありがとう。
C#の本でVisualStudioのGUI操作を主に取り扱ってる、お勧めな本ありますでしょうか? C#の言語仕様や文法については他の言語を知っているので詳しく書いてなくてもいいのですが。 特に、GUIコンポーネントの継承、VSS、外部参照方法など エンタープライズ向けの操作方法が乗ってるのがありましたら教えてください。
>>892 ありがとう。色々いじってみました。
2010ってデフォルトがAny CPUからx86に変わったんですね。
とりあえずは32ビットwinだとx86じゃないと必ず表示されるという結論
に達しました。
これに関連してか、Any CPUだと「プロジェクトおよびソリューション」
の「ビルド構成の詳細を表示」をOFFにしても「ソリューションのビルド」
でリリース構成としてビルドされないっぽい事がわかりました。
また何か情報あったら教えてください
ありがとうございました。
909 :
デフォルトの名無しさん :2010/05/12(水) 12:22:26
>>908 AnyCPUで作っちゃうといろいろ問題が起きるから2010では
デフォルトをx86つまり32bitにしておくことになったはず
この辺はAnyCPU vs2010とかググるとでてくるよ
まあこちらで経験した中ではブラウザコアを使った件はもろこれにあたったな
AnyCPUでブラウザコアを使うアプリ組むと64bitOS上だと64bitのIEが呼び出され
Flashまわりも64bitの物を要求するらしいんだけどないのでエラーになるとか
まあそれ以外にもいろいろあるようだけど
radikoのアプリ書いたときもろこれになった
そういう問題があるので2010ではデフォルトをx86にしてWOW64を当てにして
動かすようにしたとか
911 :
デフォルトの名無しさん :2010/05/12(水) 12:30:02
>>910 誰と勘違いしてるのか知らないけどradiko関連は最初に作った以上はやらないよw
普段から64bitOSで作業してるからこれにすぐ引っかかる コーディングしてデバッグ開始して外部DLLの初期の時にもう落ちるからねえ
>>845 亀だが、係争に発展した挙句SUNが負けたような
914 :
デフォルトの名無しさん :2010/05/12(水) 18:40:53
>>912 .netとかいっても内部はネイティブDLLなんかの単なるラッパーだったりするからねえ
915 :
デフォルトの名無しさん :2010/05/12(水) 19:52:30
よろしくお願いします。 VSC#2008です。 int.Parseに続くカッコ内に2バイト文字の数字を入れると、挙動がおかしいのですが デバッグ付実行でエラーでず、素通りしてしまいます。 2バイト文字の数字をint型にするには、どういった方法がよいでしょうか。
2バイト文字をint型に入れようって考えるのがそもそもおかしいと思うが… Parseする前にワンクッション、全角数字を半角数字に置換するようにすればいい。
いったん半角にすればいいじゃん。
むしろReplaceで充分。
その前に >デバッグ付実行でエラーでず、素通りしてしまいます。 の部分が変だな。どんなコードかいてるの?
920 :
915 :2010/05/13(木) 12:34:06
Microsoft.VisualBasic.Strings.strConvでNarrowにするのって、 半濁音のピは、ヒと゜に分解されるんですね・・・2文字になるのか・・・orz..
濁点付き文字を別に用意したら文字数が増えすぎて文字コードの隙間に入りきらないだろ 視認性も確保できない *作られた当時の話
復活のじゅもんだって半濁音は2文字だろうが!
923 :
915 :2010/05/13(木) 12:48:42
そうでしたね、ありがとうございます・・・。 ファイル名から数字をChar.IsDigitを駆使して抜き出してから strConvしたらうまくいきました・・。 便乗質問ですが、 int.Parseで変換しようとしている文字列が表現する数字の桁数が相当多くて、 intに入りきらない場合ってあるじゃないですか。 でね、そんなケースを実験してみたら、 return int.Parse(Microsoft.VisualBasic.Strings.StrConv(str.Substring(startindex, finalindex - startindex + 1), Microsoft.VisualBasic.VbStrConv.Narrow, 0)); デバッグ付実行なのに、何らエラー(バグったり凍ったりダイアログが勝手に出たり)でずに 素通りして、何食わぬ顔でシステムアイドル状態に戻るんですよね。 うーん。うまくいってんのかいってないのかわかんねーと悩んでいます。
924 :
915 :2010/05/13(木) 12:51:02
COM系のイベント内でやってないか?
926 :
915 :2010/05/13(木) 12:53:53
>>919 さん
わかった!INT.PARSEって明示的に例外処理を用意してやんないと
スルーするんですね?ってことであってますでしょうか。
で、厄介なのはスルー後、何事もなかったかのようにシステムアイドルに
戻るっていうこと。
何食わぬ顔で実行中のFOREACHから抜けだすし、それが記述されてるメソッドからも
抜け出す・・・。
927 :
915 :2010/05/13(木) 12:54:42
>>925 private void MainForm_DragDrop(object sender, DragEventArgs e)
内でやっています。
(MAINFORMはFORM1のことです)
DragDropイベントもCOM系だな .NETの例外はHRESULTに変換されてCOMの呼び出し元に返値として渡されるので 例外は外部に通知されない
929 :
デフォルトの名無しさん :2010/05/13(木) 13:35:36
>>928 さん
まじでつか・・・ORZ
どうすりゃいいの変になりそう(byビース、ZEROより)
いきなりParseせずチェック入れた後に変換すればいいのでは? 多倍長ライブラリでInt範囲にあるかチェック→変換 もしくは 文字数カウント→Decimal変換→Int範囲にあるかチェック→変換
イベント内で例外処理すれば良いだけじゃん?
>>915 MSDNくらい読め、くそが。
TryParse
TryParse()使えば
934 :
915 :2010/05/13(木) 14:20:13
>>932 、933さん
ですね・・・クビ吊ってきます・・・ORZ
お前は既に釣っている
だれうま
ついでに、intで範囲外ならlongを使えばいいじゃない 幾ら何でもlongを超えるような桁数扱う訳じゃないだろ あ、先に言っとくがlong.TryParse()だからな? intからキャストするとかマヌケなことはナシだぜ
938 :
915 :2010/05/13(木) 16:06:38
ファイル名に日付が入っている場合は、 例えば20100513で8桁。 更に時刻も入っていれば、 201005131606で12桁。 ファイル名から数字を抽出する作業でインチージャを使うのは その時点ですでに無謀ですね・・・おrz
939 :
デフォルトの名無しさん :2010/05/13(木) 16:09:11
>>938 結局何がしたいの?
無理して数値型を最初の器にするからはまるんじゃないの?
計算に使うんじゃないのかよw
もういいから正規表現使えよwwwwww
942 :
915 :2010/05/13(木) 16:26:38
そんなにいっぺんにいろいろ言わないで下さい・・・滝汗 加工したいファイルをアプリにDDする。 DDされたファイルのファイル名を解析する。 ファイル名は、どのような形式か予測できない。 ファイル名は、おそらく少なくとも1文字の0でない数字が入っているものと想像する。 ファイル名の文字列のうち、頭から探っていって最初に0でない数字と出くわしたら、 そこから、数字の連続が途切れるまでシークし、 少なくとも1文字以上の数字列を抜き出す。 ということをしているんです。 抜き出した数字列をとりあえずイントにしていた、というだったんです。 シクシク・・・
だったらなおさら正規表現使え 見た目難解とかの言い訳は聞かん
(ノД`)シクシク
おれもそれやるなら正規表現でやるわ。
946 :
デフォルトの名無しさん :2010/05/13(木) 16:49:57
>>943 難解かね?
最悪わからなければ正規表現スレで書いてもらえばいいだけだし
,netの正規表現はperl5互換だったのでその旨だけ書いておけば
人がいれば書いてくれるよ
947 :
915 :2010/05/13(木) 16:53:47
kwsk(ノД`)シクシク
>>946 だな
とにかく
>>942 みたいなことをやりたいなら正規表現一択
そっから数値型に落としたいならVBのStrConv()をC#で使えばいい
949 :
915 :2010/05/13(木) 16:57:59
950 :
デフォルトの名無しさん :2010/05/13(木) 16:58:18
ところでたとえば
>>938 をどういう風に加工するの?
>例えば20100513で8桁。
>更に時刻も入っていれば、
>201005131606で12桁。
これをどうintの範囲に収めるか
ルールがないとねえ・・・
951 :
デフォルトの名無しさん :2010/05/13(木) 17:00:30
intの最大がこれか 2147483647
>>950 いや日時って事前に解ってればDateTime型にするだろJK
例え日時と連番が混在してたとしても、正規表現で一工夫すればある程度分離可能
953 :
デフォルトの名無しさん :2010/05/13(木) 17:09:32
>>952 いやいや
事前にわかってない物をルール決めて
intの範囲に落とし込むんでしょ?
そのルールというか仕様を決めないとどうしようもないって話・・・
954 :
915 :2010/05/13(木) 17:17:34
とにかく949でアップしたおソースをゲットして、 諸先輩方からの辛口批判を希望します。
この意図不明なソース見てどうしろと? 意味じゃなくて意図が不明 まず仕様をはっきりさせるのが先だ
956 :
デフォルトの名無しさん :2010/05/13(木) 17:21:55
>>954 本人だったのか
使い方わからんし、いろいろポップアップするしでスルーしてたわw
できれば
>>4 か
>>7 のコード貼るサイト使ってくれ
949は怖くてダウンロード出来ません
>>942-943 new Regex("(\D*?(\d*?)\D*?)", RegexOptions.IgnoreCase)
要するにこうか?
未検証だからこのまま動くかどうかは知らん
959 :
958 :2010/05/13(木) 19:27:11
おっと最後の繰り返しが抜けてた new Regex("(\D*?(\d*?)\D*?)*", RegexOptions.IgnoreCase) こうだな
なんのこっちゃさっぱり分からん。 915が説明すらまともに出来ないクズなのか、俺の頭が悪いのか
さっぱり分かるけど、21億、または42億を超えるような数字が取れてしまった場合どうするのかと、 数字が含まれていない可能性もあると書いているのに、1文字以上の数字列を返すところ 後者は"0"返せばいいのかな。
そもそも数値が欲しいのか数字列が欲しいのかすら分からんわけで
おまんこが欲しいです…
だったらこんな板にいないで歌舞伎町にでも飛び出せ 早くしろ
要するに文字列から「連続した数字文字列」を抽出したいといことなんだろう。 何に使用するかは知らないけど。
966 :
915 :2010/05/14(金) 09:27:23
>>965 そのとおりでつ!
ただし、数字文字列の先頭は0であってはならない。
抽出した数字文字列は1バイト文字に変換しなければならない。
でっつ!
967 :
デフォルトの名無しさん :2010/05/14(金) 09:54:03
あ、いや、むりして数字にしなくても、数字文字から成る文字列stringのままでもいいかも・・・。 でも、その代わり全角か半角か混在している場合はどちらかに統一するような処理をしたいけれどもでつ。
ジョニー・デッツ
でっつ奉公
>>966 間違っています。
以上。
はい次の方。
972 :
967 :2010/05/14(金) 15:16:49
915です、とりあえず戻り値をintじゃなくstringのままにしたら、全く問題ありませんでした。 諸先輩方、ありがとうございました。
ゆとりらしい解決だったな
結局設計意図がわからなかった
ぽかーん
f
機械制御プログラムとかで、コマンド送信時にタイムアウト値を指定する必要があります。 それぞれのコマンドに推奨の最低タイムアウト値が存在するのですが、 こういうのは enum で定義した方がいいんでしょうか? それとも const int の方が良いのでしょうか? それぞれのコマンド送信メソッドではタイムアウト値は int で受けつける仕様にする予定です。 (最低タイムアウト値 +- αの値を指定する必要があるため)
readonly int
static readonly intに訂正 constはできるだけ使わない(値そのものに意味があるenumも同じ)
980 :
977 :2010/05/15(土) 21:25:43
値そのものに意味がある enum は NG ですか。 enum → 意味のある数字への変換メソッド等用意するのが正道ということでしょうか? 機械制御のコマンドも数値で表現されているのですが、想定していない数字を受けつけないよう enum で型を作ってメソッドにわたすようにしていたのですが、 これは適当なクラスを作って定数を持たせるようにする方がいいのかな? 例) class ControlCode { public int Value { get; private set } private ControlCode(int value) { Value = value; } public readonly ControlCode Reset = new ControlCode(101); ..... } ... public void SendControlCode(ControlCode code, int timeout);
別にそのコマンドの数値自体には意味はないんだし 絶対にその値を変えることが無いと言い切れるならenumでもいいと思うけどな 値をラップする型を作る方法をとるのであればクラスじゃなくて構造体使うのが普通 ==と!=とGetHashCodeは必ず実装すること WPFなんかでは列挙体みたいな構造体は確かに多用されてる
なるほど。 MSDN を再度見返してみましたが、後から変更がかかりそうな定数なんかは enum にするのは よろしくないんであって、意味のある数字を持たせてはいけないってわけではなさそうですね。 今後の拡張や定数自体にプロパティを持たせる必要があるか等考えて再検討してみます。 ありがとうございました。
enumにご執心のようだが、同じ数値セットできないことは認識してるのかな。 異なるコマンドでタイムアウト値が同じ状況は十分ありえそうだが。
んな馬鹿なと思ってためしてみたら本当に出来たでござる
986 :
デフォルトの名無しさん :2010/05/16(日) 14:13:00
enumって手抜き用みたいなもんでしょ
>>984 んな馬鹿なとおもったけど
>>985 のレスでできるのだなぁと思い、そういやC#のenumはかなり変更されたんだったなと思い出した
これが出来るって事? public enum eSwich { VALUE1 = 1, VALUE2 = 1 }
昔からできたでしょ
これとかよくあるパターンだろ
enum Hoge { A, B, Default = A }
ついでに、別環境(Compactなど)で値が異なるとか
enum Hoge { A, B, Default = B }
>>982 ・要素を追加/削除しない
・要素の値を変更しない
・利用者が値を意識する必要が無い
を守れないならenumは不適切
列挙体といえば.NET4で今更Enum.HasFlagが追加されたわけだけどこんなの使う? ものすごい遅そうなんだけど
これから新しく書くものには使う。
[Flags]が付いた列挙体に対してはコンパイラが その型専用に最適化されたバージョンのHasFlagを生成するとかできなかったのかな ボックス化+リフレクションだからビット演算に比べると途方もなく巨大なコストだよな
using とか lock みたいな構文糖衣でもよかったよね。
unko
static bool HasFlag<T>(T value, T flag) { return ((dynamic)value & flag) == flag; } こうしてみたらEnum.HasFlagの1/10くらいの処理時間になった それでもビットマスクの数百倍だけどdynamic結構速いね
o
C#最強
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。