[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 01/30 00:29 / Filesize : 173 KB / Number-of Response : 666
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part92



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/


こんな感じでソフトウェア板に立てたらどうかな

292 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/08(金) 21:26:45.75 ID:H4JMKmsI0]
カスタムコントロールの中のComboBox(Bとする)の.Itemsに他のクラスからアクセスしたいと思っています
当該Itemsに別データの配列を突っ込みたいので、カスタムコントロールのプロパティにしようかと思ったら、setの記載で読み取り専用だからできねーよカスと怒られます
なにかよい方法はないでしょうか?

public ComboBox.ObjectCollection B_.Items
{
set
{
B..Items = value;
}
get
{
return B..Items;
}
}

293 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/08(金) 21:33:08.47 ID:KTgDzfcK0]
>>292
ComboBox.DataSourceプロパティ

294 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/08(金) 22:43:38.32 ID:H4JMKmsI0]
下記で期待する動きになりました
ありがとうございました
getもDataSourceにせんでいいのかな?と迷いましたが、デザイナー上の入力を考えるとこっちの方がベターぽいのでこれで行きます

public object B_.Items
{
set
{
B.DataSource = value;
}
get
{
return B.Items;
}
}

295 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/08(金) 23:36:24.17 ID:1FPwfIgl0]
てst

296 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/09(土) 22:24:13.82 ID:/l9t5PUy0]
Visual Studio Express 2012 for Windows Desktop
blogs.msdn.com/b/visualstudio/archive/2012/06/08/visual-studio-express-2012-for-windows-desktop.aspx

297 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/09(土) 22:39:56.78 ID:km1yHHW40]
そりゃまあ、普通に考えたら出ないとおかしいよね

298 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/09(土) 22:41:49.99 ID:/l9t5PUy0]
だってVC++あるしなあ

299 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/09(土) 23:50:34.37 ID:8fI3WDv10]
Formは入ってるの?

300 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 13:44:32.26 ID:JcRdqHi90]
C#どころかプログラミング始めたての初心者で申し訳ないのですが質問させてください。

if (A != B)
{
return;
}
do();



if (A == B)
{
do();
}

では同じ処理になると思うのですが、どちらを用いるのが一般的なんでしょうか



301 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 13:56:41.08 ID:+ns6eJGu0]
前者はガード句と呼ばれる書き方で、主にifのネストが深くなった時に使う
ifが1段しかないのなら後者

302 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 13:58:07.44 ID:t7lhSWC+0]
しっくり来る方でいいでしょ

303 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 14:04:31.24 ID:+ns6eJGu0]
しっくりこないんですぅ

304 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 14:36:26.02 ID:JcRdqHi90]
>>301
>>302

レスありがとうございました。参考にさせてもらいます

305 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 14:41:36.15 ID:JcRdqHi90]
重ねて質問すみません

txtBox1.Clear();
txtBox2.Clear();
txtBox3.Clear();

これを繰り返し構造でスマートに書きたいのですが、変数等を用いれば可能でしょうか

306 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 14:43:50.00 ID:t7lhSWC+0]
var array = new[]{ tb1, tb2, tb3 };

foreach(var tb in array){ tb.Clear(); }

とかかな

307 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 14:45:11.20 ID:+ns6eJGu0]
FormコンストラクタのInitializeComponent()の後ろで配列にでも入れておけ
foreachで繰り返せる

308 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 14:59:08.22 ID:JcRdqHi90]
なるほど!同じ型の配列に入れておけば良かったんですね
ありがとうございます

309 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 21:05:08.87 ID:RMEDkwv20]
製品版のVisualStudioってメンバー変数のプリフィックスに_とかつけられます?

310 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 21:45:47.86 ID:+ns6eJGu0]
むしろなぜ付けられないと思うの?



311 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 22:10:12.18 ID:RMEDkwv20]
Expressでできないからですね
Formのコントロール変数に自動で_をつけてくれたら便利だと思いまして

312 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 22:15:58.50 ID:+ns6eJGu0]
全然意味合いが違うじゃねえか
質問を略すな

Pro版でもできません

313 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 22:19:28.22 ID:MHePrPj+0]
自動でってところがミソか

314 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/10(日) 23:40:57.57 ID:RMEDkwv20]
ありがとうございます。やっぱり無理でしたか・・・

315 名前:名無しさん@お腹いっぱい。 [2012/06/14(木) 07:03:26.20 ID:98NsRCek0]
Formを継承したクラスがいくつかIDisposableなオブジェクトを持っていて、それらをDisposeしなければいけない場合
どこに書いたらいいんでしょうか。

Form1.Designer.csの方にFormのオーバーライドされたDisposeメソッドがありますが、
そこに追加しちゃってもいいのでしょうか。(デザイナの方に影響与えたりしません?)

それともDisposedイベントでやるべきなんでしょうか。

316 名前:名無しさん@お腹いっぱい。 [2012/06/14(木) 07:36:22.23 ID:A0uxVl2o0]
1. そもそもインスタンススコープで扱うべきか考える
 実はメソッド単位で扱えるものなんじゃないの?という回帰。

