ふらっとC#,C♯,C#(初心者用) Part75
3 :
デフォルトの名無しさん :2011/06/04(土) 20:34:39.92
>>1 乙
MIDIそのものは楽譜データだけで音色は実装側次第だからなあ・・・
なんでいまさらそんな物を使うのか
前スレ
>>999 System.Diagnostics.Debug.WriteLineとかではダメ?
おっおっおっ
起動すると1.wmvを再生して、1.wmvを再生し終わったら2.wmvを再生するプログラムです
http://ideone.com/iZDn4 起動後、1.wmvの再生は出来るのですが、
問題は再生終了後に2.wmvが読み込まれているみたいですが再生されません
手動で再生ボタンを押さないと2.wmvが再生できません
どう改善すると2.wmvも自動で再生できますでしょうか?
7 :
デフォルトの名無しさん :2011/06/04(土) 20:52:39.66
対象プラットフォームを変更したらビルドできなくなったという経験はある そのときは構成マネージャーのリストビューの「ビルド」というチェックボックスの チェックがなんかしらんけど外れていた。けっこうトラップだと思う
case (int)WMPLib.WMPPlayState..wmppsReady : this.axWindowsMediaPlayer1.Ctlcontrols.play(); break; と、readyになってからPlayしてみたらどう?(テストしていません)
>>3 System.Diagnostics.Debug.WriteLine
だめでした
>>7 ありがとうございます構成マネージャをいじっていたら解決しました
C#AnyCPU DLLx64
コンパイルできない
C#AnyCPU DLLx86
コンパイル出来るがデバッグが使えない
C#x64 DLLx64
コンパイルデバッグ共にできる
C#x86 DLLx86
コンパイルデバッグ共にできる
AnyCPUは使わない事にしますありがとうございました
逆に考えるんだ、ちょうどこの機会に覚えるかと考えるんだ
BeginInvokeはいいけどよ そのwmpコントロールはどのスレッドで動いてるんよ
そりゃメインスレッドだろ BeginInvokeは別スレッドからの呼び出しのほかに 次以降のメッセージループで処理させるために使う場合がある
>>6 そもそも、その独自メソッドをどこからコールしてるんだろ?と素朴な疑問が。。。
Timerとかから呼ぶ様にしてみては
>>11 昔のソース見たらURIに一端空文字を入れてから操作しているな
こっちではソースは音楽ファイルだし、イベント発生させて他のクラスから
次のファイルをセットしているからどうなるか判らんが
>>6 のコードの
this.axWindowsMediaPlayer1.URL = @"C:\douga\2.wmv";
this.axWindowsMediaPlayer1.Ctlcontrols.play();
の次にMessageBox("test");を足して動かすと、何故こうなるのか分からないのですが2.wmvが自動的に再生できました
メッセージボックスを閉じると動画が停止されてしまうので何でこうなってしまうのか分かりません
>>12-17 今から参考にして調べてみます
System.Windows.Forms.Timerは精度が悪いみたいなので代替できるもので精度を求める場合は System.Threading.TimerとSystem.Timers.Timerのどちらがもっとも精度に長けてますか?
Timersの方はThreadingの方をちょっと使いやすくしただけ 使ってる物は同じ
21 :
デフォルトの名無しさん :2011/06/05(日) 00:03:32.21
タブとラベル(アイテム名って表示している部分)とスクロールバーくらいしかないね 後は全部自前で描け
>>18 >>14 が既に答えてるけど、これでいけた。
case (int)WMPLib.WMPPlayState.wmppsMediaEnded:
this.BeginInvoke((MethodInvoker) (() => {
axWindowsMediaPlayer1.URL = @"C:\douga\2.wmv";
axWindowsMediaPlayer1.Ctlcontrols.play();
}));
break;
>>21 タイムラインコントロール使えばいいじゃん
C#でDirectXを使う方法をC++/CLIで質問したんですが、C#だけでできるそうなので教えてください 「PInvoke で渡す構造体はC#側で用意してあげればいい」 というのは構造体をC#で作ってDllImportでC#で再定義して使うということでいいんでしょうか DirectXInputのDLLはどこにあるんですか?SDKのDeveloperRunTimeの中から選ぶとマニフェストを含んでいないと言われます
初級者ではなく完全な初心者がいきなりPInvokeとかギャグとしか言いようがないから1年経ってからまた来い もう同じ質問するなよ お前に言えることは全くない
まずP/Invokeだけできるようになったらやれば?
31 :
デフォルトの名無しさん :2011/06/05(日) 01:10:06.27
dllはsystem32の中に入ってる(xinput1_1.dllなど)な ただしこれ単体で呼び出していいものなのかは不明だ
ありがとうございます。 xinput1_1.dllもマニフェストなんたらのエラーが出ます。 開発で使えるようなDLLは用意されていないということですか? defがないとすると使われることを想定してないということですよね やはりLibと.hで使うにはC++CLIを使うしかないんでしょうか? C++CLIを通すならC++でDLLにしてC#から使う方が手間がかからないと思うんですが ラッパーとして使うC++CLIの存在意義を考えるとネイティブからの変換目的の為だけに使うことはないと思うんですが みなさんはどうやってアンマネージDirectXをC#で使ってるんですか?
非同期デリゲートのBeginInvokeとEndInvokeについてまったく理解できません わかることはBeginInvokeがデリゲートの処理開始時、EndInvokeが処理終了時ということくらいしかわかりません・・・ よくわかるように教えてもらえないでしょうかないでしょうか?・・・
すいません構造体を書く手間がマネージ変換を上回ったのでやはりC++CLIを使うことにしました ありがとうございました!
>>37 >わかることはBeginInvokeがデリゲートの処理開始時、EndInvokeが処理終了時ということくらいしかわかりません・・・
理解してるじゃん
それ以外に何もないよ
40 :
33 :2011/06/05(日) 01:59:56.19
根性なし極まりないわね…。
>>40 すいません出来たんですが、XNAを使わない理由はDirectShowとDirectComputoも使いたかったので統一したかったんです
なので総合的に考えてC++CLIにすることにしました。
C#から直接使うのは使い物にならないということが分かって勉強になりましたありがとうございました
だったらXInput試すまでもねーじゃねえか 本当に頭が可笑しいんだな
XInputをXNAでやっていたら DirectshowをC#で使う方法を質問していたと思います XInputからやってまずかったでしょうか?
いいから死んでおけ
そういう発言はいただけませんねぇ〜。 私の彼女は今プログラミング中ですがとてもいいですよ。
System.IO.Stream stream = File.Open("test.bin", FileMode.Open); として開いて、 var sr = new StreamReader(stream, System.Text.Encoding.ASCII); で数行読んだ後、 var br = new BinaryReader(stream); そこからバイナリで読みたいんですが、続きがあるのに br.ReadByte();にてEndOfStreamExceptionが投げられます。 途中からReaderを切り替えることはできないんですか?
そんなこと無いはずだけどなあ 続きがあるってことはEndOfStreamExceptionをcatchした時 Stream.Position < Stream.Lengthになってるのを確認してるんだよな
あ、バッファリングのためにStreamReaderが先読みしてるんじゃねえか?
>>49 ありがとうございます。
確認してみたところ、その可能性がとても高そうです。
StreamReaderにその分だけストリームを進めるように指定するには
どうすればいいですか?
最初の数行をバイナリで読めばいいのに
>>34 はネイティブdllをプロジェクトの参照に突っ込もうとしてたんじゃないかと
VC#でWindowsのGUIソフトを作りたいと思います プロジェクトを作るとForm1.csっていうファイルとprogram.csってファイルが出来ました 起動したときに必ず処理したいことって言うのはprogram.csのMain()の中に書くのと、 Form1.csのForm1()かたはForm1_Load()の中に書くのどちらで書くべきでしょうか?
またそういう叩いてくれと言わんばかりの質問を全力でするかね
>>53 form1を作る前に必ず処理したいなら、Main
その処理ってのが Form1 固有の物なら、Form1.cs のどこか。 たとえば複数の画面をもってて、広く影響を与えるなら Main という考え方もある。
まあ初心者用ってスレタイだしな あまりカリカリしてもするだけ損だ
OnLoadに初期化を書く作法は、たぶんVBから来てるんだと思うが、 ShowDialogで同じインスタンスを再利用しないとしても本来ちょっと奇妙だよな。 もちろん一部の処理はコンストラクタには書けないから仕方が無い面はあるんだけど。
private void conBtn_Click(object sender, EventArgs e) { StartAccept(); } private static void StartAccept(Socket server) { server.BeginAccept( new System.AsyncCallback(AcceptCallback), server); } 上記のコードを実行すると >引数を 0 個指定できる、メソッド 'StartAccept' のオーバーロードはありません というエラーが出ます。どなたか解決策を教えてくれないでしょうか?
61 :
デフォルトの名無しさん :2011/06/05(日) 15:08:12.56
StartAccept()の引数を変える
private void conBtn_Click(object sender, EventArgs e) { StartAccept(); } private static void StartAccept() { Socket server = new Socket(); server.BeginAccept( new System.AsyncCallback(AcceptCallback), server); } このように変えてみたけど今度は > 'System.Net.Sockets.Socket' に、引数を 0 個指定できるコンストラクターがありません。 って出でしまう。
子供じゃないんだから同種のエラーでいちいち質問すんなよ
これは「引数を0個指定できる」の意味を教えてやったほうが良かったのかもな…
string[] files = System.IO.Directory.GetFiles("C:\\,test", "*.txt", System.IO.SearchOption.TopDirectoryOnly) これで拡張子txtのファイルのみ一覧取得できるのですが、 txt以外にdocも取得したいと思います string[] files = System.IO.Directory.GetFiles("C:\\,test", "*.txt; *.doc", System.IO.SearchOption.TopDirectoryOnly) で出来ると思ったのですが出来ませんでした C#4.0で方法ございませんか?
GetFiles()に拡張子を複数指定できる機能は無い。 ディレクトリ内のファイルを列挙して文字列比較か正規表現でも使って抽出すればいい。
そんなことしなくても2つのパターンで検索してマージするだけでしょ。 智恵無さ杉
string[] files = System.IO.Directory.GetFiles("C:\\test", "*", System.IO.SearchOption.TopDirectoryOnly) .Where(file => { var ext = System.IO.Path.GetExtension(file); return ext == ".txt" || ext == ".doc"; }) .ToArray();
2回検索してマージとか無駄杉 この点は.Net Framework5.0で改善してもらいたいものだ
素でできなかったら工夫すりゃいいだけのことだろ
.NET4でEnumerateFilesが追加されている件
FindFirstFileができた頃からの仕様だし変更されるわけがない
自分以外のウィンドウのクライアント領域のスクリーン座標を取得したいんですが、 ClientRectangle -> PointToClientを他のアプリケーションに対して実行することはできますか? GetClientRectを使おうとしたけど挫折しました…
できない
自分以外のウィンドウのクライアント領域のスクリーン座標を取得するには GetClientRectじゃないとダメ、という話で大丈夫ですか? 勉強してきます…
>クライアント領域のスクリーン座標 ウィンドウハンドルがわかってるならGetWindowRectでスクリーン座標が取れるが [DllImport( "user32.dll" )] static extern bool GetWindowRect( IntPtr hWnd, out RECT pRect ); struct RECT { public int left; public int top; public int right; public int bottom; }
77 :
デフォルトの名無しさん :2011/06/05(日) 18:07:01.41
以前特定ウインドウのSSをとるアプリ書いたので探してくるわ
78 :
デフォルトの名無しさん :2011/06/05(日) 18:18:18.21
皆さん回答ありがとうございます
>>76-78 申し訳ないんですけど、欲しいデータは
「任意のウィンドウの『クライアント領域の』スクリーン座標」なんです…
GetWindowRectで帰ってくるのはウィンドウのスクリーン座標なので、申し訳ないんですが上手くいかない感じです…
GetWindowRectとGetClientRectなんて 呼び出し手順的には関数名ぐらいしか変わらないじゃん…
static extern bool GetWindowRect( IntPtr hWnd, out RECT pRect ); これを static extern bool GetClientRect( IntPtr hWnd, out RECT pRect ); するだけで動くだろ しかしまあP/Invoke関連の質問がバカ丸出しであることだ 酷いね
>>80 いや、GetClientRectで返ってくるデータってスクリーン座標じゃないですよね?
そこで詰まってるんです…
自分で求める先も見えてて検索するだけでしかも答えに近いコードまでもらって 何もできないって終わってると思う
84 :
デフォルトの名無しさん :2011/06/05(日) 18:40:12.87
>>84 ありがとうございました
ClientToScreenっていう関数があるんですね…
なんかここの所多いよな
ググらないからカスなのではない カスゆえにググれない
大目に見れ
全部答えようとするからムカついてくるんだよw
意味不明
ちょろっと 「>>xx ググれば出る」 で十分だろ
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
お断りよ
C#でmp3やwmaやwavファイルにエフェクトを掛けたり加工したりする方法を学びたいのですが 数ある書籍の中からおすすめの本ってございませんか?
C#じゃなくても出来ることなのでそういうのに触れてる本はないですね
FLVファイルの再生が行いたく、海外のサイトを参考に以下のように書きました
ツールボックスにShockwave Flash Objectを追加してフォームに配置してます
実行しても画面が白いままで右クリックすると「ムービーが未ロード」となってました
読み込まれれば実行できる?のかと思うのですがどうかお知恵を拝借させてください
http://ideone.com/fYnXP
フォームにAxShockwaveFlash(axShockwaveFlash1)が配置してある状態で さらにAxShockwaveFlash(flash)を生成してフォームのAxShockwaveFlashに追加する意味が分からない
100 :
デフォルトの名無しさん :2011/06/05(日) 23:18:29.65
面白そうなのでこっちでもやってみよかと思ったけど AxShockwaveFlashObjectsの参照設定ができねえ どこにあるんだ?
ActiveX版Flashを入れる。 参照にCOMコンポーネントからShockwaveFlashObjectsを追加する。 メニューのツール→ツールボックスアイテムの選択→COMコンポーネントからShockwaveFlashObjectを追加する。 デザイナで配置する。
SWFにしたら動いたからやはりフォーマットの問題だろう
>>98 では再生用のswfを介しているようだし
サムネにnot imageって出るから怖くて開けないよその画像(なのか本当に?)w
斧に画像あげるとそうなるね
うざいアップローダに上げられた画像は見ませんし質問にも答えません
それは言わなくていいです
プログラム板でロダとかないんだろうか ニュー速とかで使ってるロダ使うと夜は確実にテンポルからなあ
110 :
デフォルトの名無しさん :2011/06/06(月) 00:53:17.97
>>97 webbrowser貼り付けてそこへhtml含めて流し込めば早いかもとか思ってしまった
html上で動画再生するためのサンプルはいろいろあるだろうし
なんかセキュリティ的にいろいろ面倒だった気がするが
112 :
104 :2011/06/06(月) 15:03:02.22
http://freedeai.180r.com/up/src/up3827.jpg 適当なロダにアップロードしました
以下のようなレイアウトで、TabControl下にあるtabPage1、tabPage2のタブボタンに各イベントを設定することできませんか?
tabPage1のタブボタンはtabControlに分類されているようでtabPage1の中身をクリックしたときだけtabPage1のMouseDownイベントが起きるみたいです
TabControlを継承してWndProcオーバーライドしてみそ
タブのクリックイベントってないのか いつもタブ毎にFocus、LostFocusで使ってたから気にならなかった
調べてみてどうもflvを直接再生するのは難しいそうです swfから呼び出す形でflvを利用してみます
win7 スリープ時に別スレッドはアボートされるでOK?
そんなバカな
普通に考えたらサスペンドじゃないかな・・・。
てーてーてー てーてーてー ずんずんずんずんずんずんずんずんーててっ!
アボートもサスペンドもしてるわけない。 仮想PCをでゲストOSを一時停止するのと同じこと。
そういうのをサスペンドって言わないのか・・・。むー。
どの視点に立ってるかを意識しなきゃね。 アボートとかサスペンドとかいうのは、プロセスの視点に立った用語なわけで。 ゲストOSの視点からはゲストOSは止まってないように(当たり前だな)、 プロセスの視点からは(以下略
ありゃあ そしてら俺だめかな PowerModeChanged()で復帰時に スレッドをnewしてたんだが。
124 :
デフォルトの名無しさん :2011/06/07(火) 01:09:14.72
誰か教えて下され。 動画を再生するアプリを作成中です。 media playerで再生できる動画が、AxWMPLib.AxWindowsMediaPlayerを張り付けた アプリでは再生できない(すべて再生できない訳ではない)。 コンテキストメニューでバージョンを確認した限りでは、同じバージョンです。 なにか分かる人居ませんか????
コーディックはちゃんとはいってるの?
>>124 再生できないものに共通する事柄を探すのが先決だなってのは分かるよ
逆に言うとそれ以外アドバイスできることは無いね
128 :
デフォルトの名無しさん :2011/06/07(火) 02:06:32.60
皆さん、ありがとう。 再生できる奴と再生できない奴の情報をmedia player classicのプロパティで 見てみると 再生できる Video: MPEG4 Video (H264) 512x288 23.98fps [Video] Audio: AAC 24000Hz stereo 768kbps [Audio] 再生できない Audio: MPEG Audio Layer 3 22050Hz stereo 64kbps [Audio] Video: Flash Video 4 512x384 [Video] でもって、media playerのプロパティでコーデックを見てみると 両方とも ffdshow Video Decoder でした。 DirectShow フィルターとかコーデックとかよく分かってないから、なかなか 難しい。やっぱりこの辺でうまく行っていないんですよね。。。 エロビデオを暗号化したいだけなのに。orz
ラムダ式で質問です delegate bool SampleDelegate01(int i) SampleDelegate01 sd01 = i => i > 5; と言う場合と delegate int SampleDelegate02(int i) SampleDelegate02 sd02 = i => { return i * i; }; では{}とreturnがあるかどうかの違いなのですが ラムダ式では返り値がbool型である場合、returnを省略できるという認識でいいのでしょうか? あと SampleDelegate02 sd02 = i => return i * i; こういう書き方をするとビルドが通らないのでreturnを書くときは{ }も付けないといけないということでしょうか?
{}はブロックだから、そのままでは返り値を持たないので、ブロック内でreturnをする必要がある。 しかし、i > 5やi * iというのは式で、返り値を持つ。
C#でフォームを作ってます。WPFではなく、通常のフォームアプリケーションです。 そのフォームに、リストビューを追加し、 そのアイテムの表示形式をカスタマイズしたいと考えています。 ただ、ListViewを継承しカスタマイズで可能なのか、自前で作るしかないのかわかりません。 アイテムの表示内容としては、イメージ、テキスト、プログレスバーを表示したいと思っています。 プログレスバーの表示ON/OFFは可能にしたいです。 上記のコントロールを作りたい場合、 既存.NETクラスのカスタマイズでは無理でしょうか?
オーナードローすればできるんじゃね
>>132 ありがとうございます。オーナードローですね。
調べてみます。
>>129 voidでも () => WriteLine() みたいな書き方({} 抜き)できるよ。
bool 以外でも、i => i * i って書けるし。
三項演算子で <条件式> ? <真> : <偽>で真の部分だけ実行させることってできないんですか? <条件式> ? <真>みたいなことをしたいんです・・・
ifでいいやん
いまどき三項演算子なんて使うなよ
そうだよ、条件演算子って呼べよ。
Process.Startで外部アプリ起動しようとすると、普通のメモ張とかFireFoxは起動するけど一部のゲームが DirectX関連でなんか問題あるらしく起動しないわ。 普通にエクスプローラとかからダブルクリックすると正常に起動するんだけど どうしたらいいか聞こうと思ったけどやっぱいいです。特に問題あるわけじゃないし。
>>136 条件演算子って、式なわけよ、値を返す式。
偽の側なかったら値返さないパスが出るじゃない。
真の部分を実行したいだけならそれは if 文の領分。
Listに対してさまざまなThreadがAdd/Removeするとき、ふつうlockするんだけど、そのListのインスタンスに対してlockしちゃだめ? List<int> _list public void Addするよ(int item) { lock (_list) { _list.Add(item); } } って、やっちゃだめ?
問題ない lockするオブジェクトが外から見えていないのなら
>>140 作業フォルダだろ。簡単に妥協すると進歩がないよボク
親クラスの引数なしコンストラクタを作らなくてもいい場合ってどんなとき?
パラメータが必要なコンストラクタしか使わないと決まってる時
例えば9行9列のint型配列の中に36という数字がいくつ入ってるかを知りたい場合はどうすればいいの? forを二重にしてカウントするやり方ではなくて、それっぽいメソッドがあったら教えてくれ
foreachを2重にするとかいうボケはだめ?
ジャグ配列ならLINQのSumとCountで行けるけど 多次元配列だとfor回すしかないんじゃね
array.Count(n=>n==36);
他のアプリケーションにC#経由でコマンドを飛ばしたり、マウスがクリックされたと送るにはどんなものが必要ですか?
sendmessage
あるWebサイトのサンプルでFormで、 private void OnPaint(object sender, System.Windows.Forms.PaintEventArgs e) { } ってメソッドがあったんだけど、これってなに? 人間ならユーザの定義したメソッドではないのは分かるけどC#はどうやってそれをわかり、WM_PAINTのハンドラであると理解するの? っていうかoverrider?overrideって書いてないけどオーバーライド?overrideキーワードって省略可能なの? それとも基底クラスのOnPaintのオーバーライドではない別の何か? すみませんよろしくお願いしますm(_ _)m
偉そう
overrideって書いてない以上オーバーライドじゃないのは明らか というかどう見てもユーザの定義したメソッド Control.OnPaintとは引数違うだろ
157 :
デフォルトの名無しさん :2011/06/08(水) 23:18:31.71
まだまだWinFormsは現役やで!
COBOLですら現役、VBといえばVB6な世の中で、 WinFormsが現役なのはある意味当然。
VBといえばVB6 流石にないわ COBOLは同意だ 基幹系は息長いよね
Win8でのVB6が見込み薄だから必死にリプレースしてるよ
>>162 それだったらコンポーネント使いまくってる会社おわってんな
まぁだめだったらVMWare+XPとかで動かすんだろうな
んだんだ
どこかのコンポーネントがWPFに移行してユーザーがキレ気味ってのもあったな 技術刷新って同時に金のネタでもあると思うんだけどなあ 変な保守契約するからだよ
>>165 >どこかのコンポーネントがWPFに移行してユーザーがキレ気味
ちょっとこれ覚えてる限りで詳しく
>>167 サンクス
書いてあることはもっともだ
ウチもまだWinFormsメインだしなぁ
だめだ・・・ 今のところ通常の事務業務アプリで並列つかう必要性を感じない めっちゃ実践で使ってみたいのに。。。。 制御系に振られた連中うらやましい くやすぃ・・・
>>169 並列?
非同期でなくて。
非同期なら、UIスレッドを止めないという意味でむしろ必要だと思うけども。
>>170 非同期は使ってるんですが、折角だから4.0からのparallel を試してみたかったんです。
何か使い道がないかなと模索してまして・・・
うん、思いつかない<Parallelの使い道。
コマンドプロンプトで実行しているとき プログラムから終了させるのではなく Ctrl+Cで終了させたときに特定の処理が行いたいのですが このような強制終了?のときにイベントを実行させる方法ってございませんか?
>>173 Console.CancelKeyPress
マウスカーソルを中心に縦横100pxの領域を拡大して表示する方法ってございませんか?
どこの部位かによるだろ。 自分のアプリの中なのか、デスクトップなのか、他のアプリの上なのか。
178 :
デフォルトの名無しさん :2011/06/09(木) 20:22:09.28
眩暈がして眠くてあくびが出たわ スゴイスゴイ
いやPexはすごいと思うぞ
おい、デュエルしろよ
Thread.Sleep(1000); これより高精度で1秒待機する書き方をご教示お願いします
低コストな方法はありません。 なぜってそれは無意味だから。 何で高々1〜数個のCPUコアしかないのに1つ以上のスレッドを持つプロセスが 何十個も同時に走るのか考えましょう。 そうすればなぜ無意味かが分かります。
[System.Runtime.InteropServices.DllImport("kernel32.dll")] extern static void Sleep(int dwMilliseconds); Sleep(1000)を試したところこれはThread.Sleepよりも制度が悪かったです
マルチメディアタイマーが一番精度いいんだっけ? それでも、非リアルタイムなマルチタスクOSって時点で限界が。
186 :
デフォルトの名無しさん :2011/06/09(木) 23:27:39.34
1秒とかでいいのならディスプレイの同期とか
SpinWaitでなんとか(ry …いや、なんでもない
精度がいいとか悪いとか、どうやって精度良く計測するの?
そりゃぁ精度のよいストップウオッチを持ってだな・・・
次は、そのストップヲッチの精度が気になるんですね、わかります
いや問題はストップヲッチの精度ではないんですよだから。 ストップヲッチ自体の精度はppmオーダー以上ある。 問題はWindowsの世界にはストップヲッチのボタンを正確なタイミングで押せる 住人がいないことです。
くそだなC#
193 :
デフォルトの名無しさん :2011/06/10(金) 00:19:51.91
>>192 というよりマルチタスクOSだと無理じゃないの?
OS抜きでみれば可能だろうけど
リアルタイムOS使えでFA
>>191 System.Diagnostics.Stopwatchってppmオーダー以上ある?
VS2010でbuttonボタンが押された場合特定のwebサイトを表示させたいんですが、どうすればいいの?
197 :
デフォルトの名無しさん :2011/06/10(金) 01:12:09.86
Gecko2.0を利用するにはどうすればいいでしょうか? Gecko1.9.2は、XULRunnerのランタイムに含まれる、 mozctlx.dll を参照設定することで利用できました。 しかし、XULRunner2.0には、mozctlx.dll が見当たりません。
>>182 現在時刻を保存しといて、1分経ったか比較しまくるとか?
>>187 越えられないコンテキストスイッチの壁w
間隔 30ms くらいのはず。
>>182 >>184 t = GetTime()
while (t < GetTime() - 1000) {
Sleep(1)
}
GetTime()と、Sleep(1)のループの精度の分だけ正確ではなくなるが、マルチメディアタイマーより安全。
GetTime()は15ミリ秒単位しか取れなかったかも知れないのでそれ以上正確には出来ないが、
最初から15ミリ秒のSleepだとその分だけばらつきが出る。
ちなみにC#は知らないのでC#で当てはまるかは分からない。
>>201 それは良くない
時間測定はQueryPerformanceCounter関数を使うほうが精確
StopwatchはQueryPerformanceCounterで実装されてるので.NETではStopwatchでいい
Stopwatchって時間を計るものでしょ? Sleepとは違うんじゃないのか?
201のやり方を取るなら、だろ 前後の文くらい読もうぜ
現在の時刻を1ミリ秒まで取得して、その時刻に1秒を足した値をセットする 時間になるまで待機させる 時間になったら実行 C#暦5ヶ月の俺でもここまで完璧な設計ができる
C#じゃなくてプログラミング歴自体が5ヶ月だったらすごい
すごいすご〜い
System.Windows.Forms.Timerクラスって何の為についてるのん?
Win32APIのSetTimerと同じものを使うため
>>208 一定の間隔で実行したい処理を実行するため
(厳密に同じ間隔ではなかったはず)
WM_TIMERの優先度が低いから 厳密どころかメッセージキューが混雑してると何時までたってもTickが来ない
結局フォームとコンソールではどっちで作ったほうが精度がいいって事になるのですか?
while (true){ } ループ中にESCを押したらループを抜けるというのはどのように書けますか?
>>212 余計な処理が入らない分、コンソールの方が厳密じゃないかな
>>208 そのTimerのTicksは必ずGUIスレッドで呼び出される(Form.Invokeとかしなくていい)のがメリット
代償としてメッセージキューの制限を受けてしまう(
>>211 )ので、必要がなければSystem.Threading.Timerを使うべき
>>213 Console.In.Peekを見張る
217 :
216 :2011/06/10(金) 12:42:32.56
ごめん嘘
亀だけど Windowsのタイマ制度変更して ManualResetEventインスタンスを作成 で、WaitOne こんな風に待機しても結構制度よかったよ
while (!Console.KeyAvailable || Console.ReadKey().Key != ConsoleKey.Escape) { }
221 :
219 :2011/06/10(金) 13:06:47.16
多分邪道だけど [DllImport("winmm.dll", EntryPoint = "timeBeginPeriod")] private static extern uint MM_BeginPeriod(uint uMilliseconds); [DllImport("winmm.dll", EntryPoint = "timeEndPeriod")] private static extern uint MM_EndPeriod(uint uMilliseconds); uint res = MM_BeginPeriod(1); uint res = MM_EndPeriod(15); System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false); mre.WaitOne(2); 実際にFAの制御でOSはXP 15mSec以下の精度が必要になって時間もないってことで 思いついたこの方法でやってみてそこそこの精度でたからいけるのかな?とはおもうけど・・・ ほかのプログラムが同居してたら影響あるからあんま通常の使い道ないんちゃうかと あとほかの割り込みとかあるとすぐ影響受けるし ホントはリアルタイムOSが理想なんだろうなぁ
Linuxだと完璧な精度で利用できるって事
「完璧な精度」という言葉に不安を覚えるなら、それは良い理系人間だ。
224 :
219 :2011/06/10(金) 13:37:27.82
書き込んで思ったが、日本語がグダグダだ・・・病んでるな 機械につぶされてくるわ orz 完璧ていうのが何を示すか知らないけど 完璧なんてありえないと思う
225 :
デフォルトの名無しさん :2011/06/10(金) 13:42:50.53
UTF-8のByte配列があるのですが、テストのためにそれをUTF-16に変換せずにそのまま String変数にキャストしたいのですが、可能ですか?
つ System.Text.Encoding.UTF8.GetString(バイト配列) こんな感じでいかがざんしょ?
227 :
デフォルトの名無しさん :2011/06/10(金) 14:07:14.98
ありがとうです。でもそれって、 System.Text.Encoding.UTF8.GetString(バイト配列) UTF8のバイト配列をUTF16のStringに変換してしまいませんか?
ま、シビアな精度が要るならデバイス側が能動的に動いてWin側はそれをモニターしたりコマンド送るべきだよな
229 :
デフォルトの名無しさん :2011/06/10(金) 14:18:33.01
たとえば"日本語"という文字列ですが、 UTF-8だとe6-97-a5-e6-9c-ac-e8-aa-9e UTF-16だと65-e5-67-2c-8a-9e になりますが、 "e6-97-a5-e6-9c-ac-e8-aa-9e"のバイト配列を作成してSystem.Text.Encoding.UTF8.GetString(バイト配列)すると UTF-16のStringになってしまいます。
Windowsじゃ15msの誤差があると考えていいのですか? 例えば、CubaseとかSonorなんかのシーケンサーで使われているタイマーなども誤差があるという事ですか?
>>229 そもそもstring型はutf16で文字列を表現する型なので当たり前です
utf8のstring型なんてものは存在しないのです
utf8のバイト配列なら存在しますけどね
>>230 QueryPerformanceCounter かなんかで取得しないとわからないんじゃないでしょうか?
OSに依存してるはずなんでXPや7などで違う値になるんでは?
自分はリアルタイムOSでない以上 おおよそ というのが正しいのかもしれないと考えています
まあUTF8.GetStringなんてメソッドだと勘違いするかもしれん
Vista sp2 32bit celeron 1.5hkz Stopwatch sw = new Stopwatch(); for (int i = 0; i < 10; i++) { sw.Start(); Thread.Sleep(1); sw.Stop(); Console.WriteLine(sw.Elapsed); } Console.ReadKey(); 結果 00:00:00.0003884 00:00:00.0008684 00:00:00.0017886 00:00:00.0028383 00:00:00.0040507 00:00:00.0045341 00:00:00.0054776 00:00:00.0064427 00:00:00.0092481 00:00:00.0093115 精度悪すぎwwwwwww
Cubaseというのは知らないのでググったけど、要するにオーディオ再生? Windows上で特別なハードウエア無しにリアルタイムで実行される保証は無いよ。 カーネルモードドライバでさえ、何時でも割り込まれる。 オーディオ再生の様な用途の場合、普通はオーディオレンダリングモジュールに数百ms程度のオーディオバッファがある。 そこのバッファが枯れないようにデータを突っ込んでやるだけ。 だから正確に指定された時刻で動作できなくてもほとんど問題無いよ。 「Windowsの時計は15ms誤差がある」というのは正確ではない。 「Windowsは正確に指定した時間に実行してもらう保証、メカニズムが無い」というのが正しい。 例えばあなたのオーディオデータ生成処理が10ms遅れて呼び出されたとしても、単に10ms分のオーディオデータを余計に作成すればよいだけ。 このときに時計をみて10ms遅れてるなって分かるよ。なぜなら時計自体に15msもの誤差はないから。 単に呼び出されるのが遅れる、あるいは15ms程度で他の処理にCPUを奪われるかも知れないと言うだけであり、 時計自体はそれなりの物を使えば正確だよ。
>>234 sw.Startの前に sw.Reset() いれてやってみた
Win7 SP1 C2Duo 2.1GHz
00:00:00.0007215
00:00:00.0001608
00:00:00.0005269
00:00:00.0006780
00:00:00.0004541
00:00:00.0005425
00:00:00.0005479
00:00:00.0005538
00:00:00.0002341
00:00:00.0006227
うぅん・・・
237 :
デフォルトの名無しさん :2011/06/10(金) 15:44:24.18
byte[] utf8 = { 0xe6,0x97,0xa5, 0xe6,0x9c,0xac, 0xe8,0xaa,0x9e, 0xe3,0x81,0xa7}; // "日本語で" string str = System.Text.Encoding.Unicode.GetString(utf8); こうやるとバイト配列がそのままstrになるのでそれをODBCドライバに渡したんですが、 ODBCドライバで例外が発生して処理してくれませんでした。UTF-16として不正な内容だから? そのまま処理してくれたらいいのに。。
>ODBCドライバで例外が発生して ・・・え?
>>237 > ODBCドライバで例外が発生して処理してくれませんでした。UTF-16として不正な内容だから?
例外の詳細すら貼らずに何言ってるのお前
>>236 確かに精度わるいね。
少なくとも1msはスリープしてくれそうだが160μsとかあるじゃん。
>>238 C#超関係ねえー
別スレッド立てて現在時刻見ながらポーリングすりゃいいだけだろ
プログラミング言語に依存しないようなモノの質問ってどういうところでしてもらうのが妥当なのかねー
244 :
デフォルトの名無しさん :2011/06/10(金) 16:14:23.81
すいません。例外は A first chance exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll です。
>>244 で、なぜこのエラーでその文字列が原因だと断言したの?
OdbcExceptionってだけじゃODBCの例外としかわからんな。
>>246 おぉ、ありがとう
俺が必要としていたワケじゃないんだけどねw
テンプレに加える…ようなことでもないのかなぁ。
>>244 それはコンソールに出力されてる奴であって例外の内容じゃねーし
とりあえず どのDBに どのODBCドライバで どんな接続ー処理なのか なんていうExceptionが発生したのか そん時の例外メッセージ 位を書かないといけないと思う エスパーいれば別だけど
System.InvalidCastException はハンドルされませんでした。 Message=指定されたキャストは有効ではありません。 Source=Test StackTrace: 場所 Test.Program.Main(String[] args) 場所 C:\Users\owner\AppData\Local\Temporary Projects\Test\Program.cs:行 13 場所 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 場所 System.Threading.ThreadHelper.ThreadStart() InnerException: こういうのを貼れ 発生した時に例外の詳細をクリップボードに追加を選べばコピーできるはずだ
>>242 ありがとうございます
すいません別スレッドを立てる所はどうやるのかわかりません
254 :
251 :2011/06/10(金) 16:33:58.20
しまったw
>>251 オーナーさん
何親切なことやってんすかw
>>252 とりあえず初心者ならBackGroundWorker使ってみては?
www
>>252 スレッド新規作成ボタンでつくるんだよ。
エロ画像も忘れずにな。
>>257 おい 本気にしたじゃねぇかwwwwww
掲示板のスレッドじゃなくてメトロノームのPG内部でのスレッドのことだろ?
メトロノームの動きと一緒にチチとか揺れるんならちょっとほしい・・・
性欲というのは技術の発展にかかせないものだ
つまり
>>259 採用
261 :
デフォルトの名無しさん :2011/06/10(金) 16:51:54.54
すいません、今実行環境が手元になくて例外の詳細が貼れません。 バイト配列の内容が原因だと考えた理由は、以下のb1で処理すると例外が発生しないのに、 b2でやると先のODBC例外が発生したからです。 byte[] b1 = { 0xe5,0x65, 0x2c,0x67, 0x9e,0x8a, 0x67,0x31 }; //UTF-16で「日本語で」 byte[] b2 = { 0xe6,0x97,0xa5, 0xe6,0x9c,0xac, 0xe8,0xaa,0x9e, 0xe3,0x81,0xa7}; // UTF-8で「日本語で」 string str = System.Text.Encoding.Unicode.GetString(b1);
ODBCのエラーが発生しているんだとしたら その場所で発生しているわけじゃ? SQL実行時に出てるんだと考えて そのデータを入れる先のDBの型やDBBCパラメータの型とのマッチングもあるんじゃないかなと
DBのクエリ投げてる時にパラメータをどのように指定しているのかの方が重要 そんなどうでもいい部分貼られても困るな
>>238 俺11年前にメトロノームを作ってソースもUPしたよ。特許違反の仮処分で消されたけど。
タイミングはディスプレイのタイミングにシンクロ。累積誤差とか画面のフレームレートに合わせれば問題ない。
DirectXで描画したっけ。
ビットマップをぱちっと割り当てると自動で伸張してくれるから意外とシンプルにできたよ。
すいませんネトゲやってました
>>264 >>265 えええええええええええええええええ
じゃあどうしたらいいいですか?
>>265 じゃあリズムに合わせておっぱいが揺れるのはOK?
特許料を払えばOK
ggってもそれらしい記事がないんだけどデマか?
>>261 もう遅いけどStringクラスとEncodingの関係が全然わかってないな
結局、C#っていうか.NETってどこで使われるの? 未だに、商用アプリケーションを.NETで作成してる会社なんて皆無みたいだし。 まぁ、LWなんて.NETで書かれたら、冗談じゃないが・・・
>>271 顧客専用のアプリならあるんじゃないかな?
表にでないけど会社の中で使うアプリとか
>>271 なにをいまさら
.NETはUIがすこぶる遅いからまず使われない
お前らIntel製のCPUとかSSDとか使ってないの?
UIが遅いかどうかなんて自宅警備員の仕事には関係ないでしょう?
いまどきのPCで「C#じゃ遅い」なんて、何か壮大なゲームでも作ってんのか
じゃあ社内システムとか何で作るの? まあ最近はwebが多いけどさ
webではASP.NETとかものすごい数の企業で採用されてるだろう。 最近じゃクラウドのクライアントとしてSilverlightとか
>>277 主としてC,従としてアセンブラ
ですけど、なにか?
男ならオペコード直打ちに決まってんやろ
ガキだと求人や言語の需要動向なんか見ないからな 自分の小さな世界の知識だけで使われてないよねとか言っちゃう
>>271 今更.NET自体をdisられても反応に困るからWinFX系あたりで煽った方がいいよ
>>283 ああすまん
ボーリングだった
さあググれ
動画プレイヤーにある時間を表すバーはツールボックスの何て名前の奴ですか?
チョコバー 欧米かっ
トラックバー だっけ?
choco bar とtrack barで探してみましたがツールボックスにはありませんでした C# バーで検索してもタイトルバーのほうがヒットしてしまいます
wpfだとSliderね
隠れてるだけとか
あああああああああああすべてのWindowsフォームって所のマイナスボタンを押したら出てきました ここにしか入ってないのですね
public void Test(){ IntPtr abc; } public void NNN(){ ここでabcを使いたい } Testメソッドで作ったIntPtr abcをNNNメソッドでも使いたいのですが クラスの頭にpublic IntPtr abc;と書いてNNNメソッドの中でthis.abcとやっても System.IntPtrは型ですが変数のようにしようされてますとかいろいろエラーが出てしまいます。 どのようにしてNNNメソッドで使いまわすことが出来ますか?
できません
できないというのは 穴掘ろうがパソコンを叩き壊そうがあなたに3点のダメージを与えようが自殺しようが無理だということです 選択肢は諦める、諦める、諦めるの3つです
諦めが付きません 何故出来ないのですか?
public IntPtr Test(){ IntPtr abc; return abc; } public void NNN( IntPtr abc){ } 使うとき IntPtr n = Test(); NNN(n);
スコープの概念から教えるのはさすがに嫌ズラ。
いや普通にできるから。 できないのは自分で言ってる通りのコードになってないだけ。
クラスのフィールドかプロパティにする。
(クラス、フィールド、プロパティについては検索しろ)
>>298 みたいに返り値と引数を使う。
(返り値、引数については検索しろ)
明日の朝まで粘ってみます
最近プログラマーに向いてない質問者が多いな
304 :
デフォルトの名無しさん :2011/06/11(土) 01:29:47.09
プログラマに剥いてない回答者も多いしな。
剥けてないぐらいの年齢なんだろう。
306 :
デフォルトの名無しさん :2011/06/11(土) 02:28:04.49
若いな。
ビデオのリモコン操作出来てすごいって婆ちゃんに褒められた 次はF#ですよ〜 檻の中でもっと開き直って仲良くしようぜ まあ農家の人から見ればF#作っても所詮電気の檻の中にしか見えないだろうけどw
VS2010で#regionを緑で表示することってできますか?
309 :
デフォルトの名無しさん :2011/06/11(土) 06:13:41.78
C#で作れる作物は多いですか?
>>308 オプションで色は変えれるけども。
うち、英語版だけども、Environments の Fonts and Colors ってページで。
#region ってどれになるんだろ。
#region 自体はプリプロセスディレクティブ、
その後ろの文字列はたぶん、コメント
折りたたんだ時のテキストは、折りたたんだテキストみたいな項目なんだろうけど。
>>309 米とか麦は作れないよ
作物に虫がついたりするから気をつけて
Button(開始用)を押すと while (true) { 処理 } をするのですが もう一個のButton(停止用)を押して処理を中断させたいのですがボタンが押せなくて何も出来なくなってしまいます どうやってButtonで停止させられますか?
>>313 While以降を別スレッドで実行してください
Buttonは停止できない、処理は停止できます。
停止用のボタンが無いにしても同じスレッドでやるべき処理じゃねーな
ありがとうございます こうかいたら開始と停止もうまく出来ました。 一応ちゃんと動いたのですがこれで問題ないでしょうか? private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void button2_Click(object sender, EventArgs e) { backgroundWorker1.WorkerSupportsCancellation = true; backgroundWorker1.CancelAsync(); backgroundWorker1.Dispose(); }
もう1回Button1押したらどうなるかな
気づきませんでした 「BackgroundWorker は現在ビジー状態であるため、複数のタスクを同時に実行できません。」って出ます スレッドがちゃんと閉じられてないってことでしょうか 右下のイベントプロパティでRunWorkerCompletedを追加してForm1.csで現れたRunWorkerCompletedのメソッドにメッセージボックスを書きましたが表示されなかったのでスレッドは終了されてないってことですね private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("スレッドの役割は終えました"); } BackgroundWorker1.WorkerSupportsCancellation = trueをコードから消して右下のプロパティでtrueに設定してみましたが状況はかわりませんでした とここまでレスを書いてもう一度粘ってみました そしたら if (bgWorker.CancellationPending) { //キャンセルされたとき e.Cancel = true; return; } って書いて解決しました
backgroundWorker1.Dispose();は書く必要ありますか?
Disposeは親のFormが呼ぶからこの場合は要らない 呼んでもいいけど あとbutton1_Clickの方ではIsBusy==falseを確認してからRunWorkerAsyncを実行する そうすれば「BackgroundWorker は現在ビジー状態であるため、複数のタスクを同時に実行できません。」は発生しない。 button2_Clickの方ではIsBusy==trueを確認してからCancelAsyncを実行する WorkerSupportsCancellationはそこに書くよりデザイナのプロパティで設定しておけ
ありがとうございます 自分のローカルのまとめwikiにメモしておきました
5分の曲があったとして、何秒ずれなきゃ納得するんだ?
>>324 意味不明だねw
たぶん言ってる本人がよく分かってないんだろう。
まあ、あえて邪推すれば、個別のイベントの間隔の正確性は低いが
イベントの間隔の平均値(いいかえると時間当たりのイベントの回数)の
正確性は十分高いと言いたいのかもしれない。
きっとヒストグラムとると分散は大きいけど、平均値はきっちり目標値に一致するんだろう。
それは、そのはずだと思う。
全然そういう意味の日本語にはなってないけれどw
BPM120で5分流したとするとの場合だと 120*5=600なので誤差が0.02msだったら 600*0.02=12秒 5分流して12秒か・・・・ 5分で出来れば1秒以内に収めるのって厳しいですかね?
うるせーから理論計算してねえで試せよ
いやだから、そんな風に誤差は累積しないのですよ。
C#でやるのが間違いだろ こういうのはCで作るんだよ 考えてみれば分かるがC#で作られた優良DAWソフトなんてないだろう? 世間で登場する優良DAWソフトは皆Cで開発されてるからなのさ C#なんてクソ言語で作るのが間違い
トータル時間として誤差があり、だいたい等間隔 トータル時間として誤差が無く、だいたい不等間隔(誤差なんて感じられるほど無いが) C#でやるなら二つの方法があるわけで、好きな方を選べばいいよ
var s = TimeSpan.FromMilliseconds(1000 * 60 / 120); var a = DateTime.Now + s; while (true) { Thread.Sleep(1); var b = DateTime.Now; if(a < b){ Console.Beep(); Console.WriteLine(b.Ticks); a += s; } } これ5分回してみ
>>327 タイマーイベントで処理して、またタイマーイベントで処理・・・
って繰り返せばそりゃ誤差は蓄積する。
正しいのはスレッドをつくって常に時計を監視させること。
その間Sleep(1)で1ms程度のウエイトでループさせる。
このループは1msを正確に寝るためにやるんじゃなくて、ビジーループにならないようにするためにやる。
じゃないとCPUが100%に張り付いてしまうからね。
そしてそのループで毎回時計をみる。
時間になってたらならす。そしてまたループの先頭にもどる。
これでよい。
参照すべき時計だが、
>>234 ,236の実験にあるように確かに1ms以下の誤差がある
(どこから10msくらい遅れてるって話がでてくるんだ?)
この1msの誤差は上記の方法でやれば蓄積しない。
音を鳴らすタイミングが、本来のタイミングから1ms程度前後するだけ。
そして、人間には1ms以下の誤差なんかまったく分からない。
リンク先の話は、多分映像が30フレームなんだろう。その場合最大で33ms遅れるはず。
これの平均が22msなんじゃないのかな。
音声の場合はもっと1フレームが短い時間なので、よりズレが小さいという話だろう。
>>332 横からすいませんが
634 434 142 622 756 619 - 634 434 142 617 756 619 = 4 999 936
4 999 936って4.999936秒って事?
メトロノームなら単純にデルタタイムで実用範囲と思うんだけど、 絶対時間監視してまで最小蓄積誤差を目指すのはプログラマーの意地? シンクロナイザー作ってるなら理解できるけど。
>>336 プログラミングが難しいならともかく、手法があるわけだし
不要な誤差を入れ込む必要が無いじゃないか
そもそも難しくもなんともないし
C#ちゃんはファジーなんです
マルチタスクOS上でシビアなことするなよ マイコンで作るとかしろ
それでも機械式メトロノームよりは正確じゃね? 俺はあのおもりを正確にあわせる自信は無いぞ
マジレスすると、機械式の方が正確 ちょっと考えれば分かるだろうが
数千円のクオーツ腕時計と 数百万円の手巻き腕時計 どっちが正確かって ちょっと考えれば分かるだろうが
機械式って結構狂うよ
機械式はまず水平を出すのが難しい
あぼんばっか
オブジェクト型のインスタンスobjについてobj.getType().IsArrayがtrueの時objを配列として扱いたく object[] ary = (object[]) obj; foreach (object o in ary) { Console.WriteLine(o.ToString()); // などの処理 } としたところobjがstring[]や自作クラス[]の場合はうまく動いたのですが intなどのプリミティブ型の配列ではうまくいきませんでした。 >型 'System.Int32[]' のオブジェクトを型 'System.Object[]' にキャストできません。 以下の様に全てのプリミティブ型について分岐させるとうまくいったのですが、もっと良い方法はないでしょうか? object[] ary; if (obj.GetType().FullName == typeof(int[]).FullName) { int[] tmp = (int[])obj; ary = new object[tmp.Length]; for (int i = 0; i < tmp.Length; ) { ary[i] = tmp[i]; } } else if (obj.GetType().FullName == typeof(double[]).FullName) { double[] tmp = (double[])obj; ary = new object[tmp.Length]; for (int i = 0; i < tmp.Length; ) { ary[i] = tmp[i]; } } else { ary = (object[])obj; }
初めてやるプログラミング言語としてC#は敷居が高いのでしょうか? ほかのスレでC#をやるのはCやC++を学んでからやるべきと書かれてあった のですが?
列挙してToStringするだけなら配列じゃなくてIEnumerableかどうかのチェックして IEnumerableとして扱うのでもよいのでは?
>>345 数百万の時計のほとんどはデザイナーの意匠代に掛かってるんだよね
それはどういう理由でCやC++を学んでからと書いてあったんだ?
C#って入門に最も適した言語の一つだと思うのだが
必ずしも「洗練されているも」=「学びやすい」ではないとは思うけどね。 Cみたいな低水準を一度経由してからの方が回り道のようで結局近道のような気もする。 教育者じゃないんで気がするだけで確証はないが
C#はワリと整った言語なので入門に適してないわけではない。 ただ、ステップの組み方で大ジャンプしたいタイプだと大変。 覚えることはたくさんあるからね。
敷居の高さで言ったら明らかにC>>>C++>>>>>>C#だろうな。 CやC++をやった方が、C#が隠してくれている様々なソフトウエアの事情を飲み込めるってだけだろう。
C#をやって実際に色々作れるようになるのがイイ。 細かい部分、より内部的な部分がどういう仕組みになっているかを知るにはCをやるのがいいが、 それゆえCをやると細かい部分を沢山覚えて見に染み込ませないといけない。 もちろんそれが知りたいのなら良いんだが、プログラミング初挑戦の人が ちょっとやりたい事がある、とか小さなアプリケーションを作りたい、という気持ちで取り組むと やりたい事とは遠く離れた関係にあるCの構造に囚われてしまって、やる気が無くなる。というケースを何人か見てきた。
>>351 C#とC/C++は見た目似てるけど中身は結構違う。
C#からやって問題ない。
いつも思うけど、ポインタ、というかコンピュータがメモリをどう扱うかを理解してない人が 参照型の意味をどう理解するのかは興味深いところではある
いや参照型とポインタはまったく別だから
何が「いや」なのか意味が分からない。 接続詞の正しい使い方を知らないのか、そもそも読解力がないのかその両方か
これが揚げ足厨か
まぁ反論できなくても言葉尻を叩くのは簡単だからな
反論も何も、参照型=ポインタなんだからww お前ほんとにC言語やったことあるのか?
C#の参照型もC/C++のポインタも参照という仕組みではあるよね ただ中の動きは違うかもしれない そういう細かい話はこの際いいよ
C#の参照型はCのポインタに構造原理的等価意味をもつ これは国際公式言語機関でも規定されている*事実*です
C/C++のポインタは値だよ
じゃあ参照型をインクリメントすると、その型のサイズだけ後方のメモリをさすの? と聞いてみるテスト
ポインタが参照だとか言ってる素人に聞いても無駄
ポインタはコンパイルされるとC#の参照型になるんだが… お前はILを知らないのか?
まあ、Cみたいな低水準言語が不要とは言わないけども、 そういうのは「副読本」的に見るべき。 メインをCにすると何もできん(Cの水準で簡単にできることしか覚えられない)。
Cのポインタは記法が糞なのであって概念自体は大したことない。 どうしてもわからなければ「プログラムはなぜ動くのか」あたりの本読んどけば大丈夫。
参照型とポインタは同等ということで決着がついたみたいだな
参照は「safe pointer」だと思うべき。 ポインターの何がいけないって、数値としてそのまま扱うこと。 意味不明のアドレス値の先を書き換えれたり、 有効な領域を超えて加減算できたり。
377 :
デフォルトの名無しさん :2011/06/12(日) 01:14:22.07
やたら比喩に噛み付くな じゃあC#の参照を理解する(させる)際はどうやって説明してるだろうか
困ったもんだね。
>>361 (まあイコール俺だが)に仮に参照型はポインタだという含意があれば
>>362 は少なくとも会話としては成立している。
が、
>>361 にそんな意味を読み取るとしたら、そいつの言語感覚は小学校からやり直したほうがいいレベル。
その意味で
>>362 はナンセンスだけど、それでもあえて話に乗っかるとしても、
参照型がポインタといえるかどうかは「ポインタ」というふり幅の大きい言葉を
どう解釈するか次第だろう。
2chってたまにこういうエセ国語教師が出てくるよな
>>378 小学校からやり直したほうがいいレベル。
困ったもんだね。
>>361 (まあイコール俺だが)に仮に参照型はポインタだという含意があれば
>>362 は少なくとも会話としては成立している。
が、
>>361 にそんな意味を読み取るとしたら、そいつの言語感覚は小学校からやり直したほうがいいレベル。
その意味で
>>362 はナンセンスだけど、それでもあえて話に乗っかるとしても、
参照型がポインタといえるかどうかは「ポインタ」というふり幅の大きい言葉を
どう解釈するか次第だろう。
長文w
ポインタっつったらよー、*とか&使ってあれこれ操作するのも含まれてるだろ。 そんなの知らなくてもメモリの仕組み知ればC#の参照型は余裕で理解できるわけよ。 Cなんか学ばなくったってオッケーオッケー
参照型をインクリメント!!!!!!!
LINQいいよね〜
386 :
264 :2011/06/12(日) 01:39:21.34
>>343 刻みがあるからこつんと止まる
画面のリフレッシュレートはハードウェアが画面を書き換えるタイミングで割り込みいれてくれるから絶対正確だよ。
少なくともパソコンではそれ以上に正確にやる方法はない。
ttp://www2.tky.3web.ne.jp/~yosshin/prog_memo/vsync/010815.html > vsync API の問題
> vsync はフルスクリーンモード時のみ可能
> DirectX には vsync を取る API が提供されています。 例えば DirectDrawSurface の Flip メソッド等には、 vsync の有無を引数で指定可能です。 ただしこれはフルスクリーンモード時のみ有効です。
知らんかったわ。窓モードだからちゃんと拾ってなかったのか・・・
> もう一つの vsync 問題解決方法 「冲 可変」
> ここまでで挙げてきた手法は、 ゲームプログラム側で意図したレートで vsync を行うことを前提としていました。
> これとは逆に、モニタのリフレッシュレートは可変であるという前提に立って、 ゲームの中の時間進行自体を、 モニタのリフレッシュレートに合わせるという手法があります。
>
> ゲーム内の 1 フレーム分の時間は、 一般に冲(デルタ ティー)と言います。 前者の、 ゲーム内の 1 フレーム分の時間は一定とするスタイルを「冲 固定」、 可変とするスタイルを「冲 可変」、 と言います。
>
> 冲 = モニタのリフレッシュレートとする「冲 可変」スタイルを採用することで、 一連の問題は解決することになります。 ただし実装の難易度は上昇しますし、 関連する様々な問題が発生してしまうので、注意が必要です。
>>333 > そして、人間には1ms以下の誤差なんかまったく分からない。
いや分かるし。
テレビが29.97fps x 2(インターレース)なのは、それくらいは余裕で感じ取れるからですが、
人間は目よりも耳の方がタイミングがシビアなんですよ。
0.4ミリ秒の差で聞こえてくる方向を感じ取ったりするらしいですから。
ttp://www.geocities.co.jp/SiliconValley-Oakland/6575/co/96.html
なにコイツきもい
>>386 両方の耳から入ってくる音のズレは分かっても10回メトロノームが音頭をとる間隔が1ms違ったって分からないよ。
試しに10回のうち1回だけ1msわざと遅らせてみてその間隔の違いを言い当てることが出来れば納得してやる
389 :
264 :2011/06/12(日) 01:48:16.65
>>388 言い当てられるよ。できるから言ってんだろが。
まじ?すげーな。
言う事はでけぇよなぁw 実際にどっかでやって見せてほしいね
392 :
264 :2011/06/12(日) 01:53:20.88
>>388 言われてみればそうかもな。
感じ取れる人はよっぽどすごいだろう。
しかし、WAVデータの量はきっちり時間分存在するわけで、ズレた分だけどこかで埋め合わせしないといけないんだけど、どうする?
そう言えば音ズレが発生するのってちゃんと音はつながっているけどどういうことなのかと。
>>386 なんかいろいろ痛い人みたいだけど、それは人の脳の低水準の部分が位相差(位相って分かる?)を
検出しているのであって、必ずしも時間差を検出しているのではないし、
まして人が意識的にそれを感じられるということでもない。
キモイwww
397 :
デフォルトの名無しさん :2011/06/12(日) 02:18:27.57
398 :
デフォルトの名無しさん :2011/06/12(日) 02:27:51.63
メトロノームさんちわーっすw
あ、常に時計を見る方法は気をつけたほうがいいよ。 Windowsは定期的に時計を修正するから。 RTCに合うように調整する。
こだわりのある人って素敵だと思います。
せやな
地下鉄営団メトロ濃霧
visualstudioで新規プロジェクトつくるときにコードの最初にusing〜ってのが並んでるけど 新規プロジェクトのデフォルトの設定としてあれに足したり引いたりすることってできる?
できるよ
405 :
デフォルトの名無しさん :2011/06/12(日) 04:11:44.06
どっちかのスレで以前みたな テンプレート作るんだっけ?
テンプレートのエクスポートできた ありがとね
>>350 値型の配列をobject[]にする場合にはboxingする必要があるから、
配列の要素を1つずつコピーするのは避けられない。
せめてGenericやLinqを使ってスマートに書こう。
using System;
using System.Linq;
class Program {
static void Main() {
object [] oar0 = new string[] { "a","b","c","d","e","f","g" }; // 参照型はそのまま代入可能
object [] oar1 = MakeBoxingArray(new int[] { 1,3,2,4,3,5,6 }); // 値型
object [] oar2 = MakeBoxingArray(new double[] { 1.2,3.1,2.2,4.8,3.0,5.3,6.2 }); // 値型
}
static object [] MakeBoxingArray<T>(T [] ar) where T : struct {
return ar.Cast<object>().ToArray();
}
}
目的が分からないから的確なアドバイスはできないが、
Genericを使えばobectの配列にする必要自体がなくなるような気がする。
定数ってどのように記述するんでしょうか
const
stringが参照型であることはぐぐれば分かる事実だが さりとてstringをポインタとは言わないんじゃないかね
そういう指摘をすると国語の話にすり替えられるぞw
例外さんの相手なんかすんなよ ばかかおめーら
例外、Nullable、統計的結果、100倍、ClickOnce
825 名前:デフォルトの名無しさん[sage] 投稿日:2011/01/10(月) 12:49:11
>>823 どこにインストールするかは本質的な問題じゃなくて、
OSは「問題の有無を判断すべき(できる)ユーザ」にだけ判断をさせる思想で
作ってあるのに、それと矛盾することをやっていいのかよって話。
829 名前:デフォルトの名無しさん[sage] 投稿日:2011/01/10(月) 13:05:57
>>825 OSはユーザーの権限内であれば何やってもいいように作ってあるだろ
頭おかしいの?
832 名前:デフォルトの名無しさん[sage] 投稿日:2011/01/10(月) 13:19:10
>>829 判断力のないユーザーがインストールしたソフトが、そのユーザーが権限もってる
ディスクのデータを全て破壊する物だとしてもか。
834 名前:デフォルトの名無しさん[sage] 投稿日:2011/01/10(月) 13:20:55
>>832 そんなのバッチだって作れるだろ
ワラタ
そんだけスレ住人の新陳代謝が激しいってこった
メトロノームさんw
メトロノームじゃなくてポインタ云々の人のことだと思うよ。
俺も参照型=ポインタだと思っていた時期があった。 つまりそういうことだ。
>>388 DTM板で質問してこいよ
違いが分かるやつ挙手ってな
このスレ的には何が一番精度をよく繰り返し処理を行える方法が書けるの?
P/Invoke使ってるわけでもないのにC#でポインタを気にするのは愚の骨頂 概念と実装の区別がついていないと言える
メトロノームさんも参照型さんもどっちも糞だわ
.net4.0でIntPtrとintの加減算ができるようになって微妙に便利。微妙にだけど
やたら括弧が多いのと、「ナンセンス」って単語が好きなんだよね。
なんかここの住人て、未だにXpがメインて人が多そうw
Arduinoでググれ あっという間にマスターできる。
こんにちはマイコン
Arduinoを買えばメトロノームで精度を完璧にできるのでしょうか?
その完璧という精度の許容範囲は?
>>426 うーん、面白くないかな^^;
もうちょっと頑張りましょう^^;
マイコンなら完璧だよ
>>430 完璧がどの程度の精度かにもよると思んだけど。。。
メトロノームみたいな単純だけど精度を求めるものなら、プログラムならマルチスレッドよりシングルスレッドの方がスレッドのスイッチングが無い分、精度が高く作れる
cpu資源を他のプログラムに使われたく無かったら、そもそもシングルタスクOSとか、組み込みの世界になっちゃうし、厳密に言えば少しのズレも無いメトロノームは理論上作れない
その用途において必要十分な精度で作れるか。を基準に考えては?
もはやモノを買うべきだと思う 無駄な努力の部類
メトロノームの説明書に精度の誤差が±で書かれているのはそういうことだったんですね
人の話をきかない、聞く気が無い、という事はわかった
>>438 そうです
精度は数字の上では単純ですが、リアルに精度を求めると、電子の動きさえもコストとして重くのし掛かって来ます
企業が誤差を認めてるんだから作れるわけないか 完璧なものなんて作れないって事ですね もう妥協します
完璧な文章などといったものは存在しない。完璧な絶望が存在しないようにね。
>>430 マイコンを使おうが完璧には作れないのでデマ回答を鵜呑みにしないでね
作れないというのは暴言だな セシウム133原子の2つの超微細準位間の遷移に対応する放射を周期数9192631770回カウントする装置を作れば一秒が正確に求められるし 正確にそのカウントを分解すればテンポが得られる たかが下手くその楽器あそびにそこまで金を出したければの話だがな
つまんね
>>444 それすらも精度が高いだけで、厳密に言えば正確じゃないし、読み取るセンサーの時間からも誤差生まれるし
これが本当のナンセンスだぜ 覚えとけよ
ttp://www.nikkei-science.com/beyond-discovery/gps/07.html 今日,多くの原子時計はセシウムではなく,光で励起したルビジウム原子を使っている。
ルビジウム時計はセシウム時計よりもかなり低価格で小型だが,正確さは劣る。
原子時計のもう1つの種類は,水素メーザーとして知られている。
タウンズが開発した最初のメーザーはアンモニアを使っていたが,
ハーバード大学のラムゼーらは1960年に水素を使い,超高精度の原子時計として働くメーザーを開発した。
1967年までに原子時計の研究は非常に実りある成果をあげ,
時間の単位である「秒」がセシウム原子の振動に基づいて定義し直されることになった。
今日の一般的な原子時計は10万年に1秒の狂いが出る程度の高精度だ。
米国の時間標準は米国立標準技術研究所で最近稼働を始めた原子時計「NIST-7」で,
その推定精度は300万年に1秒の狂いしかないほどだ。
ttp://www.phileweb.com/news/audio/200301/28/3612.html ただしセシウム原子時計は高価で、購入するには1,000万円以上が必要となる。
本機はコンシューマー向けモデルとして、低価格でセシウム原子時計に近い精度を実現した。
その秘密は、最近増えてきている電波時計用の電波を使用することにある。
日本では、福島と吸収から40kHzと60kHzの搬送波が発信されているが、
本機はこの電波を常に受信してクロック源にするのだ。
CRV−555 メーカー標準価格 ¥85,000(税別)
ABS−7777 メーカー標準価格 ¥250,000(税別)
なんだ電波時計で正確なクロック出るんじゃん。
自作もできるらしいが・・
ttp://www.h2.dion.ne.jp/~hayakawa/dempa.html でも電波は不安定だからね。ノイズで拾えないことがあるから、電波をそのままクロックにすることは出来ないだろ。
どこかでひずみが出る。それなら水晶発振子の方がマシ。温度と電圧さえ一定にすれば安定する。
あとはどうやってプログラムを呼び出すかだ。普通にハードウェア割り込みだろうけど、レガシーハードウェアだと優先度低いから、
やっぱりVGAのV/H syncを発生させるのが一番正確で汎用的だ。
アホ過ぎw
syncが正確という根拠がよくわからん 正確さが保障されてんの?
幻想だよね 仕様上そういうことになっているというだけ 実装上はどうだかわからない
”吸収”はともかく、福島の電波は復活したの? やめてくださいしんでしまいますってくらい災難にあってたが
答えになってませんね
>>452 復活してるよ
1回復活してから落雷で死んだけどまた復活した
たすけてください usingは using System.Collections.Generic; using System.Windows.Forms; using System.IO; コードは IEnumerable<string> files = Directory.EnumerateFiles("C:\\folder","*.txt"); for (int i = 0; i < files.Length; i++){ MessageBox.Show(files[i]); } エラー 1 'System.Collections.Generic.IEnumerable<string>' に 'Length' の定義が含まれておらず、 型 'System.Collections.Generic.IEnumerable<string>' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。 using ディレクティブまたはアセンブリ参照が不足しています。 エラー 2 角かっこ [] 付きインデックスを 'System.Collections.Generic.IEnumerable<string>' 型の式に適用することはできません。 ってエラーが出ますたすけてください
こいつも病気っぽいからほっとけ 幸いメトロノームは妥協する方針で終わったんだから
>>456 配列でファイル一覧が欲しい時はDirectory.GetFilesを使うんだよ
Directory.EnumerateFilesで取得した時はforではなくforeachを使おう
foreachでエラーがなくなりました ありがとうございます この機会にお伺いしたいのですが string[] files = System.IO.Directory.GetFiles("C:\\folder", "*.txt", System.IO.SearchOption.TopDirectoryOnly); と IEnumerable<string> files = Directory.EnumerateFiles("C:\\folder","*.txt"); ってどっちが早いですか?
自分で測れば?
>>459 string[] files = System.IO.Directory.GetFiles("C:\\folder", "*.txt");
=
string[] files = Directory.EnumerateFiles("C:\\folder","*.txt").ToArray();
だと思っとけ
「そのコードだけなら下だが、列挙時には下の方が時間がかかる」って感じだと予想
まあ、内蔵時計もハードウエア割り込みだけどな
6コア付いてるCPUがあれば2コアを時刻を見るために使わせて1コアでメイン処理をしたら最強
>>463 いつからユーザーアプリがHW割り込みなんか拾えるようになったんだ?
それともまだDOSの時代の延長だと思ってる人?
>>466 Application.EnterThreadModalイベントでどうにかすれば何とかなるはず。
AtomのCPUコアを省電力機能なしでぶん回して
現在何クロック目の命令なのか、0秒0番目からの通し番号で分かったらいいんじゃないかな。
1秒ごとに0から振りなおすとして、
32ビットあれば4GHzまで、つまり1ナノ秒以下まで正確に時間を測定できるようになってはかどるぞ。
でもそれってGetTimeの実行と何が違うのかと言う話にならなくもないか。
やっぱそのタイミングで関数を呼び出してくれないとな。
でもキャッシュメモリに入ってないと遅れるから・・・
いや待て、Windowsはクロック周波数を元にしてシステム時間を作り出してるんじゃなかったっけ。
だからRTCとのズレが生じるので修正が入る仕組みだったはず。
Widnowsのシステム時間を使うと当然ずれてくる。
しかしRTCタイマーを使うvsync割り込みはCPUのズレとは無縁だからやっぱり正確だろう。
OS自作部屋
ttp://kozos.jp/kozos/kozos34.html > ということで結論としては,厳密なリアルタイム性が必要なタイマは,ハードウエアが持っているRTCをそのまま使うしかない.
ttp://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF 現在のOSは起動時にリアルタイムクロックを読み取って、CPUの高精度タイマーの精度を校正し、以後リアルタイムクロックから時刻を読み出すのではなく、高精度タイマーのカウンタ値によって時刻を保持している。
これはRTCの時刻精度がおよそミリ秒が限度なのに対して、高精度タイマーはナノ秒からピコ秒の精度をもっており、より正確な時刻管理が出来るためである。
時刻が知りたければCPUから、トリガーを使いたければRTCからってのが一番みたいだ。
だから、OS上のアプリの上にいつからISRを書けるようになったんだ。 寝言は寝て言えよまったく
あえて無視してるんだろうけど vsyncがRTC他のクロック発生源よりも正確だという根拠は無いわけか
まだやってたのか。お前ら暇なんだな。
>>470 それは割り込みを拾ってるんじゃないでしょ。
ISRはあくまで特権レベルで走ってるOSの内部にあって、そこから間接的に
通知してもらってるだけ。
だから本当にイベントが発生してからそれがユーザーアプリに通知されるまでの
レイテンシはまったく当てにならない。
>>326 にあるように、個々のインターバルの分散は大きくても平均値は正確に真値に
収束する、という意味では正確ではあるが。
>>473 まあVsyncを使うアプリ、ドライバなど殆ど無いから、処理がスカスカで他より正確だとは思うよ
> まあVsyncを使うアプリ、ドライバなど殆ど無いから
それは無関係。(
>>183 )
思ったけど完璧な精度ってないよな BPMが60やら120やら180などなら割り切れるが 90とか155とか割り切れないもんな 60 / 155 = 0.387096774
>>471 いや、俺AV視点だから。システムタイムとRTCをごっちゃにするとずれていくだろ。
映像ソースがモニタの周波数に合うことなんてまずないから、vsyncを使うとしても普通にタイマーは使わないといけないだろう。
でもタイマーは精度が低い。
そのズレが1フレームのズレを生む
> 例えば60Hzであればレスポンスは16.6msということになる。
それが日付と時刻のプロパティ画面の秒針みたいな揺らぎにつながるんじゃないかと。
>>473 あなたは何を期待してんの?あなたが書くプログラムはクロック数まで正確に実行できるわけ?
呼ばれるタイミングが完璧に等間隔になったら、あなたのプログラムは完璧に等間隔で完了できるの?
>>477 いやむしろ、君以外の人のほとんどが君が何を期待してるのかよーわからんと
思っていると思うんだけど....
長々と何を書いてるの本当。
俺は君が正確だと思い込んでいるものを、そうではないよと言ってるだけ。
発端はメトロノームじゃなかったっけ 5分動かしてズレなきゃいいんだよ それをAV視点だとかわけのわからん事をほざいたり、なんなの?
違うよ17分に1カウントずれればいい程度
>>433
世の中の時間の流れを自作メトロノームに合わせればいいんだよ
BPM120なら0.5秒 アホな書き方しなければそんな蓄積するわけがない
卓上の理論だけ言われても説得力ない
元の質問者は、それでも納得いかなかったってだけだよ
とりあえず、C#全く関係ない話なんで、そろそろよそへ行ってくれ
とっくに話は終わってるわけだが
ttp://www.gazo.cc/up/42503.jpg フォームにsplitContainarを置いてdockをFillにします
panel1にlistboxを置いてdockをFillにします
そうしてデバッグしてプログラムを実行するとlistboxの下のほうにスペースが空いてしまいます
フォームデザインのほうではスペースが空いてなかったのに実行したやつだと空いてしまいます
解決する方法をご教示お願いします
全員で「うぜーから他行ってくれ」って安価付け続けたらいなくなるよ
CDの記録時間は74分だったが、なぜそうなったかと言うと、カラヤンがベートヴェンの第九が入るようにと言ったからとか。
Windowsの時計調整が入るようなものを使うと、再生中におかしくなる瞬間があるだろう。
AV関係は永続的じゃないと。
その上でずれがないほうがいい。
>>433 僕はワイヤレスのスピーカーに置き換えるといいと思うんだ。
音を出すのが一つの機械なら、ズレなんて発生しない。
Bluetooth対応スピーカーは1対1でしか通信しないっぽいけど
Googleがクソ重くて頭にくる
FMトランスミッターで飛ばしてFMラジオで受信すれば複数スピーカーになる。
>>487 これはデザイナーの挙動の方がおかしいから解決ってのはない
あほだな。俺普段ここいないからすルーしとけばいいのに。
>>491 そうでしたか
これはこういうものとして諦めるしかないですね
>>498 いやいや、今Dockの変わりにAnchorでやってみたが上手くいくよ。
ところでC#からLuaスクリプトの関数を呼んだり、その逆って出来ますか? C/C++なら関数が用意されてるんですが。
メトロノームの話で恐縮だが、定期的に音を鳴らすんならタイマーじゃなくて WAVデータを生成しながらストリーミング再生かループ再生するのじゃ駄目なの?
検索してもそんなDockバグ紹介してるブログにヒットしないのはなぜか?
>>503 ListBoxの大きさって、ListViewみたくリニアに大きさ変わらないよな
気になるならListView使うしかない
Anchorだと表示した瞬間はぴったりくっ付くが、その後は駄目みたいだ。
>>506 気にしないからだろ
うぜーから他行ってくれ
>>506 DockじゃなくてListBoxの仕様の問題だろ
>>507-508 なるほど確かに。
でもListBoxの枠線が無くてもOKなら、SpliterPanelのBackColorをWindowにしてしまえば
見かけ上は誤魔化せる。
上手く行った人はもしかしてMonoか?
そんなもん IntegralHeight を 切れば いいんじゃないか な
>>513 なるほど。
ListBoxなんてほとんど使ったことがないから知らなかった
すぐに答えが出ないという状態に絶望した
切ったらスペースが消えました ありがとうございました
>>487 は嘘を教えられて去ってしまった
かわいそう
よかった。 騙された人なんて、いなかったんだ。
何でニコニコ生放送が出てくるのか分からんけど、
>>502 の言うことは間違ってない。
音声データのHWバッファが空にならないことさえ保証できれば、サウンドカードの
DAの水晶の精度で正確なはず
質問者が求めていた精度なの?それって
問題は任意のStreamでストリーミング再生できるクラスが無さそうなことかな 仮にHTTP自己ホストするとしても管理者権限が必要だし
この初心者ってどの年代が多いのかな プログラミング何か始めたいんだけど、htmlで終わった大学3年が1年本気出したらどの辺までいける? 何を始めようかも決めかねているんだがw
http://www.atmarkit.co.jp/fdotnet/dotnettips/698scrollpic/scrollpic.html見ながらやってみました フォームにSplitContainarをおきました(DockをFillに設定)
Palel2にPictureBoxを置きました(DockをFillに設定)
右下のプロパティでPanel2のAutoScrollをtrue、pictureBox1のSizeModeをAutoSizeに設定しました
Form1.csのForm1_Loadにこう書きました
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.ImageLocation = "C:\\img\\101.jpg";
}
ここまでやって実行しました
画像の縦横が大きいのにスクロールバーが出ません
どう直したらスクロールバーが出来るようになりますか?
>>524 そりゃ、PictureBoxをコンテナにドッキングしてたらダメに決まっているのでは?
ttp://monolith-theater.net/hal/?p=5090 (100万分の1) :水晶発振
(10億分の1) :ルビジウム発振
(1兆分の1) :セシウム発振
>>520-521 単体で鳴らすなら水晶発振で問題ないんだけど、複数同時だと個体差が出てくるから
どの道、同期を取る仕組みが必要になる。
ローカルネットワークにタイムサーバー構えてこまめに時計あわせとか、
あらかじめ内臓時計のズレを測定してリアルタイムに自動調整するソフトとか。
でも、インターネットの通信は優先度低いからなかなか完璧にはあわせられないよね。
パケット受信と同時に時刻を取得して補正できるなら同報通信でぴったり合わせられるんだけど。
>>523 まずどこに就職したいか決めてからやらないと無駄。
あと、どっかの研究室とかで面倒見てもらわないと、どうせ何も身に着けられないで終わる。
>>526 お前はメトロノームでオーケストラでも作る気なのか?
メトロノームの質問してた本人が居なくなったのによくやるよなw
>>527 このスレに出た話に、集団で個人練習ってのがあったでしょ。そういう使い方。
あと、地デジテレビの同期。これホントちゃんとして欲しいなと。
隣の部屋に同じ番組でタイミングの違う放送やられたらかなわんわ。
アナログ+デジタルなら割とかなりタイミングずれるからそーでもないが・・・
>>526 もう個体差とか同期とか、何の話をしてるんだw
お前さんが自分の脳内で考えていることなんか誰も知らんって
というか水晶の精度を少し大きめに5ppm、人間が認識できる時間差をかなり小さめに
10msとしても、10msの累積誤差が個体間に生じるまでの最小の時間は
10 * 1E6 / 5 / 2 = 1,000,000 (ms)
だから、頭で同期を取る事さえ可能なら
>>502 で実用上問題ないはずだと思うがね。
もうおまえらメトロノームつくってうpしろ
>>529 それはYahoo知恵遅れの電子メトロノームの話じゃないの?
ノートPCのメトロノームで練習している奴すら見たことが無いのに、集団利用とか荒唐無稽すぎる
時間という概念
こんなにメトロ好きが多いとは知らなんだw
春日三球じゃあるまいし地下鉄に興味はないが
引っ越したから乗らなくなった
さーけーちゃーずーけー
Metro UIなんていいからさっさとLonghornを完成させろ
>>525 ありがとうございます
DockをnoneしてfromImageで表示したらできました
最初backgroundImage使ってたのですがこれがだめだったようですね
地下鉄地精
a1〜a99までの99個の文字列がランダムに配列の中に入っているとします string[] a = new string[] { 99個の値がここに入る } これをソートしたいのですが a1 a11 a12 略 a2 a20 とこんな感じになってしまいます これを a1 略 a9 a10 a11 略 a19 a20 のようにする方法はございませんか?
>> 542 array.OrderBy(x => int.Parse(Regex.Match(x, @"\d+$").Value))
>>542 axxを、aとxxに分解してxxを数値として判定
必ずaという文字一文字と決まっているなら、長さを比較した後に文字列比較する2段階検査でもいい。
どっちだか忘れたが、Comparer<T>かComparizon<T>を取るメソッド使えば
listboxのkeydownでgを押すと特定の処理を行うようにしたいのですが gを押せば特定の処理はするのですがgの値のある行がセレクトされてしまいます なので if (e.KeyData == Keys.G) { 特定の処理(); e.handle = true; } とe.handle = true;と書いたのにキーボードが無効化されません 書くところが悪いのかなと思って private void listBox1_KeyDown(object sender, KeyEventArgs e){ のすぐ増したに書きましたがこれは実行したら以後キーボードが受け付けなくなったのでやめました キーボードを打ってlistboxで移動しないようにしたいのですがこのやり方は間違ってますか?
文字列をa01からに振りなおせば解決
549 :
デフォルトの名無しさん :2011/06/12(日) 22:36:47.51
すみません、メトロノームは機械式と電子式とではどっちが精度いいんですか?
条件次第では機械式のほうが精度がいい
条件次第では電子式のほうが精度がいい
552 :
デフォルトの名無しさん :2011/06/12(日) 22:40:31.90
検証スレ立ててそっちでやってくれ c#のレベル超えてる
ていうか「PC等」カテゴリの話題ですらない
listboxの場合はe.handleは効かないの仕様みたいですね 別の方法を考えます
ポインタ=参照型ってことでまとまったみたいだな
556 :
デフォルトの名無しさん :2011/06/12(日) 23:24:55.42
KeyPressでできるぞ
概念的に似ている要素はあるけど、いくらなんでも=はないだろ
じゃあ気にしておかないといけない違いは? 設計に重要なポイントとか。
ポインター型…使うな 参照型 …使え
わざわざunsafeまでつけてポインター使えるというのに。 ポインタと参照がまったく完全になにもかも同じだったらunsafeなんていらないだろ。
string dame = @"\\\/\:\*\?\""\<\>\|";というstringを活用し Console.WriteLine(dame);とした時に\/:*?"<>|と表示させる方法は無いでしょうか? もう1回段階評価すれば良さそうなのですが分かりません。 dameはRegex.Matches(fileName, @"["+dame+@"]");として使っています。
>>542 そもそもデータをa01,a01...とした方が早くマイカ?
間違った a01,a02...な
>>563 Console.WriteLine( Regex.Unescape( dame ) );
>>567 エスケープを解除するというその名もズバリな関数があったのですね。
レスありがとうございました。
LINQいいよね〜
>>562 そう言えば unsafe ってのがあったな。
unsafe で宣言した関数とかは他のプロセスから関数呼び出しできるんだろうか。
unsafeよりMarshalのほうが良くね?
意味がわからないです
今までずっとコンソールのソフト作ってきて初めてフォームアプリケーションつくろうとしてるが設計難しいな センスのなさを痛感している
満足のいくGUIを…なんて目標高くやってるとちょーしんどい。 絶賛放置中
ボタンを並べておけばおk
576 :
デフォルトの名無しさん :2011/06/13(月) 17:21:32.28
SmtpClientクラスはスレッドセーフでしょうか?
CUIで作ってそれをGUIからも使えるようにすればいいだけじゃん
設計というかデザインというか
GUIはMFCでやったほうがよくね? C#のフォーム、もっさりしすぎて使い物にならん
ニャンだかワンダフル
さらにもっさりのWPFの立つ瀬がないだろ!
ネタですね
>>581 .netが無料板でも使えるのにMFCは有料版にしか付いてない理由が、それ
>>581 おいおい、じゃあC#の使いどころはどこになるんだよw
新規でMFCの呪文つかうやつの気がしれないw
ASP.NET^^
>>586 .net : 安全だが遅い。GUIを直感的に作れる。VC#,VB等、複数の言語で共通のライブラリとして使用可能
MFC : 安全性は劣るが速い。ダイアログ以外のGUIは直感的には作れない。有料版にしか付いてない。しかもVC++でしか使えない
まあ、楽に作るか。速さを求めるかで使い分けになるんだろね
VC++とMFCは覚えるの難しいけど、覚えとけばWinでは困る事が無いから、使いこなせる人は羨ましい
いつか、再挑戦したいけど、私ゃ挫折したよ
私 ≠
>>581
いや複雑なGUI作れば結局MFCだって(起動が)遅いからw
スレ違いに気付けよカス
ふらっと脱線するのがここの趣旨だろうが 油粕
こいつポインタ≠参照型とかいう異端野郎だろw
スレタイそう言う事か
どんなにくだらない発言でも ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身 など、勇気をもって書き込んでください。
コンピュータ言語の前に日本語を勉強しろ
主語はどこに在るのでしょうかね
598 :
デフォルトの名無しさん :2011/06/13(月) 22:01:22.88
主語ーい
脱線は別にいいけどループはノーサンキューだぞ、
>>593
結局精度についての結論をまとめてくれよ
ポインタ≠参照型とか言ってるの一人しかいないからなw
ポインタ=参照型って言ってるヤツが二役やってんだろw
ticとtuckでtictuckてこったなw
暗政府w
>ImageWidth[256] = 156 >ImageLength[257] = 104 ってあるけど、サムネイルはこれより小さいの?
おっと相談室と間違えた
608 :
デフォルトの名無しさん :2011/06/13(月) 22:20:32.51
間違えたなw
お前よりはマシだから安心しろ
てす。
windowsFormsで WPFのRadialGradientBrushのようなことをやりたいんですが 簡単に実現する方法はありませんか? ないとすれば・・・どんな風に実現するのでしょうか? 円を塗りつぶしで描画して、その上からさらに白と元の色のグラデーションで小さい円を描くようなカンジでしょうか?
613 :
デフォルトの名無しさん :2011/06/14(火) 10:28:51.14
616 :
615 :2011/06/14(火) 11:08:41.43
>>614 へのアンカーを忘れていたという・・・orz
実際組み込んで使ってみるとやっぱりソリッドな円より見栄えがよくなって満足です!
class Test { public static void test(object obj) { Console.WriteLine("object"); } public static void test(params object[] args) { Console.WriteLine("object[]"); } static void Main(string[] args) { string[] ss = new string[] { "hoge", "2", "3" }; test(ss); } } これを実行すると可変長引数のほうが呼ばれるのですが、何故こうなるのでしょうか? 同じ型の場合、引数を個別に指定したものと可変長にしたものとがあれば前者が優先されると思うのですが。 (試しにobjectの部分をstringに置き換えて実行すると前者が実行されました)
(試しにobjectの部分をstring[]に置き換えて実行すると前者が実行されました) []が抜けてました。訂正します。
>>617 string[] ss = new string[] { "hoge", "2", "3" };はobject型とobject[]型のどちらに近いと思う?
より詳細な方が実行されるから object < object[] < string[]
関係ないけどデフォルト引数と名前付きパラメータ導入されてたんだ
レスありがとうございます。
>>619 string[]はobject[]型のほうが近いと思いますが、それと可変長の方の関数が実行される事との間に繋がりが見えません。
>>620 test関数の一方は1つのobject型インスタンスを引数に取りもう一方は複数のobject型インスタンスを取る
与えた引数string[] ssは1つのobject型インスタンスなので前者の方がより詳細な方では無いでしょうか?
public static void test(object[] args) { Console.WriteLine("object[]"); } と public static void test(params object[] args) { Console.WriteLine("object[]"); } がなぜ同じクラスに同時に存在できないか考えたことある?
なるべくobject型は使わないようにしたほうが良いんでね 俺は使ったこと無い
つうか、そんな紛らわしいもん作るなよ バグの元だろ
うちの周りはvb6脳で止まってて、objectでわたしてメソッドは遅延評価でおkなやつが多くて怖い
それVB6関係ねーだろwww 昔からObject使うなってのが定説
VC#で作ったものってMONOでも動くんですか?
コレクションとかもまだジェネリックじゃないの使ってるやつ多そうだな・・・ こえぇよ 何が入ってくるかわからないような代物
例えばイベントハンドラのSenderって、やろうと思えば何でも送れるけど禁じ手だよな 何も知らない頃にやっちまった前科があるのは内緒だ
>>628 少なくとも素のWindowsアプリのEXEは動いたよ
バイナリはプラットフォーム依存な感じがするけど動くのか
monoだけじゃ無理っぽかったけど、wineだったかな、いろいろ入れたら動いた 素のアプリは、ね。
あーやっぱり 最初のローダーが動かないよね
まあぃぬxで動かすならじゃヴぁで作るわ
ローダーはmonoでないの? wine入れないときはウインドウ系のエラーだった気がする 数か月前にちょこっとやった程度だが
C#からC++で作ったDLLの関数に参照渡しってできないの? 値は渡せても戻ってこないよ?
C++の仕様でいう所の参照は無理だったような
スンマセン、勘違いでした ポインタになってないだけでした・・
Document/Viewとか二度とやりたくありません!
やれと言ってません
>>641 こきはC#スレです
MFCの話はトラウマなので忘れさせてくさい
ごめん、リロードしないで書き込んじゃいまして……
>>623 試してみた所、同じパラメータであると言われました。
object[]型を1つ取る関数とobject型を複数個取りobject[]型にまとめる関数は
意味的に別物だと思うのですが、これが同じものとして扱われるのは内部的な話なのでしょうか?
void test(object[] obj) { }
void test(params object[] args) { }
test(new string[]{1,2}); // 後者が呼ばれる。
void test2(string[] string) { }
void test2(params string[] args) { }
test(new string[]{1,2}); // 前者が呼ばれる。
やりたいことは別の手段で実現できたのですが、これが不思議で理由が知りたいです。
すみません、訂正です。 void test2(string[] string) { } void test2(params string[][] args) { } test2(new string[]{1,2}); // 前者が呼ばれる。
上も訂正、、 void test(object obj) { } void test(params object[] args) { } test(new string[]{1,2}); // 後者が呼ばれる。
配列は共変でない(≒引数にstringを取るメソッドがある)からstring[]からobject[]には変換できない けどobjectには変換できる、よって後者が呼ばれる
>>648 ありがとうございます。配列は共変でないというのがよく分からないので調べてみます。
>>623 について考えました。
int sum(params int[]) { }
int amount = sum(3, 8, 293, 29);
↑内部的にこの時点でint[]にまとめてからsum(int[])を呼び出すように
なっているので新たにint sum(int[]) { }を定義できないのではないかと思いました。
>>649 失礼、「array-covariance」だけど「covariant」じゃないから通常の暗黙変換より優先度が低いってことで
652 :
617 :2011/06/14(火) 22:46:26.67
うーん、よく分からないです。
string[]→object[]というひとつのobjectには変換できないが
string[]→object, object,...には変換できるので
>>647 は後者が呼ばれるという理屈ですか?
試したところstring[]→object[]は変換できました。
単に暗黙変換可能な近い型が使われるって覚えておけばいいよ paramsが実際は普通に配列引数を取ってるってことは分かっただろ
string[]→objectはベースクラスへの拡大変換で、暗黙変換の中でも最優先 string[]→object[]は配列専用の特殊な変換だから優先度は上から4,5番目
655 :
617 :2011/06/14(火) 23:01:52.52
>string[]→objectはベースクラスへの拡大変換で、暗黙変換の中でも最優先
string[]が1つのobjectに変換されるのが最優先なら
>>647 は前者が呼ばれませんか?(
>>647 はnew stringの引数が少し変でした)
その優先がどうとか言ってる奴は無視ししろ
public static void test(params object[] args)
が内部的には
public static void test(object[] args)
なのだから
public static void test(object arg)
public static void test(object[] args)
で
test(new string[]{ "a", "b" });
を呼んだ時どっちが呼ばれるべきか
>>622 で「string[]はobject[]型のほうが近いと思う」と自分で言ってるだろ
その直感の通りだ
オーバーロードの解決法はVBの方がもっとややこしかったような....
>>656 なるほど・・
public static void test(object arg)
public static void test(object[] args)でtest(object[])を呼べば後者が呼ばれるのは分かります。
つまりpublic static void test(params object[] args)は
純粋にobject型の可変長対応版だけを実現しているのではなく、
test(object[] objs)という呼び出しも許容しているのですね。
スッキリしました。丁寧なレスありがとうございました。
☆(*^o^)乂(^-^*)☆ ヤッタネ!!
>>657 どっちも標準形式で呼べるからparamsは関係ない
ガベコレ・メモリリークについて、お教えください。 WPFなダイアログのオブジェクトがガベコレされず操作を繰り返すとOutOfMemoryしてしまいます。 メモリリークが起こっていると思い以下のように調べたのですが、手詰まりになってしまいました。 どこか手順/ガベコレの理解が間違っているでしょうか?
1.sosでgcrootを調べる。全てのGCハンドルが弱参照になっていることを確認。 (HANDLE(STRONG)やHANDLE(PINNED)がなく、HANDLE(Weaksh)やHANDLE(Weaksl)だけになっていることを確認) 2.以下の処理を通過させてガベコレに強制的にお掃除させた上で1と再度同じ手順で確認 GC.Collecion();GC.WaitForCompleteFinalize();GC.Collecion(); 1でGCハンドラ全てがWeakshになっていたことを確認したので 2で消えてくれそうな気がするのですが実際にはインスタンスは消えず残っています。
GCHandle 化されてない通常の参照が残ってるとかないよね?
>>662 何が不満かよく分からんが、1.1の言語仕様なんて見てないよ?
とりあえず
>>657 のリンクは適切かどうかだけで、複数該当した場合のことは書いてない
1.1仕様の「7.4.2.2 より適切な関数メンバ」は役に立たんので4.0の7.5.3.2を見ると、
>• The expanded form is used if the function member was applicable only in the expanded form.
ってあるんで拡張形式は排除される
つまりparamsの有無云々は間違い
で、「より適切な変換」を評価するが、両方暗黙変換可能なので存在しない
だから「より適切な変換」になるってのは間違い
最後に"object[] is object"だが、これはtie-breaking rulesに
>• Otherwise, if MP has more specific parameter types than MQ, then MP is better than MQ.
とあるから、7.4.2.3とは関係ないけど正しい
>>665 どもです。GCHandle化されていない通常の参照があっても、その参照元をたどると
1.GCHandle or Stack上から参照されている
2.その参照自体がどこからも参照されていない
のどちらかで、1ならsosのgcrouteで検出可能、2なら対象インスタンスのGCを妨げないと思うのですが…
# ガベコレには不慣れなのですみません、間違っていたらご指摘ください。
>>666 そっちこそ何がいいたいのか分からないけど、
void hoge(params T[] t){}
MSDNには、params付きの場合、このhogeにS[]を渡して呼べるかどうかは(S[]からT[]ではなく)
SからTへの暗黙の変換があればよいと書いてある。
これはTとSが参照型ならどっちでも恐らく同じことだが、どちらかが値型の場合は配列の共変が働かないから、
params付きとそうでないのでは意味が違ってくるはず。
言ってること変かな?
670 :
デフォルトの名無しさん :2011/06/15(水) 07:40:01.14
.NET4、WPFアプリケーションの作成で Mediaplayerのインスタンスつくってからその再生音量を徐々に上げていく操作をしたくて以下のように書いたんだけど ~~ MediaPlayer mp =new MediaPlayer(); mp.Open(new Uri(@"〜〜〜")); mp.Volume = 0; mp.Play(); DoubleAnimation vol_up = new DoubleAnimation(0.1, 1, new TimeSpan(20000000)); mp.BeginAnimation(MediaElement.VolumeProperty, vol_up); ~~ 再生自体は出来てるんだけど、どうにも音量が上がってる気配がない 何処を直したらいいのか教えていただきたい
671 :
デフォルトの名無しさん :2011/06/15(水) 08:00:21.90
MediaPlayerにMediaElementのVolumeを設定しても・・・ そもそも依存関係プロパティじゃないよ
672 :
デフォルトの名無しさん :2011/06/15(水) 09:04:26.48
え、違うの? じゃあ自分で依存関係プロパティ定義しなくちゃだめ?
static void F(params object[] x) { Console.WriteLine("引数の数: {0}, 引数リストの型: {1}", x.Length, x.GetType().Name); } static void Main(string[] args) { // この2つは同じ意味。 // string → object への暗黙の型変換で動く。 F("aa", "bb", "cc"); F(new object[] { "aa", "bb", "cc" }); // これは別の意味。 // string[] → object[] への型変換(配列の共変性)で動く。 F(new string[] { "aa", "bb", "cc" }); }
>>672 素直にMediaElement使えばいいだろ
ワロタ
ワロタリウスV世w
677 :
デフォルトの名無しさん :2011/06/15(水) 10:16:49.83
パフォーマンスや影響範囲を考えると、MediaPlayer使って添付プロパティ化する方がいいと思うけどね
パフォーマンスを考えるとWPFは使えない結論に至る
WPFとかやってみてえけど、新しいPC買えねーわ。
でもWindows8が登場する頃には WPFのパフォーマンス何て気にならなくなってるんでしょ?
PCが同じなら・・・
WPFなら画面に表示する部分はすべてグラボが処理するから、 パフォーマンスが向上するって聞いたのに・・・
Silverlightでチャイルドウィンドウを表示するとき さくっと表示されずにアニメーションされちゃうんですけど さくっと表示するようにするにはどうすればいいでしょう?
グラボなど幻想だ。 いい夢見れたか? 描画よりレイアウトエンジンが重い
686 :
デフォルトの名無しさん :2011/06/15(水) 18:06:50.49
>>683 グラボで表示するけど余計なことまでやってるから結局パワーいるよね
MSはWPFの前に UI分離型のWinForms出してくれれば良かったんだよ
アプリからODBC使ってpostgresに接続してるんですが 外部のPCから自分のPCのデータベースが更新された時に それをアプリに通知することってできますか? ODBCはNOTIFY/LISTENをサポートしていないようなので。
原始的な方法しか思いつかないな
他のpostgres用のインターフェースで通知できるものとできないものが あることはなんとくなく把握してます。 やっぱりソケット通信とかで通知するのが無難なんでしょうか。
メトロノームさんは違う板に移動したみたい
質問者のことならどうでもいいけど、サウンドカードの水晶の精度がーとか言ってたやつのことならちょっと気になる
なら好きなら好きって告白したらよいのでは?
ならねらのらねならねるのらののらる
697 :
デフォルトの名無しさん :2011/06/15(水) 22:33:34.37
698 :
デフォルトの名無しさん :2011/06/15(水) 22:38:22.79
さて、カレーでも食うか
想像以上にしょべえ問題
private void Form1_Load(object sender, EventArgs e) { Graphics g = pictureBox1.CreateGraphics(); g.FillEllipse(Brushes.Red, 50, 50, 100, 100); g.Dispose(); ; } で描画できません private void button1_Click(object sender, EventArgs e) { Graphics g = pictureBox1.CreateGraphics(); g.FillEllipse(Brushes.Red, 50, 50, 100, 100); g.Dispose(); ; } でbuttonを押すと描画されます プログラムを起動したときに描画したいのでForm1_Loadに書いたのですが何故描画されないのでしょうか?
LoadだとまだpictureBox1ってできてないんじゃないの? Showだっけ?そこに書けば
private void Form1_Shown(object sender, EventArgs e) { MessageBox.Show("Test"); Graphics g = pictureBox1.CreateGraphics(); g.FillEllipse(Brushes.Red, 50, 50, 100, 100); g.Dispose(); ; } って書いたら表示されました でもMessageBox.Show("Test");を書かないと表示されません
703 :
デフォルトの名無しさん :2011/06/15(水) 23:12:24.63
そもそも直接書くってのが気持ち悪い         private void Form1_Shown(object sender, EventArgs e)         {             Bitmap bmp = new Bitmap(400, 400, PixelFormat.Format32bppArgb);             using (Graphics g = Graphics.FromImage(bmp))             {                 g.FillEllipse(Brushes.Red, 50, 50, 100, 100);                 g.Dispose();             }             pictureBox1.Image = bmp;         }
>>697 総当たりで15!だから適当な評価関数をでっち上げてGAかな?
>>703 その感覚はちょっとというかかなりVBerっぽいなw
706 :
デフォルトの名無しさん :2011/06/15(水) 23:15:51.55
>>705 VBはほとんど書いたことがないんだな
まあdobonとか参考にして覚えた書き方なのであの辺の主がVBerなら
そこで感染したのかも
実態参照めんどくせえ
>>704 厳密にいうと問題として成立してないような気もするけど、そこは突っ込んでは
駄目なんだろうなきっと。
まず任意の2つのピースを上下、左右に並べた場合の辺の不一致度のテーブルを作って、
それをもとに15のピースの順列の全部について全体の不一致度の総和を計算して
最小のものを選択するとか、そんなところか。
面倒なだけで高校生ぐらいでも書けそうだな。
コードは参考にさせていただきます shownで表示されないのは何故なんでしょうか?
分からん
単にWM_PAINTが飛んでないだけだと思う
CreateGraphicsで書きこまれた内容を尊重するような設計になってないんじゃねーの? Paintだな
Paintも描画されないようですが・・・ .netのバージョンが原因ですかね
ちゃんとe.Graphics使ってる?
>>709 書いても消えちゃうから。
一旦書いたら消えないようにするためには、書いた内容を記憶しておくメモリが
必用になるが、各コントロールがおのおのそんなものを持つのはメモリの無駄遣い。
だからWindowsでは、ウィンドウの隠れていた部分が表に出た時など、
再描画が必要になったタイミングでその都度描画するのが基本。
でその「再描画が必要になったタイミング」を通知するのがPaintイベント。
っていうか、この辺りは考えることじゃなくてMSDNとか読んで理解することだから
まず手を動かす前に黙って何か読んだ方がいいよ。
あ、e.Graphicsか Graphics g = pictureBox1.CreateGraphics(); g.FillEllipse(Brushes.Red, 50, 50, 100, 100); g.Dispose(); ; って書いてました VC#起動に5分かかるので明日ためしてみます おやすみなさい
>>716 XPではウィンドウが後ろに隠れると消えてたけど、
Vista以降はそれぞれに画面持ってるから再描画かからないんじゃないかな。
コントロールレベルでは持ってないかもしれないけど
一旦最小化して戻せば再描画
>>720 いや再描画しないでしょ。画面がおかしくなっても復活しないし
>>719 それエアロが有効かどうかで違った気がする
>>697 久しぶりにピュアCでコーディングしたぜ。PPM読んでグレースケールにするまでいって力尽きたけど。
JSのオブジェクト指向っぽく書いてみたけど、ライブラリ組んでるときは苦痛だけど使うときはまー楽なこと。
6時間くらいかかったけど、いい経験になったなー。寝る。
private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.FillEllipse(Brushes.Red, 50, 50, 100, 100); //e.Graphics.Dispose(); } でいけました でもe.Graphics.Dispose();を実行するとApplication.Run(new Form1());のところでエラーが起こるのは何でですか?
725 :
デフォルトの名無しさん :2011/06/16(木) 07:50:47.91
>>724 自分で作ってないGraphicsを勝手に破棄すればpictureBox1_Paintを呼んだ
ところへ戻ったときにそりゃこけるだろ
なるほど disposeって必ず書かないといけないわけでもないのですね
727 :
デフォルトの名無しさん :2011/06/16(木) 07:55:08.53
>>726 >>718 のように自分で作った場合は責任を持って破棄するか
>>703 のようにusingで囲えばg.Dispose()はなくてもいいけど
>>703 の訂正版
private void Form1_Shown(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(400, 400, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.FillEllipse(Brushes.Red, 50, 50, 100, 100);
//g.Dispose();
}
pictureBox1.Image = bmp;
}
Visual Studio 2010 Express使ってます。 private void MyMethod(MyClass myclass) としてエンターキーで private void MyMethod(MyClass myclass){ } のように自動挿入されるようにできませんか? 以前何かのときでVBではEnd Sub的なものが自動挿入されてるのをどこかで見た記憶があるので どこかの設定で出来るとは思うのですが・・・
Pro以上にProductivity Power Toolだったかを入れる
PanelクラスにRichTextBoxクラスを追加したときに RichTextBoxの上でクリックするとPanelのほうでクリックイベントをキャッチすることはできるでしょうか?
>>727 この流れで便乗質問。
PenオブジェクトやFontオブジェクト、GrarhicPathオブジェクトは、Disposeしたり、しなかったり、
いろんなケースを見ますが、Disposeが必要な基準って何ですか?
RichTextBoxの中身がリッチエディットコントロールならWM_NOTIFYが来るんじゃないかと思ったけど ClassName = WindowsForms10.RichEdit20W.app.0.3ee13a2_r13_ad1 なぁにこれぇ
>>732 必要なくなったら
ガーベジコレクションに回収されるのを待ってられない時のためにある
逆にガーベジコレクションされないであろうオブジェクトに対しては実行しない
例えばPensとか
735 :
デフォルトの名無しさん :2011/06/16(木) 10:11:23.94
Pensなどはそもそもそういう物じゃねーだろ
736 :
デフォルトの名無しさん :2011/06/16(木) 10:47:01.89
silverlightって背景色が設定できなくて不便ですね
>>736 RichTextBoxからイベントをキャッチしようとしたら
スクロールバーをクリックした場合イベントが拾えなかったので
パネルにいれてパネル側からキャッチしようとしました
誰かVisual Studioでハイアンドローゲーム作れない?
>>732 自分で(ユーザーコードで)作ったかどうか。
自分で作ったものは必ずDisposeが基本。
現実にはPenやFontなんかDisposeしなくても何も問題はないけどね。
private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.FillEllipse(Brushes.Red, 50, 50, 100, 100); } これで○の部分だけをクリックしたら特定のイベントを実行したい pictureBox1_Clickの場合だと○の部分ではなくてpictureBOx1の四角の範囲内でもイベントが発生してしまうので 何か良い方法ございませんか?
pictureBox1_Clickの中で小学校で習う算数を使って地道にやれ
三平方の定理は中学だよな?
WPFならShapeでClickが拾えちゃうんだぜ〜
それマジで言ってんの!?まじならすぐにでもWPFを覚えるんだが
>>745 それはマジ
まあ円の判定は楽だよね
シューティングゲームの円と点の当たり判定を利用すればいい
WPFはちょっとわからないので判定どうやるんですか!?
当たり判定とか言い方が大げさ過ぎるw 本気で分からないなら人間止めた方がいいレベル
そんなwおねがいします><
751 :
デフォルトの名無しさん :2011/06/16(木) 22:45:21.31
>>749 数学で話をするよりゲームで話をした方がこういうのは入りやすいと思うんだが
マウスカーソルの位置と円のあたり判定
http://cs2ch.blog123.fc2.com/blog-entry-81.html ここからコピー
            int x = System.Windows.Forms.Cursor.Position.X;
            int y = System.Windows.Forms.Cursor.Position.Y;
            int a = x - (this.Location.X + cx);
            int b = y - (this.Location.Y + cy);
            int cc = a * a + b * b;
            if (cc <= r * r)
            {
            }
            else
            {
            }
マジモンなの? 点が円の中にあるかどうかは、円の中心からその点までの距離が半径以下かどうかで決まる。 2点間の距離の求め方が分からなければ中学から人生やり直しましょう。
PointToClient使えよ
まあ数学苦手なら(これぐらいの話を数学っていって欲しくねえがw) Region使ってもいいよ
>>754 でもこれって中学くらいに習うんじゃなかったっけ?
なので数学になってるよね
小学校までが算数だったような
そういう意味ではないという突っ込みは無しで
ていうかカーソル位置の色見てもいいんだよ?
あと、使ったことないがVS2010から旧VBのシェイプコントロールがデフォで 付属するようになったはずだから、あれを使えば何も考えなくてもできるでしょ
>>758 >シェイプ
ツールボックスの"Visual Basic PowerPacks"のカテゴリーの中にある。
今試してみたけど、期待する通りの動作をするよ
VC# 2010 Expressを使ってるんですけどどうやら無料版だからだと思いますが入ってないみたいです
ググるとExpressにも入ってると出てくるけどな。
文字数制限かかるのでインデント調整無しで Point location = new Point(0, 0); Size size = new Size(100, 100); private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.FillEllipse(Brushes.Red, location.X, location.Y, size.Width, size.Height); } private void pictureBox1_Click(object sender, EventArgs e) { int r = 50; Point p = PointToClient(new Point( Cursor.Position.X, Cursor.Position.Y)); int x = p.X; int y = p.Y; int a = x - (location.X + size.Width/2); int b = y - (location.Y + size.Height/2); int cc = a * a + b * b; if (cc <= r * r) { MessageBox.Show("true"); } else { MessageBox.Show("false"); } }
>>762 すごいです完璧です
ちょっとコードを読んでこれを勉強してみたいと思いました
ちょっと構造体の使い方に無駄が多いと思う 特にPointToClient(new Point(Cursor.Position.X, Cursor.Position.Y)); あとpictureBox1のLocationが(0, 0)じゃないと成立しないような
767 :
デフォルトの名無しさん :2011/06/17(金) 00:18:30.53
基礎的なお作法から解らず、教えてください。 form1のToolStripMenuItem_Clickを押したときに form2のprivate System.Windows.Forms.ComboBox comboBox1に .Items.Addしてから、form2を.ShowDialogしたいのですけれど itemsを渡す方法って、 comboBox1はprivateなんで、designer.cs弄ってglobalにしちゃえっていう事以外で どういうやり方がお勧めなんでしょうか?
form2にプロパティかメソッドを追加して値を渡して、form2でAdd
769 :
デフォルトの名無しさん :2011/06/17(金) 00:26:05.87
そんなことはしないのが基本 項目を引数に取ってそれを追加するメソッドをForm2に定義しておいてShowDialogする前に呼ぶのが簡単かな
あと各コントロールのプロパティウィンドウにModifiersってのがあるんで
772 :
デフォルトの名無しさん :2011/06/17(金) 10:41:09.61
こんにちは! comboboxをクリックしたときにでてくるリストのサイズは変更できないのでしょうか? 項目で文字数が多いのがあるとちょんぎれて読めないです。 combobox自体のサイズを大きくすればいいのでしょうがレイアウト上むずかしくて、せめて選ぶときだけわかればいいなと思いまして。
訂正 >ShowDialogはモードレスで開くと 「モーダル」の間違い。
>>772 プロパティにあるよ
デザイン画面で見てみればすぐわかると思うけど
一通り探してみたんですが、どうしてもわからないのでご教授願えませんか
マウスの自動クリックを試してみたくてとりあえずプログラムを作ってみたんですが
全く動かないんです
エラーが出るわけでもなく、ただ自動クリックをしてくれないんです
原因がさっぱり掴めないんです
Google先生にも色々聞いて試してみたんですがさっぱりで・・・
結局「緑のバイク ★ 初めてのC#」からのコピペがほとんどなんです
コードは全部乗せた方がいいかと思い外部リンクを選びました
こちらです
http://ideone.com/OmbhL 動作は3つです
button1 をクリックすると
SendINPUTを利用してbutton2をクリックするはずです
(これが動作しません)
button2 をクリックすると
textbox1に 成功 と入力します
button3はForm2を表示します
Form2はあらかじめ定めたスクリーン座標を
赤い丸で表示します
この赤い丸にbutton2を手動で合わせるためです
どこが悪いのか教えて頂けませんでしょうか?
何の意味があるのかよくわかんないけど右クリじゃん
>>776 本当にありがとうございます
何の勘違いか左右間違えてました
動きました
ありがとうございます
ごめんなさい
恥ずかしいorz
778 :
デフォルトの名無しさん :2011/06/17(金) 14:22:26.64
教えてくださいl。。 C#でblowfishを使いたいのですが、クラスとかないですか。。。
C#でwavファイルにエフェクトを書けながら再生したいのですが そういうライブラリありませんか?
782 :
デフォルトの名無しさん :2011/06/17(金) 16:55:03.35
>>779 ありがとうございました。
使い方がよくわからない。。でも感謝!
783 :
デフォルトの名無しさん :2011/06/17(金) 16:55:43.40
C#でswfを再生するにはどうすればいいですか?
まずActiveX版Flashを入れる。 次にプロジェクトの参照にCOMコンポーネントからShockwaveFlashObjectsを追加する。 こうするとShockwaveFlashObjectが使えるようになる。 あとはググれ。 デザイナで配置したい時は、メニューのツール→ツールボックスアイテムの選択→ COMコンポーネントタブのShockwaveFlashObjectにチェックを入れる。
>>784 前スレか前々スレか良く覚えてないけど質問したときにコード載せたので使ってください
787 :
デフォルトの名無しさん :2011/06/17(金) 17:11:23.88
>>786 結局うまくいかなかった記憶があるんだがw
このスレだった希ガス
いえうまくいかなかったのはflvの再生です swfは投稿したコードで再生できますよ
if 〜 if else 〜 if elseと1000個ぐらいになるのなら 別の方法考えたほうがいい?
ぼくならswitchを使います
excelか何かでコードを自動作成する
>>790 &&や||でまとめられないか?と、switch
ifの意味毎に関数にまとめられるなら、まとめる
ハッシュテーブル&デリゲート&クロージャとか動的生成で対処しとけ 1000個も分岐があったら保守するときに死ぬぞ
意味ねーw
1000個とか、
1000個とか、どんなプロジェクトでいくんだ。
赤鬼さんと朝まで豆まき
前にメトロノーム話題になってたから、暇人なので作ってみた。製作時間8時間くらいで300行くらい書いたな。と、ちら裏。
ちゃんと10^-6秒以内の誤差で作ったか?
>>800 うげ。sleep使ってるから多分無理。ひまならデバッグしてみる??
803 :
デフォルトの名無しさん :2011/06/17(金) 22:49:53.28
統計的に誤差が増えなければ十分 一回の刻み感覚なんて少々ズレてもわからん Sleep(1000)×10だから10秒とかは最悪
>>802 MDXか。C#標準構成では難しいかな・・・。
うむー。
>>803 あー、累積してるかも試練。そこまで考えてなかった。
減算してないもんなー。なるほどね〜。
ニコ厨?
807 :
805 :2011/06/17(金) 23:28:18.64
>>806 ニコ動のフリーアカウントは持ってるが投稿したことないし廃人ではない。音楽つけっぱとかはやるけど。
・FormにはDialogResultというものがあるんでIsOkはいらん ・BPMのstringを他フォームにそのまま公開するのはカスの所業 ・怪しいprivate setはいらん ・ガイドライン的にはIsOk→IsOK、BPM→Bpm とか書けばいいの?
>>805 IDとパスワードを盗むやつでしょ
そんなのに引っかかりませんよ^^
810 :
805 :2011/06/17(金) 23:48:19.52
>>808 初心者なのでそういう指摘も歓迎。
・DialogResultは知らなかった。
・BPMの扱いは迷ったんだどどこかでまとめて変換したかったんだ。不味いみたいだから改める。
・怪しいprivate setは無いと実体がないからとコンパイラさんに起こられたのでつけた。解決策がほかにあれば教えてほしい。
.・アッパーキャメルなのは癖だね。ガイドラインは呼んだことが無いので一度呼んでみようかな。
って言う感じで、ちょっと検索してくる。
>>809 君が頑張ればそういう機能もつけれるよ。
実行ファイル入ってないし、ソースついてるんだから自分で判断してくだちぃ。
一応、俺はそんな機能作ってない。といっておく。ふふ。
>>810 まあForm1からしたら入力値がエラーなのにOKで閉じちゃうとか舐めてんのかって話になる
呼び出し元では挽回は出来ないから、ちゃんとチェックして解析済みの値を返さないと
あとコンパイルエラーになるのはpublic string BPM { get; }でしょ?
public String BPM { get { return textBox1.Text; } }は通るはず
812 :
805 :2011/06/18(土) 00:26:56.76
ガイドラインおもろいね。関係ないけど、フォームデザイナ開いたらVC#EEが死ぬ病になってフォームが編集できん・・・。
>>811 確かにもし複数人で開発してたら責任問題だよね。そかー。
あと、コンパイラさんに起こられた原因解った。
コーディング中に欲出してprivate set;も書いてたからだったみたい。
消したら確かにコンパイル通るね。これは参った。次から気をつけるよ〜。
さてさて、今日はこの辺で落ちますよ。
>>808 と
>>811 は大変勉強になったので感謝感激ですよ。
みなさまありがとう!!またこんどー。b><;
ただの糞コードじゃん
>>813 どの辺がクソか書けばいいと思うよ。飯食って寝る。オヤスミ。
「どの辺が糞なんだよ」からの「もうこねーよ!!」wwwwるんちゃん
>>815 どの辺がクソか書けばいいと思うほね」。
>>815 どの辺がクソか書けばいいと思うほね」。
>>815 どの辺がクソか書けばいいと思うほね」。
>>815 どの辺がクソか書けばいいと思うほね」。
>>815 どの辺がクソか書けばいいと思うほね」。
もうそのままスレ埋めとけ 頼んだぞ
そうだね
ただの糞コードじゃん
糞レスじゃん
糞じゃん
クソースにウンコードですよ
音楽の話はスレチ
D.C.
透明あぼんですっきり あ、あぼん報告乙ってのもあぼんしますから
837 名前:デフォルトの名無しさん[sage] 投稿日:2011/06/18(土) 10:18:45.96 音楽の話はスレチ 838 名前:デフォルトの名無しさん[sage] 投稿日:2011/06/18(土) 12:22:26.22 D.C. 839 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
あぼん報告はAPIスレだけにしてくれ こっちでまでやらんでいい
電子工作板で荒らし荒らし喚いてた奴だよ
どこだよそれ C#との関連性が全く分からんぞ メトロノームでも出現したのか?
メトロノームの質問者に粘着してる奴が電子工作板にいる
俺もちょっと見たいわww
675 名前:774ワット発電中さん[sage] 投稿日:2011/06/15(水) 23:41:25.15 ID:eh5h42zl [1/2] メトロノームのヤツはC#のスレでも質問してた荒らしだよ 676 名前:774ワット発電中さん[sage] 投稿日:2011/06/15(水) 23:52:11.07 ID:0TNdHaCT 質問したら荒らしって発想がすごい 677 名前:774ワット発電中さん[sage] 投稿日:2011/06/15(水) 23:53:54.26 ID:eh5h42zl [2/2] みんな真面目に答えてたけどありがとうも何も言わないで その後やたら「メトロノームの精度は何が一番高いんですか?」とか 単発で荒らしまくったからな。 ここも質問してバックレだろ 同じヤツだよ 678 名前:774ワット発電中さん[sage] 投稿日:2011/06/15(水) 23:56:56.01 ID:hQgFhj3Y 感謝されたいから回答してたなら君は2ちゃん合わないと思う 679 名前:774ワット発電中さん[sage] 投稿日:2011/06/16(木) 00:01:46.32 ID:KYqUnk4S 感謝も糞も何も言わないでバックレてその後で荒れてるんだから荒らしと見なされても仕方ないわな なぁ、荒らしクン 680 名前:774ワット発電中さん[sage] 投稿日:2011/06/16(木) 00:17:05.67 ID:sdNV8TEj 感謝とか 知恵袋でも行ってろよ 681 名前:774ワット発電中さん[sage] 投稿日:2011/06/16(木) 01:02:45.98 ID:p1y0VJaI 感謝強盗乙
妥協したんじゃなかったのかよwww
論点のズレっぷりに笑う
コピペ君って馬鹿だな、まで読んだ。
あれだけ誤差は蓄積しないように出来ると言われててもまだ理解してないんだな。 歳いくつだろ。
それをいうなら「累積」でしょ。 蓄積って何だよ
つうか1/1000が気になるほどのプロはPCのソフトなど使わないと思うんだ PCのお手軽メトロノームなら、ある程度誤差があっても十分だよな
メトロでNGした 東京メトロもヒットする
Win8はメトロ調を基調とした云々
メトロポリタンミュージアムはニューヨーク市にある〜
タイムwwwトラベルわwwwwwwwwwたのしwwwwwwwwwwwwwww
天使の像「靴下かたっぽだけとかナメてんの?」
>>855 だからね、ここの人はメトロノームの使い方が分かってないのwww
BPM120(0.5000秒)を1000回鳴らしたとき、500秒に限りなく近ければ正確だと思ってるの。
それじゃあ、タイマーかストップウォッチだてーのにw
メトロノームって1/1000の精度を要求する道具だったのか。 俺は普通に妥協しちゃうなー。
メトロノームはPCに複数台入れて、同時稼働させながら集団個人練習する道具だと聞いたぞ? あと地デジに関係があるとかないとか
大好きな絵の中に閉じ込められた
指揮者一人いれば済む話だな
>>855 そうでもない。C#じゃなくてOSのカーネルの中とかまでゴニョゴニョするような代物だが、
Windows上で実測でJitter 12μsecで処理、という資料を見たことがある。
もっともIntelアーキテクチャもWindowsもそんな処理は想定していないから何かの拍子でアウトだがなw
実際にこのスレで解決策なんか出たか?
>>861 だからマイコンで出来るって話が出たんじゃないのかね
>>853 >誤差は蓄積しないように出来るって何だよ
kwsk
そもそもメトロノームのテンポ精度ってそんな高くない。 お前の持ってるメトロノーム並べて同時に動かしてみろよ。段々ズレてくのが分かるはず。 分からないならお前の耳と頭が腐ってる。
ピーターラビットは〜
>>873 それって結局RTC使うってことなんだけどね。WindowsのGetTimeよりはマシかもしれないけど。
.netアプリでもUnsafe宣言したスレッドでRTCからの割り込みで動けたりしないのかな。
>>874 でも、メトロノーム程度ならC+Win32で直接書いて良い気がするな
WAVはサウンドチップにデータ垂れ流ししかしてないからチップのクロック依存では
結局、機械式と電子式とではどっちが精度いいんですか
>>877 機械式
アプリでメトロノーム作るのは、手軽に持ち歩けるとか、劣化しないとかの理由でしかない
機械式は電気いらず。だけど風でゆれるビルの上では狂いまくるだろ。まどをあけて風を入れても狂うだろう。 電子式はしらね。 アプリでメトロノームを組む意味は、特有のカチコチ音がしないので録音が出来るし、 パソコンで動画再生とかしながらタイミングを合わせていろいろできる。
おまえらのスキルじゃ作れない
その手にはのらな
882 :
デフォルトの名無しさん :2011/06/19(日) 00:43:38.70
メトロノームあげ^p^
メトロノーム あ お
そろそろあぼん報告いいっすか?
C/C++ではOPENFILENAME構造体でlpHook設定すれば行けたはずだから同じ方法で行け…ねーのか OpenFileDialogでフック設定できねー
FileDialogからの派生でHookProcをオーバーライドとか?
>>886 Application.EnterThreadModalでhWnd捕獲してNativeWindowに食わせれば
なんとかなるのでは?
なんかちょっと前にも同じこと書いた気がするが....
そもそも変なオペレーション作り込まない方がいいと思うけどね
秀丸と秀丸ファイラーをインストールして
秀丸の動作環境のファイルから開くのダイアログボックスの設定で秀丸ファイラーに設定します
それで秀丸でctrl+oでファイルダイアログを出します
その状態でalt+nを押すとファイル名を入力する枠にフォーカスが移り
alt+lを押すとファイルが並んでいるところにフォーカスが移ります
こういうことがやりたいんですが>>887-
>>889 さんのやり方で出来るか調べてみます
開くダイアログくらい自作しようぜ
なんだこの前の秀丸尾か まだやってたのか
俺ならできる。
無限の労力をかければ
それマジで言ってんの?マジなら総力を持って作るが
つうか技術的にネックになる部分が特に見あたらん 初級者でも頑張れば大丈夫だろ
アイコン拾うのは標準じゃ出来ないから面倒か
いやファイラー、というかWindowsベッタリのものをC#で作るのは結構面倒。 普通に考えればネックありまくりなはずだと思うが.... 自称上級者様はこれだからな
ダイアログとかほっといて、もっと他のところに注力した方がいいんじゃないのかねぇ ダイアログ呼び出す本体側とかさぁ
アイコンはExtractAssociatedIconがある
ただシェル(IShellFolder)操作はCOMが絡むから
シェルのコンテキストメニュー表示したりってのは
>>891 の実力だとフルスクラッチは厳しいと思う
探せば転がってると思うけど
10年前はIShellFolderなど、今頃は絶滅している物だと思っていましたw
905 :
891 :2011/06/19(日) 13:49:22.45
____ / \ | | .| | .| ^ ^ | | >ノ(、_,,)ヽ、 | < あまり私の実力を甘く見ないほうがいい | ! -=ニ=- | /`、 i `ニニ' / __/ニヘ 「L__ __,,,,==ニニ三三ヘ.`¨¨¨¨´ ||三ニ==、__ /三三三三三rイ◯三ニ| \__,/ |三三三三ニ==、 _|三三三ニ/ `ーイニ三;;| ./三\ |三三三三三三;\ _|三三三=广 \. `i,j! }ニ;| \三/ :|三三三三三三三| |三三三iく \ { /三=| :|三| |三三○三三三三;| __/三三三|| \_}ー^三三三| |三;| |三三三三三三三;;| /三三三三;|\__,リ三三三ニ| :|三;;| :|三三三三三三三;;;| |三三三三三| /三三三ニ=;| |三ニ|:|三三三三三三三ニ;| |三三三三三`==='三三三三三ニ| |三三||三三三三三三三三
あぼんだらけ
buttonを押したらマウスの右クリックを押したときの動作をする方法ってございませんか?
listboxで選択したアイテムの背景色もしくは太字にする方法をご教示お願いします
オーナードローかカスタムドロー
補足しておくと、オーナードローはOwnerDrawプロパティをtrueにして所定のイベントハンドラを実装すればいい 描画する部分が結構面倒くさい カスタムドローはフォント返すだけなので楽 ただしWndProcでやらなければいけないのでそこに至るまでが面倒くさい 好きな方どうぞ 私はカスタムドローの方が好きです。お勧めはしませんが
特定のプラットフォームに依存した話題はスレチ
そんなバカなアアアアッッッツ!
カスタムド ロー
関西人はカスドと呼ぶ
このくそカスドもがァーッ!
つまんねーんだよ死ね
List<MapObject> MapObjects = new List<MapObject>(); ↑のリストの中にブロックやらコインやらが入ってます。 で、例えばMapObjectを継承したCoinBlockにだけ特定の処理をしたい場合、 どうやってこのインスタンスはCoinBlockですっていう判別すればいいの? instanceof演算子の代わりになるような物があれば教えて
インスタンス変数にCoinBlockフラグを入れる
クラスが違うのならisかas
フォームのMenuStripとシステムトレイのContextMenuStripで特定のドロップダウンを 共有したいと思っています。 調べたり試行錯誤した結果、1つのContextMenuStripを両方のDropDownに設定すれば良さそうに見えました。 ToolStripMenuItemとしてプラグイン用に公開しており、互換性の観点からToolStripMenuItemとして 公開したまま共有したいと考えています。 いい解決策をご存知の方おられましたら、ご教示ください。 Visual C# 2010 Express Edition + .NET framework 4.0 で開発しています。
コードページ298を使いたいんですが、そんなローカルかつ古くさいのが実装されているはずも無く…… 何か良い方法無いですかね?
>>925 何をいっているのかさっぱり分からないのはたぶん俺の側の問題ではないはず....
>>927 分かりづらくてすいません。
フォームのメニューの中にドロップダウンメニューがあるのですが、
そのドロップダウンメニューをシステムトレイから開くコンテクストメニューからも
開けるようにしたい、というのが目的です。
フォームのMenuStripとタスクトレイのContextMenuStripでメニューを共有したいです タスクトレイのContextMenuStripに提供しているToolStripMenuItemはプラグイン化されているので これをフォームのMenuStripで使うにはどうしたらよいでしょうか
>>928 そのフォームとタスクトレイって別プログラムなの?
CP298ってEBCDICじゃないのかw
>>928 そのフォームのインスタンスが常に存在している前提なら、
システムトレイ側のコンテクストメニューが表示されるタイミングで
フォーム側のMenuItemのクローンを作ってAddする方法でよいのでは?
クローンはMemberwiseCloneで通常はOK。
これでイベントハンドラも共有できる。
int i = MapObjects.FindIndex( (MapObject inMapObject) => (inMapObject is CoinBlock)); 何とかなりそう助かったわ クズどもありがとう
プラグインって何だったのか疑問が残るな。 一般的な意味ではなさそうだ。
=>とかなんだよ C#キモイな
>>936 Cのアロー演算子よりまし。
でも>>とかにしてもらったほうがタイプしやすかったかもしれんとは思う。
>>934 objects.OfType<CoingBlock>() とかもあるよ。
>>933 なるほど、クローンを作ればいいですね。ありがとうございます。
>>935 機能を拡張するDLLを読み込めるように作っており、
それをプラグインと呼んでいました。一般的な意味とは異なるのでしょうか。
すみません。
941 :
デフォルトの名無しさん :2011/06/19(日) 18:57:25.65
sw.WriteLine(item.Value.Replace(" ","").Trim()); XML化後のスクレイピングで" "が削除できません教えてください
942 :
デフォルトの名無しさん :2011/06/19(日) 18:59:25.85
消えたので連投 sw.WriteLine(item.Value.Replace("&NBSP;","").Trim()); XML化後のスクレイピングで&NBSP;が削除できません教えてください
>>942 nbsp が Unicode のU+00A0 1文字に置き換わってるとか、
大文字小文字が違うとか、
そんなのではなく?
Regex 使って RegexOptions.IgnoreCase して Replace
あと、同じく Regex で \s を消してみるとか。
945 :
デフォルトの名無しさん :2011/06/19(日) 20:08:09.49
VC#を起動してプロジェクトを作りました フォームにwebbrowser1を配置しました 右下のプロパティの所でurlにabc.htmlを書いたのですが表示出来ませんでした プロジェクト内に置いたabc.htmlを読み込んで表示する方法をご教示お願いします
出来ましたありがとうございます 頭にres://って書かないほうがよかったんですね
逆引きサンプル集の本ってないんですか?
ここで聞けばいいよ
>>951 ありがとうございます行き詰ったらここで勉強させて頂きます
win用GUIアプリを作るとき、コレからはじめるならC#1択なのかな?
俺は歳が歳だからC#しか覚える時間がない
webbrowser1に表示したhtmlを書き換えて表示したいのですが方法ございませんか? button1を押したらプロジェクト内に置いたa.htmlを表示して button2を押した時にa.htmlの特定のDOMを書き換えて表示したいのですが butoon2を押した時にa.htmlに上書きする形で全部書き直して表示するという方法は思いついたのですが 実行するたびに書き直すのは効率が悪いような感じもありまして、次に起動したときにa.htmlの内容が変わってしまうという 理想としてはもしくはstring html="html文書の内容";みたいにして c#側でhtmlを生成して(htmlファイルを作らない)表示する方法がございませんか?
956 :
デフォルトの名無しさん :2011/06/20(月) 12:39:34.88
でも実際さぁ、関西の人って文章打つとやっぱ関西弁になるの? しゃべるのと打つのじゃ別?
ありがとうございます参考にやってみました using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace HtmlRenshuu17 { public partial class Form1 : Form { public Form1() { InitializeComponent(); webBrowser1.DocumentText = "<html><head><script src=\"test.js\"></script></head><body><p>teset</p></body></html>"; } } } フォルダ内に置いたtest.js(中身はalert(1);のみ)を読み込みたいのですが 実行したらこのページのスクリプトでエラーが発生しましたとでます スクリプトを読み込まない場合はエラーはなくhtmlが表示できます webサーバ上で同じhtml文書を開いた場合も確認しましたがエラーは出ませんでした アドバイスをお願いいたします
jsのパスを絶対パスで指定しろ
C:\test.jsに置いて webBrowser1.DocumentText = "<html><head><script src=\"c:/test.js\"></script></head><body><p>teset</p></body></html>"; とやってみたのですが同じエラーがでます
せっかくstringでやってるんだから自分で読んで入れたらいいんじゃねえの
ライセンスの問題もあるので組み込めないのです
ローカルのファイルのパス指定は、file:///〜だろ
実行ファイルと同じ位置にtest.jsがあるならわざわざfile:///で絶対パスで書く必要ないと思うんだが
ところがそうでもないのだよ
カレントディレクトリをしつこく管理していればまあ何とかなるかもしれんが
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace HtmlRenshuu25
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
HtmlDocument doc = webBrowser1.Document;
if (doc == null) MessageBox.Show("エラー1");
HtmlElement jsElem = doc.CreateElement("SCRIPT");
jsElem.SetAttribute("type", "text/JavaScript");
jsElem.SetAttribute("src", "file:///c:/test.js");
if (doc.Body == null) MessageBox.Show("エラー2");
doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem);
}
}
}
>>963-966 ありがとうございます
こう書いてみましたが同じエラーが出ます
これなら動いた
HtmlDocument doc = webBrowser1.Document;
if (doc == null) return;
HtmlElement jsElem = doc.CreateElement("SCRIPT");
jsElem.SetAttribute("language", @"JavaScript");
jsElem.SetAttribute("type", @"text/JavaScript");
jsElem.SetAttribute("src", "
http://localhost/hoge.js ");
if (doc.Body == null) return;
doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem);
試してみたが、、、file:///test.js なら動いたな。 ドライブレターのコロンは問題出るのかも
あ、でもいきなりコンストラクタに書いたんではなく、 webBrowser1_DocumentCompleted()に書いたけどな。
完璧だ HtmlDocument doc = webBrowser1.Document; if (doc == null) return; System.IO.Directory.SetCurrentDirectory(@"C:\"); HtmlElement jsElem = doc.CreateElement("SCRIPT"); jsElem.SetAttribute("language", @"JavaScript"); jsElem.SetAttribute("type", @"text/JavaScript"); jsElem.SetAttribute("src", "file:///hoge.js"); if (doc.Body == null) return; doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem);
超完璧だ private void button1_Click(object sender, EventArgs e) { webBrowser1.DocumentText = "<html><head></head><body><p>test</p></body></html>"; } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { HtmlDocument doc = webBrowser1.Document; if (doc == null) return; System.IO.Directory.SetCurrentDirectory(@"C:\"); HtmlElement jsElem = doc.CreateElement("SCRIPT"); jsElem.SetAttribute("language", @"JavaScript"); jsElem.SetAttribute("type", @"text/JavaScript"); jsElem.SetAttribute("src", "file:///test.js"); if (doc.Body == null) return; doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem); }
>>969 さん
>>971 ありがとうございます。当方の環境にはapacheをインストール済みなのですがなるべくwebサーバを立てない環境でも動かせたらと思います
>>970 さんありがとうございます。コロンは問題があるのですね。メモに書いておきました。
>>972 さん
>>973 さんありがとうございます。試してみたのですがフォームのソースは<html><head></head><body><p>test</p></body></html>
で当方ではscriptが追加されているところを残念ながら確認できませんでした。
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument doc = webBrowser1.Document;
if (doc == null)
{
MessageBox.Show("11111111");
return;
}
System.IO.Directory.SetCurrentDirectory(@"C:\");
HtmlElement jsElem = doc.CreateElement("SCRIPT");
jsElem.SetAttribute("language", @"JavaScript");
jsElem.SetAttribute("type", @"text/JavaScript");
jsElem.SetAttribute("src", ".file:///test.js");
if (doc.Body == null)
{
MessageBox.Show("2222222222");
return;
}
doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem);
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.DocumentText = "<html><head></head><body><p>test</p></body></html>";
}
レスのミス private void Form1_Load(object sender, EventArgs e)ではなくて private void Form1_DoubleClick(object sender, EventArgs e)です
ソースには無いだけでJavaScriptは読み込まれてるよ
そうでしたか test.jsの内容は window.onload=function(){alert(1);}なのですが実行されません
alert(1); だけにしてみそ。
あるいは doc.GetElementsByTagName("HEAD")[0].InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem); としてみそ
>>977 DocumentText弄っても、そのタイミングでOnLoadは発生しないと思うんだ
>>978-980 ありがとうございます
alert(1);に書き換えてました。
doc.GetElementsByTagName("HEAD")[0].InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem);としても実行されませんでした
うちでは実行できたよ
ちょっと原因が良く分からないのでOSを入れなおすところからはじめてみます
984 :
デフォルトの名無しさん :2011/06/20(月) 20:00:57.63
C#でインターネット(ネットワーク)を勉強したいんだけど おすすめの本教えて!エロイ人!
C#に関係ない技術だから専門に解説している本は存在しない OSI参照モデルとかでググれば
986 :
デフォルトの名無しさん :2011/06/20(月) 20:55:18.01
Σ(||゚Д゚)ガビーン ないのか! OSI参照モデル・・・・・難しそうだorz レスとんくす
WebClient、WebRequest、Socketあたりマスターすればおk Socketが一番低レイヤーだからSocket使えるなら基本的に何でもできる
まあ、大概のことはWebClientだけあれば十分だけど。
Socket使い出すとソースがカオスになるのは俺だけか?
綺麗に書けば美しいよ memcached何かのソース見ても
インストール完了 結構時間かかった・・・
>>984 絶対現場主義VisualC#実践講座 Webアプリケーション編―開発の現場から生まれた実践テクニック&TIPS集
とか、どうだろうか?
ネットワークスペシャリストの資格を取ればいいよ。 俺はそれで結構わかった。
994 :
デフォルトの名無しさん :2011/06/21(火) 12:12:18.59
char[] chTrims = { '(', ')', '$', ',' }; コンマを消したいのですが消えません
それだけじゃ消えないだろ。 何呼んでるか知らんけど、trim系は先頭か末尾だぞ
996 :
デフォルトの名無しさん :2011/06/21(火) 14:03:48.99
乙
while(Ore == doutei) { Ore.Onanie(); Ore.life = Ore.life - 1 if (life == 0) { technobreak; } }
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。