1 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/26(木) 21:32:32.95 ID:RzRn9VkL0] ふらっとVisual C#,C♯,C#(初心者用) このスレッドは 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 関連スレ ふらっとC#,C♯,C#(初心者用) Part91 toro.2ch.net/test/read.cgi/tech/1335089085/ C#, C♯, C#相談室 Part71 toro.2ch.net/test/read.cgi/tech/1332575004/ こんな感じでソフトウェア板に立てたらどうかな
331 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 13:30:59.90 ID:XTsjM3La0] var sentences = text.Split("."); var list = new List<StringBuilder>(); list.Add(new StringBuilder()); foreach(var sentence in sentences) { list.Last().Append(sentence + "."); if(IsOneWord(sentence) == false){ list.Add(new StringBuilder()); } } return Sort(list); こんなかんじ?
332 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 13:39:41.01 ID:K9S0VvT90] >>330-331 ありがとうございました 参考にして作ってみます!
333 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 13:46:05.56 ID:mk4m3Qvr0] WPFでListboxを2つ配置して、ItemsSourceを同一のコレクションに設定した時の挙動についてなんですが コードでこのようにしたとき public partial class MainWindow : Window { ObservableCollection<Object> obj = new ObservableCollection<Object>(); public MainWindow() { InitializeComponent(); for (int i = 0; i < 50; i++) { obj.Add(CreateRectangle()); obj.Add(i.ToString()+"s String"); } listBox1.ItemsSource = obj; listBox2.ItemsSource = obj; } Rectangle CreateRectangle() { Rectangle r = new Rectangle(); r.Width = 20;r.Height = 20;r.Stroke = Brushes.Black; return r; } } 片方のListboxに表示されているRectangleはもう片方のListboxの表示からは取り除かれてしまいます stringについては両方同時に表示されますし、片方のDisplaymenberPathをNameなりHeightなりに設定した場合も同時に表示されます このWPFの図形の表示の仕組みについて解説お願いします
334 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 13:53:56.22 ID:/1f0rY470] UIElementがデータソースになった場合、 それは直接ItemsControlの子孫要素になる UIElementは一つの親にしか属せない 普通はRectangleはDataTemplateにして ItemsSourceにバインドするのはその構成要素だけ持つクラスにする
335 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 19:56:05.31 ID:C/I3uX5s0] XmlSerializerを使ってデータを一時的に保存したいと思っています. 今作っているクラスはUserとEventListとEventの三つになり,こんな感じに他にデータも含みます. User -string name -EventList --Event ---int x,yなど 保存したいのはUserクラスで,List<Event>を含んでいたので, handcraft.blogsite.org/ComponentGeek/ShowArticle/60.aspx を参考に,IXmlSerializableを実装してリストを保存するだけのクラスEventListを作りました. そしてEventやEventList単体のシリアライズ化には成功しました. ですがUserクラスのシリアライズが上手く行きません… Userクラスはこうなっています public class User { public EventList event_list; public string name; public User() { } }
336 名前:335 mailto:sage [2012/06/21(木) 19:57:19.59 ID:C/I3uX5s0] シリアライズのコードはこうなっています. XmlSerializer serializer = new XmlSerializer(typeof(User)); using (FileStream fs = new FileStream(@"C:\test.xml", FileMode.Create)) { serializer.Serialize(fs, user);} 実行すると $exception {"There was an error reflecting type 'mtest.User'."} System.Exception {System.InvalidOperationException} というエラーがXmlSerializer作成時に出ます. event_listをコメントアウトすると上手く行くのですが,クラスの中に自作クラスを持つ場合は別の処理方法があるのでしょうか? よろしければ解決方法などを教えて頂けると幸いです.
337 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 22:40:14.42 ID:XTsjM3La0] >>336 別に普通にやればいいだけなはずだけどなあ Listも変なことしなくてもそのままSerialize出来ると思うけど publicなゲッターセッターと引数なしのコンストラクタを持っていること コレクションの場合はAdd(T item)を持っていること といった感じだったと思う
338 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/22(金) 00:18:49.52 ID:D9lptrmf0] 駄目なのはList<T>[]であってList<T>じゃないよ?
339 名前:335 mailto:sage [2012/06/22(金) 22:10:59.58 ID:bY8JRY9Z0] >>337 >>338 おうふ…勘違いしてました,Listのシリアライズは問題無いのですね. いまやったところ単体で普通にできました. またUserごとシリアライズしようとしたときのエラーですが,そちらも解決しました. 行数が多すぎて怒られた&そんなに関係ないだろうと思って消していたのですが実際はXmlAttributeをつけていて Userクラスはこうなっています public class User { [XmlAttribute("user_event_list")] public List<Event> event_list; [XmlAttribute("name")] public string name; public User() { } } これでエラーが出たのでEventListクラスを作ったのですが,どうやら問題はXmlAttributeにあったらしく, event_listの直前のものを消したら問題無く動きました. 皆さんどうもありがとうございます,とても助かりました.
340 名前:333 mailto:sage [2012/06/22(金) 22:51:30.84 ID:VRm8BDOa0] >>334 解説ありがとうございます 表示されない理由はばっちり腑に落ちました > 普通はRectangleはDataTemplateにして > ItemsSourceにバインドするのはその構成要素だけ持つクラスにする よければ、ここについてもう少し教えてください いま、Rectangle型のmyShape をメンバにもつクラス c1 を設定し、これのコレクションをListboxのソースとしたとき <DataTemplate x:Key="myTemplate"> <StackPanel> <Rectangle Height="{Binding Path=myShape.Height}" Width="{Binding Path=myShape.Width}" Stroke="{Binding Path=myShape.Stroke}"/> </StackPanel> </DataTemplate> とし、Listboxのテンプレートとして適用すれば、全ての項で長方形は同時に表示することができました ここでmyShapeの型をRectangleと限定せず、flameworkElementなどにして、 c1のインスタンスにはEllipceやその他のShapeを自由に入れられるようにし、それらを表示することは可能でしょうか
341 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/23(土) 16:57:23.81 ID:4W1+go0K0] int型配列a(要素数100)から等確率でランダムに10個の要素を選んで選んだ順に 配列b(要素数10)に代入するというプログラムを作りたいのですが、 自分が考えたのはひたすら100個のなかから1個ずつランダムで選んでいき、 前選んだ要素とかぶった場合はやり直し(棄却) という感じで作ったのですが、 選んでいくにつれて棄却する回数が多くなってしまい、時間がかかってしまいます。 この場合どのようなアルゴリズムで作るのが効率がいいのでしょうか?
342 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/23(土) 16:59:23.81 ID:VvicIvbe0] 配列からランダムに一個選ぶ 選んだのを末尾のと交換する 個数を一個減らしてランダムに選ぶ・・・
343 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/23(土) 16:59:57.81 ID:F1v3/Dpc0] 配列じゃなくて動的配列(List)を使えば、使用した要素を捨てられる どうしても配列でやりたいなら被ったら上か下を選ぶって処理を入れる
344 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/23(土) 17:37:18.45 ID:8zHjbdI20] いわゆる重複しない乱数と同じ考え方だからググれば腐るほどでてくる
345 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/24(日) 15:54:12.67 ID:5cM7Ezza0] 配列内の要素をシャッフルして先頭から10要素取り出せば?
346 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/25(月) 01:06:49.19 ID:2vZfjApk0] >>345 それだとM個からN個を取り出すときO(M)になるから非効率
347 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/25(月) 01:49:47.37 ID:QcDMISKM0] >>346 そうか。 要素数100程度みたいだからそんなんでいいかな、と勝手に思ったんだ。 そこまで考えてなかったよ。
348 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 09:46:52.99 ID:/TbFwKc10] >>340 データソース側にUIElementは使うもんじゃないってば DataTemplateのTargetTypeでデータソースの型によって適用するDataTemplate切り替えたりする <ListBox ItemsSource="{Binding ...}"> <ListBox.Resources> <DataTemplate DataType="{x:Type my:RectanglePattern}"> <Rectangle Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/> </DataTemplate> <DataTemplate DataType="{x:Type my:EllipsePattern}"> <Ellipse Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/> </DataTemplate> </ListBox.Resources> </ListBox> あるいはデータソースをGeometry(を持ったクラス)にしちゃって DataTemplateはImage/DrawingImage/GeometryDrawingでやるとか
349 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 16:08:21.13 ID:yCJdNuh10] XAMLグロいなー 誰が考えたんだコレ
350 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 18:21:10.14 ID:q2NBJkUf0] XML自体人が読み書きすることは重視してないからねー 構造的であることは人間にも利点があるが 人間にとってはせいぜい段組がしてあれば十分だ こんなガチガチな仕様にしたのはコンピューターに合わせたからで そのフォーマットの拡張系なんだから、よりコンピューターしか理解できないようになっていくのは当然だな 俺の好きなフレームワークにも …and one more thing: Making humans edit XML is sadistic! と書いてある
351 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 19:17:05.04 ID:00qqaFC30] デリゲートって、クロージャみたいに親のメソッドで扱われる変数を保持できるけど、 public void Hoge(object obj) { var act = new Action<obj>((o) => Fuga(o)); this.actionList.Add(act); } これみたいに、Actionをフィールドのリストに入れてずっと保持する場合だと、 objの参照元はずっとGCされないまま(メモリリーク)になるの? これなら実行タイミングを好きにずらせるから便利だなーと思ったけど、 objの参照をずっと掴んでるなら微妙だな。
352 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 19:21:22.63 ID:q2NBJkUf0] そう 便利だけどよく分からずに手を出すのはお薦めできない
353 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 19:21:49.11 ID:/TbFwKc10] そりゃListに保持するってことはいつか使うって宣言も同然なんだから いつの間にか黙って消えてたら困るだろ それをリークというのはおかしい
354 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/26(火) 19:27:48.27 ID:yCJdNuh10] ラムダの中でobj使ってないから参照もされないでしょう Action<obj>っていうのもコンパイルエラーじゃないの
355 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/27(水) 01:25:25.97 ID:CEBjiC+M0] objを使いたい場合 var act = new Action(() => Fuga(obj)); 引数をとりたい場合 var act = new Action<object>(o => Fuga(o)); 引数をとりながらも無視してobjを使いたい場合 var act = new Action<object>(o => Fuga(obj));
356 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/27(水) 14:23:59.88 ID:ea0YHqGT0] パワポの左側のスライド一覧や、デスクトップ上でのアイコンの並び替えみたいに、 画像オブジェクトをD&Dによって移動・挿入可能なUIを作りたいと思っています。 ListViewに画像を表示させればかなり近いことが出来るのですが、 動画編集ソフトのタイムラインのように横方向に並べたいと思っています。 わりとよくあるUIだと思うのですが、既にコンポーネントとして利用できるようなものはありませんでしょうか?
357 名前:名無しさん@お腹いっぱい。 [2012/06/27(水) 19:44:31.88 ID:VN8+g37h0] ListViewのAutoArrange切って自前で配置すれば行けるような気もするけどどうだろ。
358 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/27(水) 20:06:12.30 ID:j1UJcMae0] WPFなら既存のコンポーネントを使うまでもなく一瞬でできる
359 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/28(木) 03:36:32.96 ID:Tqgyy0T20] どうやんのそれ
360 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/28(木) 10:27:09.98 ID:+mVAWSDX0] >>359 ideone.com/zKXvF カレントディレクトリの画像の水平リスト表示
361 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 16:26:48.34 ID:XSFFZlBa0] >>360 ほう 随分シンプルになるね
362 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 17:16:06.56 ID:RwTE6+Al0] ttp://msdn.microsoft.com/ja-jp/library/ms734785(v=vs.90) 上のページで説明されている、 「If ステートメントの true 分岐部で、結果の TextBox コントロールから Invoke メソッドを呼び出します。その際、WorkflowCompletedEventArgs 型の新しいジェネリック EventHandler、workflowRuntime.WorkflowCompleted を渡します。 イベント ハンドラへのパラメータとして、sender および e ローカル変数を渡します。」 という部分では実際にどのようなコードを書けば良いのかわかりません。 どなたか教えて頂けないでしょうか。よろしくお願いします。
363 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 17:47:20.97 ID:WHdThZGy0] WFってAsyncがあれば不要じゃね
364 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 17:50:26.45 ID:RwTE6+Al0] >>363 会社で上からやれって言われまして。。 今までJavaだったもので、チュートリアルですら何言ってるのかわからない有様です。
365 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 17:53:18.26 ID:WHdThZGy0] それでなんでいきなりWFなんだw Javaが使えるならC#の文法は使いながら慣れればいいから、本屋でVisual C#の入門書を買ってこい
366 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 17:55:55.36 ID:RwTE6+Al0] >>365 シェアポイントとWF使って業務系のアプリ作るんだそうです。 C#やってる人に聞いてみたのですが、>>362 の内容分からないって言うんですよね。。
367 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 18:05:07.13 ID:WHdThZGy0] どういうことか知らんが英語版に切り替えたらその部分のコードが表示されたぞ
368 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/29(金) 18:12:02.03 ID:RwTE6+Al0] >>367 ありがとうございます!!英語版に切り替えるというTipsを頂きました。
369 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/30(土) 00:26:26.46 ID:mUaSV7pq0] Control..::..ControlCollection Controls の ..::.. ってどういう意味ですかね?
370 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/30(土) 01:04:34.73 ID:/TAxHS/T0] 内部クラスだとMSDNではなぜかそうなってるがC#でそう書けるわけではない 内部クラスを区別したいときは Control+ControlCollection のように ドットの代わりにプラスで区切る方が普通だと思う
371 名前:356 mailto:sage [2012/06/30(土) 16:06:24.27 ID:TtGpnjWE0] >>357 >>360 返事が遅れてすみません. 後者のListBoxを使ったやり方で結構いい感じに出来ました! 後はD&Dを実装してみることにします. どうもありがとうございました!
372 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/30(土) 16:51:28.38 ID:bOu8zaDv0] 昨日、MOBについて確認をしていて、以下の通りだと考えました もし間違っている点があったら指摘していただけませんか? @StreamWriter(Name, false, Encoding.xxx)、AEncoding.xxx.GetBytes()、BEncoding.xxx.GetString() と共通の「Encoding.xxx」があったとして、UTF8などBOMが付く可能性があるEncodingの扱いは A.「Encoding.xxx」が「UTF8Encoding」の場合、@BOMあり、ABOMなし、BBOMなし B.「Encoding.xxx」が「UTF8Encoding(true)」の場合、@BOMあり、ABOMなし、BBOMなし C.「Encoding.xxx」が「UTF8Encoding(false)」の場合、@BOMなし、ABOMなし、BBOMなし となり、@はBOMの有無を選択できるが、A、Bは常にBOMが付与されない てっきりEncoding.xxx.GetString()は選択できるものかと思っていたら、違ってました
373 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/30(土) 17:13:44.19 ID:bOu8zaDv0] × 昨日、MOBについて確認をしていて、以下の通りだと考えました ○ 昨日、BOMについて確認をしていて、以下の通りだと考えました
374 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/30(土) 21:29:25.30 ID:T5RC3JM20] 確認したなら合ってるんじゃないの
375 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/03(火) 02:33:11.58 ID:QUnrlhAEP] BOM自体UTF16用のコンテナフォーマットで、プレーンテキストだとは思えない。 だからファイル保存に用いるWriterだけがそれを意識するで違和感は無いけどね。 >てっきりEncoding.xxx.GetString()は〜〜 GetStringで返却されるものは文字列オブジェクトだよ。 しかもその内部形式はUTF16LEを元にしているはず。 ちなみにUTF8だと基本BOM不要。
376 名前:356 mailto:sage [2012/07/04(水) 17:05:03.96 ID:lYNmBOff0] WPFでListBoxを作るときに,ItemsPanelTemplateにStackPanelを指定することで横方向に要素を並べることはできました. ですが今やっている方法だとXAMLで指定した数しか使えないため,例えばボタンを押すとListBoxが増えていくといったことができません. この場合どのようにやれば良いのでしょうか? ListBoxと横方向のStackPanelを作ることはできたのですが,コード上でどのようにこの2つを関連づければいいのかがどうしてもわからなくて…
377 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/04(水) 17:07:01.83 ID:gyGKV+Vm0] 動的に増えるものはコードで書くしかないんじゃないのかな?
378 名前:356 mailto:sage [2012/07/04(水) 17:10:11.74 ID:lYNmBOff0] >>377 はい,なので今はボタンを押したらコードが動いて横方向のListBoxを作る,といった事をやろうとしています. ですがXAMLで横方向のListBoxを作る方法しか知らず,コードでどのように作ればいいのかがよく解りません… XAMLだと <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" Height="{Binding PhotoListBox.Height}" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> でいけるのですが…
379 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/04(水) 17:24:57.33 ID:gyGKV+Vm0] XAML ideone.com/T6pIf cs ideone.com/fwfcg
380 名前:356 mailto:sage [2012/07/04(水) 18:05:35.20 ID:lYNmBOff0] >>379 ありがとうございます,追加の方法はわかりました. ただ,今 >>360 さんの ideone.com/zKXvF のように,画像を横方向に並べたいと思っています. ですがListBoxは初期状態では縦方向に追加されていってしまうので, コード上で作ったListBoxも横方向に並べることはできたりしませんでしょうか?
381 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/04(水) 18:09:14.74 ID:gyGKV+Vm0] >>380 できるよ WPFの場合カスタムクラス作り放題でそういう細かいところの情報がよくわからないので いれられなかっただけなんだけどね テンプレート作っておけばインスタンス作って所定の親の配下に入れる前に適応すれば 同じような物が作れるよ
382 名前:356 mailto:sage [2012/07/04(水) 19:08:38.79 ID:lYNmBOff0] >>381 なるほど…とりあえず不可能ではないのですね. テンプレートについてよく解ってないので,その辺を中心に勉強してみます. どうもありがとうございました.
383 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/04(水) 19:10:32.28 ID:gyGKV+Vm0] >>382 まずは>>380 を参考にしてるのならテンプレートとかを分離して リソース化することだね 最近触ってないのでうまくまとめて上げられないけど
384 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/05(木) 10:34:39.47 ID:tOoFlwMl0] カスタムコントロールを作った方が簡単だと思うよ >>360 のルート要素と基底クラスをUserControlに変更するだけ
385 名前:356 mailto:sage [2012/07/05(木) 16:43:11.64 ID:Ss1RhDP50] >>383 ありがとうございます! リソース化する,という方法があることを知って思い通りになりました! <Window.Resources> <ItemsPanelTemplate x:Key="HorizontalPanel"> <StackPanel Orientation="Horizontal" Height="{Binding PhotoListBox.Height}" /> </ItemsPanelTemplate> </Window.Resources> ListBox lb = new ListBox(); lb.ItemsPanel = (ItemsPanelTemplate)this.Resources["HorizontalPanel"]; >>384 ありがとうございます. ですがすみません,カスタムコントロールとかは全く知らなかったので活かせませんでした…精進します.
386 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/08(日) 00:29:36.30 ID:ec05ZSJJ0] Rijndaelmanagedを使って暗号化を試みています CipherMode列挙体がCBC他の時には問題なく暗号化が出来るのですが、CTSとOFBの時にはエラーになります エラー「指定された cipher モードは、このアルゴリズムには有効ではありません。」 RijndaelManaged RM = new RijndaelManaged(); として、CTSはRM.Mode指定時に、OFBはRM.CreateEncryptor()生成時にエラーが発生します モードにこだわりはないのでCBCを使えば良いのですが、調べてみてもRijndaelmanagedでCTS、OFB使えないという事例がなく、何かミスがあるのではないかと気になっています もし思い当たることがあれば教えて下さい RijndaelManaged RM = new RijndaelManaged(); //ブロックサイズ RM.BlockSize = 128; //キー最大長 ※事前に128、192、256から選択 RM.KeySize = Cipher_Rijndael_Size; //CBCモード ※事前に各モードから選択 RM.Mode = Cipher_Rijndael_Mode; //パディングモード RM.Padding = System.Security.Cryptography.PaddingMode.PKCS7; //初期化ベクトルの設定と取得(ブロックサイズと同サイズ=128bit) RM.GenerateIV(); byte[] bytesIV = RM.IV; //処理済みパスワードをセット RM.Key = Cipher_Rijndael_Key; //暗号化オブジェクトの作成 ICryptoTransform encrypt = RM.CreateEncryptor();
387 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/10(火) 12:07:54.64 ID:vnyv6GV90] WPFで好きなタイミングで画面全体のスクリーンショットを取って保存しようとしています. やたたいことは普通のC#で書くとこんな感じなんですが,WPFだとScreenやCopyFromScreenが使えません. string take_screenshot() { Rectangle rect = Screen.PrimaryScreen.Bounds; Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bmp)) { g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, CopyPixelOperation.SourceCopy); } DateTime time = DateTime.Now; long now = time.ToFileTimeUtc(); string filename = now.ToString() + ".png"; string filepath = screenshot_folder + "\\" + filename; bmp.Save(filepath, ImageFormat.Png); return filename; } 一応SendKeysで取る方法はあったのですが,キーイベントを使わない方法を探しています. www.ipentec.com/document/document.aspx?page=csharp-wpf-screen-capture-sendkey-winform このページのCopyFromScreenメソッドを用いる方法も,上のコードと同じ理由で動きません. どなたか他の方法をご存じの方はいらっしゃいませんでしょうか?
388 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/10(火) 12:23:52.79 ID:y0AM8kSz0] System.Windows.Forms.dllとSystem.Drawing.dllを参照すれば WinFormのときのコードでいけるよ
389 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/10(火) 17:05:29.33 ID:WdTj8ymG0] WPFのウィンドウ内のスクリーンショットを撮るのであればRenderTargetBitmapでできるけど 画面全体はWPF全然関係ないな そもそもそんなもんWPF使って作る必要あるのかと
390 名前:387 mailto:sage [2012/07/11(水) 11:06:59.65 ID:bXFj3Hio0] >>388 動きました、ありがとうございます! >>389 元々WPFで作っていて、そこに全体をキャプチャする機能をつけようとして詰まっていました。 私の説明がはしょりすぎでしたね、すみませんでした。
391 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/20(金) 14:57:37.20 ID:+FWU6vnR0] ウィンドウ上のボタンを押すと, ウィンドウが消える→処理実行→ウィンドウが元に戻る といった動作をしたいと思っています. そこでこのようなコードを書いてみたのですが,それぞれ独立に動かすと上手くいきますが, 上記のように一連の流れにすると上手くいきません. public void window_visible() { Visibility = System.Windows.Visibility.Visible; WindowState = System.Windows.WindowState.Normal; } public void window_close() { //ウィンドウを非可視にする Visibility = System.Windows.Visibility.Collapsed; } public void play() { window_close(); 長い処理 window_visible(); } おそらくは非表示にしても,こちらの処理中なのでウィンドウの再描画が行われないのが原因ではないかと思っているのですが, 再描画をするにはどのようにすれば良いのでしょうか? window_close()の後にShow()を実行してみましたが最終的に非表示になってしまい,処理中に非表示にはなってくれませんでした…
392 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/20(金) 15:20:17.18 ID:ooVlvWEf0] これWinFormじゃないよね WPF?
393 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/20(金) 15:29:58.29 ID:Ku4ZC7nA0] window_close(); Task task = Task.Factory.StartNew(長い処理); task.ContinueWith(_task => this.Dispatcher.Invoke((Action)this.window_visible)); こんな感じ? .NET 3.5までならBackgroundWorkerで
394 名前:391 mailto:sage [2012/07/20(金) 16:36:09.50 ID:+FWU6vnR0] >>392 はい,WPFでした. >>393 動きました,ありがとうございます. C#だと別スレッドで動かすのはこんなに簡単なんですね.
395 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/20(金) 17:23:17.65 ID:+FWU6vnR0] Listboxの要素をウィンドウ外にD&Dすると削除するようなコードを書こうとしています. D&D自体のコードはこちらを参考にしており,同じウィンドウ内の別のListboxへは問題無くD&Dできています. main.tinyjoker.net/Tech/CSharp/WPF/ListBox%A4%CE%A5%A2%A5%A4%A5%C6%A5%E0%A4%F2%C8%BE%C6%A9%CC%C0%A5%B4%A1%BC%A5%B9%A5%C8%A4%C4%A4%AD%A5%C9%A5%E9%A5%C3%A5%B0%A5%A2%A5%F3%A5%C9%A5%C9%A5%ED%A5%C3%A5%D7%A4%C7%CA%C2%A4%D9%C2%D8%A4%A8%A4%EB.html 古いですが似たような事をしようとしていた人がいましたが oshiete.goo.ne.jp/qa/2668253.html ウィンドウ外でドロップしてもe.ActionがDropになりません. Continueは出続けているのですが,ドロップしたときのイベントが取れていないようです. ドロップしようとしてもマウスカーソルが道路標識の通行止めマークになるので,それが原因だと思うのですが… どなたか解決方法をご存じの方はお教え下さい.
396 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/20(金) 19:25:37.01 ID:tVdxnnS40] 無理
397 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/20(金) 21:35:04.33 ID:s2qLDoTI0] マウスカーソルの移動をピクチャーボックス内に制限したいんですけど Cursor.Clip = pictureBox1.Bounds; としても、ピクチャーボックスのクライアント領域とは全然違う領域に 制限されてしまうんですけどどうしてですか? ちなみに、Cursor.Clip = this.Bounds; とすると、ちゃんとピクチャーボックスがのっているフォーム内に きっちりと移動が制限されます。 Cursor.Clip = pictureBox1.ClientRectangle; としてみても駄目でした。
398 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/21(土) 00:33:29.87 ID:vgwO4anV0] >>397 スクリーン座標
399 名前:395 mailto:sage [2012/07/23(月) 10:48:31.41 ID:ElUZG2xN0] >>396 無理ですか… D&Dが開始されたけどドロップできる要素にドロップされずに終了した事を検知できればいけると思ったんですが, やっぱり無理なんですね…
400 名前:395 mailto:sage [2012/07/23(月) 11:17:14.75 ID:ElUZG2xN0] 自己解決しました. >>399 の観点で探したら DragDrop.DoDragDropの戻り値がドロップ失敗した時にDragDropEffects.Noneとなるので, それを判定して処理すれば良かったようです.
401 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/27(金) 21:33:17.33 ID:Csfv2Zcb0] テキストファイルの中身をそのままstring型の変数に代入するにはどうやればいいですか 第二表示.txt というテキストファイルのテキストをそのままstring型変数にいれたいんだけど。
402 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/27(金) 21:34:26.76 ID:Dpsmk2s/0] File.ReadAllText
403 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/27(金) 21:40:36.93 ID:Csfv2Zcb0] 402 ありがとう
404 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/28(土) 16:18:32.30 ID:XfGkqQ3q0] 404 Not Found
405 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/30(月) 22:00:31.79 ID:pkNqJGc30] DGVだけの画面があって、 DGVはセルの大きさに応じてサイズが変わるようにしてあるんですが、 肝心の画面サイズがデフォルトのままで困っています。 AutoSizeプロパティをtrueにするだけでは不十分なんでしょうか・・・
406 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/30(月) 22:04:32.04 ID:9qGqvDtq0] DGV.Dock = Fill; って話?
407 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/30(月) 23:10:46.00 ID:pkNqJGc30] いえ、 例えばDGVのサイズが(100,50)の時にFormをロードしたらFormサイズは(100以上、50以上)となり、 (200,100)の時は(200以上、50以上)となるような設定をしたいと考えています。 FormのサイズプロパティにDGVのHeightとWidthを当てようとしたのですが、エラーとなってしまいました
408 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 00:34:21.44 ID:TkWW1iZxP] dgvはAnchor=Top|Left Dock=None FormはAutoSize=True それだけ
409 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 00:43:39.97 ID:TkWW1iZxP] でも"以上"の部分によるから晒してみれば?
410 名前:名無しさん@お腹いっぱい。 [2012/07/31(火) 01:34:27.17 ID:9WuHUHVs0] itpro.nikkeibp.co.jp/members/NSW/ITBASIC/20050427/160243/ このサイトを参考にして作業を進めているのですが表示させる絵柄は どこにどのようにして用意すればいいのでしょうか?
411 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 01:35:26.63 ID:9WuHUHVs0] sage忘れすみません。
412 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 01:55:31.11 ID:XZMweJmZ0] 以前似たようなカード欲しい人が居たので作ったのがあった www.dotup.org/uploda/www.dotup.org3257846.zip.html 著作権フリーつーか絵カードの中味は用意してないので 欲しければカードを出力するソースもあるよ
413 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 02:26:02.19 ID:KndnsOOq0] VS2003にトランプ画像なんて付いてたんだ。 サンプル用かな?知らなかった。 >>412 準備良すぎだろw
414 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 18:18:28.45 ID:r1hnuSpm0] >>>410 プロジェクト作って貼り付けて実行すればOK ideone.com/JvCiv
415 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 23:08:26.03 ID:9WuHUHVs0] >>412 >>414 亀ですがありがとうございます。 そして>>414 のプログラムが何がなんだかわからないです・・・ 実行したらフォームが表示されるだけでデスクトップに空のファイルができてたのでそこに画像入れればいいんですかね?
416 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/07/31(火) 23:14:36.90 ID:r1hnuSpm0] しまった LoadとShownはデザイナから先に追加しておかないと駄目なんだな じゃあこれで。こっちはプロジェクト作って貼り付ければOK ideone.com/Z2WDG
417 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/10(金) 14:31:22.34 ID:Ni+qk6Zt0] ユーザーコントロールを作っているのですが、 TableLayoutPanelの GetRowHeightsとGetColumnWidths が 'System.Windows.Forms.TableLayoutPanel' に 'GetColumnWidth' の定義が含まれておらず、型 'System.Windows.Forms.TableLayoutPanel' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 というエラーになります。 Windows 7 professional Visual Studio 2010 professional .NET Framework Client Profile 4 でやってます。 using System.Windows.Forms; も入ってます。 どうしたら、このメソッドが使えますか? 使えないなら使えないで、こんな糞みたいなメソッドじゃない、クールな方法はありませんか?
418 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/10(金) 14:35:43.71 ID:8esUUh1G0] 糞みたいなメソッド じゃなくて 糞みたいなコード 書いてるんじゃないの?
419 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/10(金) 14:40:35.40 ID:IFN3OfFB0] ま、ソース見ないと分からんね
420 名前:417 mailto:sage [2012/08/10(金) 14:41:17.78 ID:Ni+qk6Zt0] すいません。s が抜けてました。
421 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/10(金) 14:43:06.49 ID:8esUUh1G0] これが間違ってないとすれば書いてるコードがおかしいとしかいえない msdn.microsoft.com/ja-jp/library/system.windows.forms.tablelayoutpanel.getcolumnwidths.aspx msdn.microsoft.com/ja-jp/library/system.windows.forms.tablelayoutpanel.getrowheights.aspx
422 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/10(金) 14:44:48.72 ID:IFN3OfFB0] プロジェクトの形式でクラスライブラリを選んでて、アセンブリ追加していないとか
423 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/10(金) 15:39:15.98 ID:ggeryw4P0] >>418 正解w
424 名前:名無しさん@お腹いっぱい。 [2012/08/14(火) 01:59:51.20 ID:KAfHN7UAO] はじめまして。 C#のTimer使ってピクチャーボックスを表示したり非表示にしたりってどう書いたらいいんでしょうか? モグラ叩きみたいのにしたいんでできれば表示する場合はランダムにしたいです。
425 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/14(火) 03:11:22.51 ID:KC/ugEqj0] >>424 コピペすればそのまま動くと思う ideone.com/fjYPG 部分的に未完成
426 名前:名無しさん@お腹いっぱい。 [2012/08/27(月) 21:29:03.92 ID:DD8oSj/T0] libmp4v2.dll をVC#で使っている方おりますでしょうか? code.google.com/p/mp4v2/downloads/detail?name=mp4v2-r479-windows-binaries.zip&can=1&q= ここを参考にしているのですが、MP4Readの段階でPInvokeStackImbalanceを出すので 難儀しております。。 social.msdn.microsoft.com/Forums/en-US/clr/thread/d8197416-0447-4e3a-a159-004d20a92f30
427 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/27(月) 21:48:39.38 ID:72/ENMn20] しょっぱなじゃねえか dllの呼び出し規約がcdeclなんじゃないの
428 名前:名無しさん@お腹いっぱい。 [2012/08/27(月) 21:49:38.20 ID:7nW8yddP0] なぜコードを晒さないんだろうな・・・
429 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/31(金) 08:58:01.69 ID:2PB5qGf20] こういう似たような条件同士のif文があったとして .if(strChinko == "黒" || strChinko == "白"){ . MessageBox.Show("Good!"); .} こういう風に省略して書く方法がC#にはありますか? .if(strChinko == "黒" "白"){ . MessageBox.Show("Good!"); .}
430 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/31(金) 09:30:22.86 ID:WZcIV23T0] ない if (new[] { "黒", "白"}.Contains(strChinko)) というのもあるが、数個くらいなら普通に||で並べろ
431 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/31(金) 15:23:39.98 ID:cC27pdt50] >>429 ifじゃないけど ideone.com/UqFEn