2. コンポーネント化することもちと考える。
 Formと同じ寿命のDisposableなオブジェクトがあるってことは、
 Formにロジックを詰め込みすぎてないか?
 ロジックを然るべきレイヤに分けて、コンポーネント化しちゃえばいんじゃね?という発想。

3. Disposeしたいというのなら
 .Designer.csのオーバーライドされたDisposeメソッドに書いちゃって大丈夫。

317 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 08:37:45.34 ID:SlYrQktU0]
前から思ってたけどcomponentsフィールドっていつ使われるんだろ
あれに追加されたらFormが破棄されるとき一緒にDisposeしてくれるよね

318 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 09:19:19.33 ID:98NsRCek0]
>>316
ども
3でいかさせて頂きます

たとえばフォントオブジェクトをフォーム上のボタン等に個別に適用した場合
明示的にDisposeさせるよい方法がないので困っていました

フォーム閉じて参照が切れればいつかGCされるさ、とか
アプリケーションが終了した時点で解放されるからいいやん、とか
それだけでなんともならないシナリオもあるのに、と……

319 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 10:01:27.49 ID:oUOmZZHy0]
初心者なのでこちらで質問させてもらいます。
Aというクラスを継承してBというクラスを作成したのですが、Aの中の一部のフィールドやメソッドを継承したくない場合、Bの中でどうのような記述をすれば簡単に実現できるでしょうか?
目的は単にBのインテリセンスにそのメソッドなりを表示させたくないだけなのですが。
よろしくお願いします。

320 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 10:07:06.46 ID:SlYrQktU0]
>>319
Aの該当メンバーをprivate指定する
Bのほうから継承しないという指定はできない
C++ならできるけど煩雑すぎてC#には採用されなかった



321 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 10:10:46.97 ID:WOJH/6WO0]
private new ベースクラスのメソッド名(引数も合わせる ...){}

これで一応できるけどキャストしたらベースクラスのは呼び出せるわね

322 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 10:48:44.80 ID:SlYrQktU0]
newの使い道がよくわからないんだけど、virtual指定されてないメソッドをオーラーライドしたいときでいいの?

323 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 11:08:28.11 ID:WOJH/6WO0]
オーバーライドするとベースクラスにキャストした時もオーバーライドしたメソッドが呼び出せる
つまりベースクラスのメソッドを上書きできる

newの場合はベースクラスにキャストするとベースクラスのメソッドが呼び出される
上書きしたわけじゃなくて同じ名前のメソッドが定義されたので
前のが呼びだせなくなったという感じ

324 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 12:25:35.45 ID:+pekMVIj0]
abstract オーバーライドしろ
virtual  オーバーライドしてもいいよ
未指定   できなくは無いがnew付けろよ。


325 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/14(木) 13:20:39.57 ID:SlYrQktU0]
>>323,324
ありがとう。つまりポリモーフィズムとはまったく関係ない機能なのか
どんな用途で使うんだろ・・・

326 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/20(水) 23:24:01.56 ID:W/4WFKKT0]
>>325
一番は、後から基底クラスに派生クラスのメンバと被るメンバが追加されたときに
意図せずオーバーライドしてしまうのを防ぐため
その意味では別にnewは無くてoverrideだけでいいんだが、overrideの付け忘れなのか
わざとやってるのか区別するためなんだろう

327 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 12:27:26.65 ID:K9S0VvT90]
visual c#で、ボタンを押すとテキストボックスに入力した英文(長文)をもう一つのテキストボックスに文を並べ替えた状態で出力するアプリを作ろうとしています。
文を並べかえるというのは、単語の並べ替えではなく、複数の文の1文1文を1つと見て、それらの文を並べ替えるという意味です。

考えているアルゴリズムとしては、入力文を初めから一文字ずつ読み取っていき、ピリオドが出た瞬間に初めからその部分の文字列を 文字列1 に代入。
続いてその次の位置からまた一文字ずつ読み取っていき、ピリオドが出た瞬間に、その部分を 文字列2 に代入・・・と繰り返し、最終的にn個の文字列をランダムに並べ替えたものを出力する、というふうに考えています。

C#で作る場合このような流れで作るのがよろしいでしょうか?その場合どのような文字列操作関数を使用していけばいいのでしょうか。
また、他により効率的な方法があればご教示お願いします。

328 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 12:36:01.13 ID:tG9UJEis0]
ピリオドでスプリットすれば一発

329 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 12:45:20.29 ID:K9S0VvT90]
>>328
なるほど、splitメソッドというのを使えばいいのですね。

この場合、Mr.などの単語が1つだけの文が生成されないようにするには
具体的にどう条件を追加すればよろしいでしょうか?
(Mr. Tanaka is Japanese. を1つとしたい場合等)

330 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/06/21(木) 12:50:03.71 ID:tG9UJEis0]
Mr.の場合はjoinすればいい



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?







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<173KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef