トップページ⇒tech
1001コメント310KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/16(木) 18:23:33
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part66
http://hibari.2ch.net/test/read.cgi/tech/1290854247/

■関連スレ
C#, C♯, C#相談室 Part63
http://hibari.2ch.net/test/read.cgi/tech/1289733048/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/

■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0175デフォルトの名無しさん2010/12/22(水) 11:27:38
RichTextBox を PlanText のみを扱う TextBox にすることは可能でしょうか?

ブラウザからコピーしてペーストすると、書式もペーストされるため、困ってます。
Paste() のオーバーライドが不可だったため、今はKeyDownでの独自ペースト処理を検討しています。
0176デフォルトの名無しさん2010/12/22(水) 12:15:20
>>174
状況としては別個で、次のそれぞれについて、必要なコードが知りたいのです

a.あらかじめ作成したフォームにWMPコントロールをコードから追加

b.フォームをコード上で作成し、コードからWMPコントロールを追加
c.コードから参照設定を行う

d.c.を行いb.を実装する(要手動ビルド)
0177デフォルトの名無しさん2010/12/22(水) 13:07:07
おい、おまえら、俺がすげえブラウザ作ってやったよ。

タブ型ブラウザじゃなくて、チェックボックス式ブラウザだ。

くくく、これはすげえ賜物だぞ・・ すげえ、気になるだろ?

でも、教えてやんねえ。
0178デフォルトの名無しさん2010/12/22(水) 13:09:30
>>175
普通のTextBoxをmultiLineにするのじゃあかんのけ?
0179デフォルトの名無しさん2010/12/22(水) 13:12:19
>>178
そういう意味じゃないと思いますw

それほど昔じゃないけどここか相談すれで似たようなのを見たな・・・

ブラウザが扱うのはhtmlという整形言語、リッチテキストもリッチテキストというフォーマット

この辺を吸収したければドロップ情報をそのままリッチテキストに渡すんじゃなく
書式を加工するとかしないとだめだと思うよ
01801752010/12/22(水) 13:40:41
>>178
TextBox よりも RichTextBox の方が機能が多そうなので、RichTextBoxを使っています。
例えばUndoなどは、RichTextBox の方が良いので。

>>179
PlainTextにするプロパティはなさそうですね。
Ctrl+V を独自実装して回避してみます。
ありがとうございました。
0181デフォルトの名無しさん2010/12/22(水) 13:48:57
>>176
VSで参照設定すると、使いやすいようにラッパーが自動生成される。
それを使わずにということになると、COMを触る必要があって結構難しい。
VSで参照設定したときに生成されるDLLの中身をReflectorかなんかで読んでみたらいいと思う。
ずっと簡単な方法としては、WPFのMediaElementをElementHostで利用する手もあるよ。
0182デフォルトの名無しさん2010/12/22(水) 14:06:53
>>180
アプリ起動時にwebbrowserを内部的に用意して
D&Dで貰ったhtmlをwebbrowser入れて処理させた後
WebBrowser.Document.Body.InnerText
で貰ってきたらどうだろう?

ヘッダー部分はでてこないが、body以下は確か全部でてきたはず
0183デフォルトの名無しさん2010/12/22(水) 14:15:46
参考までに
http://ideone.com/Mtynz
0184デフォルトの名無しさん2010/12/22(水) 14:43:06
ふーん
0185デフォルトの名無しさん2010/12/22(水) 22:24:49
>>180
EM_SETTEXTMODEでTM_PLAINTEXTを設定するといいかも
http://ideone.com/zXwcT
01861752010/12/22(水) 22:54:29
>>185
ありがとうございます。そのやり方で確認できました。
VBとかはプロパティであった気がしましたが、裏では持ってたんですね。

>>182
ありがとうございます。
今回は単純にリッチをプレーンにしたかっただけなので。。。
0187デフォルトの名無しさん2010/12/23(木) 00:07:11
>>186
よかったね
Ctrl+Vは他にコンテキストメニューとか
場合によってはShift+Insertもあったりして面倒
0188デフォルトの名無しさん2010/12/23(木) 02:16:06
>>186
お礼はいらないよ
0189デフォルトの名無しさん2010/12/23(木) 02:33:16
>>186
どういたしまして
0190デフォルトの名無しさん2010/12/23(木) 15:31:03
>>186
いえいえ
0191デフォルトの名無しさん2010/12/24(金) 14:48:21
XmlReader.ReadContentAsDateTime メソッドの
「現在の位置でテキストの内容を DateTime オブジェクトとして読み取ります」
という説明の"現在の位置で"とはどういう意味ですか?
現在の位置を取得または設定できるプロパティ、メソッドがあるのでしょうか?

またReadContentAsDateTimeメソッドを使って下記の<updated>〜</updated>の中の文字列を
"05時00分00秒"と"01時00分57秒"と置換する方法に適していますか?

<entry>
<title>タイトル1</title>
 <name>名前1</name>
<updated>2010-12-22T05:00:00Z</updated>
</entry>
<entry>
<title>タイトル2</title>
 <name>名前2</name>
<updated>2010-12-23T01:00:57Z</updated>
</entry>
0192デフォルトの名無しさん2010/12/24(金) 15:00:36
XmlReaderはテキストの前から後ろにカーソルが動いていって
その下の文字列を順に読んで、タグなどが見つかるたびに「なんか見つかった」と通知してくる感じ
そのカーソルの位置が現在の位置。取得しても特に意味はないよ
XmlReaderは扱いが難しいのでLINQ to XMLでも使った方がいいと思う
でもそれ置換するだけなら正規表現でよくないか
XMLとして扱う必要無いような
0193デフォルトの名無しさん2010/12/24(金) 15:24:06
string 結果 = Regex.Replace(元のXML文字列, "<updated>(.+)</updated>",
 m => "<updated>" + DateTime.Parse(m[1].ToString()).ToString("HH時mm分ss秒") + "</updated>");
合ってるかは知らん
もしDateTime.Parseが使えなかったらParseExactで
0194デフォルトの名無しさん2010/12/24(金) 15:41:03
すんません。

targetFiles.GroupBy( _ => i++ / 100 )

を見せられたのですが、"_"の意味がわからず頭を抱えております。

やりたいことを考えたら、ラムダ式の結果でグループわけ、
ラムダ式は、アイテムごとにi++して、/100で云々、だとは思うのですが…

よろしくお願いします(´・ω・`)
01951912010/12/24(金) 15:46:31
レスありがとうございます
なんとなく分かりました

XMLはネットのRSSを
XmlReader reader = XmlReader.Create("http://www.***.com/index.rss");
で取得してそのままdatagridviewに表示してます
XMLであればタグの中身だけ抽出して変換で加工できるかな思いました
stringやStringBuilderに変換し加工しても問題ないのでそっちの方法でやってみます
>>192さん>>193さんありがとうございました
0196デフォルトの名無しさん2010/12/24(金) 15:51:15
>>194
意味はないだろ
>>193でいうならm=>でmという名前の引数を宣言する代わりに_という名前の引数を宣言してるだけ
使わないからいかにも無意味そうな名前にしてるんでしょ
01971942010/12/24(金) 16:11:16
>>196

あー、なるほど…
ありがとうございます。

リファレンスとかで一生懸命演算子とか探してましたw
0198デフォルトの名無しさん2010/12/24(金) 20:52:22
コードを短く記述出来るのがC#の特徴ったって、やっぱ可読性は大事だよな…。
俺ならそういう時は、 ( dummy => i++ / 100 ) って書くかも。
0199デフォルトの名無しさん2010/12/24(金) 20:54:08
俺ならOrderByなんか使わないw
どうしてもLINQ使いたかったらSliceみたいな拡張メソッド作るわ
0200デフォルトの名無しさん2010/12/24(金) 21:52:53
HTMLタグで記述し作成したテーブルの表示、非表示の切り替えを
c#で習得した値を元に行いたいのですが、どのような方法がありますか?

c#のコード→javascriptへ値を渡す→値を元にcss(displayプロパティ)を書き換えるjavascriptを実行
というのは可能なんでしょうか?
0201デフォルトの名無しさん2010/12/24(金) 21:53:13
LINQで配列の平均と標準偏差求めるプログラム書いてみてください
0202デフォルトの名無しさん2010/12/24(金) 23:18:13
ひとりぼっちのクリスマスに気持ちが暖かくなるような
コードを書いてくれ・・・
0203デフォルトの名無しさん2010/12/24(金) 23:23:20
Message.Show("Hello World!");
0204デフォルトの名無しさん2010/12/25(土) 00:06:55
Message.Show("大丈夫だ、問題ない。");
0205デフォルトの名無しさん2010/12/25(土) 00:16:25
var ave = data.Average();
var dev = Math.Sqrt(data.Average(d => Math.Pow(d - ave, 2)));
クエリ式使ってないけどいいよね
0206デフォルトの名無しさん2010/12/25(土) 02:30:05
Message.Show("そんなクリスマスで大丈夫か?");
0207デフォルトの名無しさん2010/12/25(土) 04:42:39
>>200
たとえばjsに
function showmsg(msg) {
  alert(msg);
}
ってのがあったとしたらC#からは
webBrowser1.Document.InvokeScript("showmsg", new object[]{"hello!"});
で呼び出せる。
0208デフォルトの名無しさん2010/12/25(土) 07:35:37
なんで「≠」が!==じゃなくて!=なんだよ!
0209デフォルトの名無しさん2010/12/25(土) 09:06:17
>>208
長い
2文字で頼む
0210デフォルトの名無しさん2010/12/25(土) 09:09:28
>>198
ラムダ式で使わない変数を_で置くってのは割と定型句なので、慣れといたほうがいいよ
0211デフォルトの名無しさん2010/12/25(土) 09:27:27
>>208
!(a==b)
0212デフォルトの名無しさん2010/12/25(土) 09:38:59
のっと いこーる で != でいいやんけ。
0213デフォルトの名無しさん2010/12/25(土) 11:02:13
==はどうなるんだよ?いこーるいこーるか?
0214デフォルトの名無しさん2010/12/25(土) 11:27:24
むしろ代入記号の=を変えてくれ
0215デフォルトの名無しさん2010/12/25(土) 11:30:38
>>214
わかりやすく <- とかどうだろうか
不等号&マイナスと区別が付かないとかそんなことは知らない
0216デフォルトの名無しさん2010/12/25(土) 11:36:10
if(((a==b) == true) == false)
0217デフォルトの名無しさん2010/12/25(土) 11:38:01
>>215
その辺は使ってるしなあ・・・
0218デフォルトの名無しさん2010/12/25(土) 11:42:15
代入に<=や:=あたりを使ってる言語ならあるが
0219デフォルトの名無しさん2010/12/25(土) 11:53:28
よく使い記号の方を簡素にすべきで、
等号を =、代入の方がを他のに変えるためには
まず代入の少ない言語設計が必要。
0220デフォルトの名無しさん2010/12/25(土) 12:30:02
>>214
PASCAL流に:=がいいんじゃね

>>219
代入を少なくしてもなくすことはできない
0221デフォルトの名無しさん2010/12/25(土) 12:31:41
つ[Haskell]
0222デフォルトの名無しさん2010/12/25(土) 12:39:21
今日もどうでもいいことで盛り上がってますね
0223デフォルトの名無しさん2010/12/25(土) 12:47:17
Int32.SetValue(i, 10);

うわ、いやだ
0224デフォルトの名無しさん2010/12/25(土) 13:35:10
DataBindingsプロパティについて教えてください。

�@
button1.DataBindings.Add(new Binding("Enabled",checkBox1,"Checked"));
このコードは一見うまい事連動できているように見えますが、
デザイナ上のDataBindingsプロパティからは指定できません。
なんでですか?やっちゃいけないのでしょうか?

�A
button1.DataBindings.Add(new Binding("Text", this.dataSet11, "DataTable1.Col1", true));
こっちはデザイナ上で指定可能ですが、
常に1レコード目がバインドされ無意味に思えます。
DataTableにPositionプロパティのようなものがあり、制御可能なのでしょうか?
それともBindingSource前提という事ですか?
0225デフォルトの名無しさん2010/12/25(土) 14:37:52
>>224
1)
バインディングはデータとビューを分けましょうってのが根底にあるからじゃね

2)
うん、BindingSource前提
どうしても使いたくないってのならCurrencyManagerもあるけどめんどくさいだけ
0226デフォルトの名無しさん2010/12/25(土) 14:59:27
>>207
試してみます
ありがとうございました
0227デフォルトの名無しさん2010/12/25(土) 15:58:28
>>225
>1)
なるほど、�@はビュー制御だから違うでしょ!って事ですか。
でもChangedイベントでの同期って初期処理で一度呼んでやらんといけないのが微妙。
(もはや書き慣れてしまいましたが)
>2)
CurrencyManager調べてみます。
>BindingSource前提
INotifyPropertyChangedを実装したクラスなども目的から外れてはいないですよね?
デザイナ上で指定できないだけで。
0228デフォルトの名無しさん2010/12/25(土) 16:01:45
あの〜(´・ω・`)
FormのPaintイベント発生時にDrawpath&FillPathでForm上に縁取り文字を描画して
描画した縁取り文字の形でフォームをくり抜きたいんですが「e.Graphics」に描画されてる縁取り文字のパスのとり方がよくわかりません
ご存知の方はどうかこの卑しい豚に助言というエサをお与えください。

【現状のそーす】
ttp://ideone.com/EqxNJ

これだとAddString時点のパスでくりぬかれるので、
FillPath後のパスでくりぬくようにしないといけないっぽいけれど
やり方が全然わからない(´・ω・`)ボスケテ
0229デフォルトの名無しさん2010/12/25(土) 16:34:32
>>228
塗ってから縁取りすりゃいいんじゃね?

//内側を塗る
Brush fillBrush = new SolidBrush(Color.White);
e.Graphics.FillPath(fillBrush, gp);

//縁を描画
Pen drawPen = new Pen(Color.Blue, 4);
e.Graphics.DrawPath(drawPen, gp);
0230デフォルトの名無しさん2010/12/25(土) 17:17:04
>>228
http://ideone.com/LHFfy
0231デフォルトの名無しさん2010/12/25(土) 18:03:49
>>229-230
グアアア、こんなことだったのか
ありがとう、できたよ(´;ω;`)
0232デフォルトの名無しさん2010/12/25(土) 18:59:15
縁を描画するときはSmoothingMode.Noneにしたほうがいいぞ
0233デフォルトの名無しさん2010/12/25(土) 19:41:55
縁を描画するときはSmoothingMode.Noneにしたほうがいいね
0234デフォルトの名無しさん2010/12/25(土) 20:12:45
今時WinForm使ってる人って、高解像度ディスプレイでの動作はどう考えてんの?
画面に画像貼り付けると他の部品とサイズがずれるのは時代遅れだと思うんだ。
0235デフォルトの名無しさん2010/12/25(土) 20:16:42
はぁ
0236デフォルトの名無しさん2010/12/25(土) 20:19:32
それは作り方がおかしい。デザイナーでサイズ決めてStretchモードにすればずれない。
プログラムからPictureBoxのサイズ変更してたりすると死ぬ。
0237デフォルトの名無しさん2010/12/25(土) 20:49:59
WinFormsと高解像度ってなんか関係あんの?
0238デフォルトの名無しさん2010/12/25(土) 21:25:59
画面部品のサイズはピクセル数指定だけどフォントはPt単位で環境によって比が違うし、
中途半端なDPI仮想化のせいでデザイン時に設定したサイズ(ピクセル)と実行時に
取得したサイズ(ピクセル)が一致しなかったりする。
いろんな画面部品のデフォルトサイズが小さくて詳細ディスプレイだと見づらくなることがある。

WinFomクラスも頑張っているけど、ときどき落とし穴があるんだよなあ。
WPFだとデザイン時も実行時も一貫してDPIが仮想化されているから気にする必要がない。
0239デフォルトの名無しさん2010/12/25(土) 21:33:35
割とどうでもいいw
02402382010/12/25(土) 21:42:58
>>239
俺は結構気になるな。
http://msdn.microsoft.com/ja-jp/windows/dd630126
ここで例として貼り付けられている表示の崩れの幾つかはWinFormsでも起こるんだけど、
こういうのでイラっとしたことない?
WPFならこれらの問題とおさらばできます(←怪しい商法のようなセリフだ)
0241デフォルトの名無しさん2010/12/25(土) 21:44:45
ささいな問題持ち出されてWPFの優位性を主張されてもなw
まずはXPで字がにじむのをどうにかしてほしい
0242デフォルトの名無しさん2010/12/25(土) 21:47:32
客に怒られたら直すわ
0243デフォルトの名無しさん2010/12/25(土) 21:48:15
メイン機が120dpiの俺にとっては割と問題だ
0244デフォルトの名無しさん2010/12/25(土) 21:48:59
WPFはWPFがゆえに受け入れられない
WinForm完全互換のWPFが出たら流行るだろう
0245デフォルトの名無しさん2010/12/25(土) 21:49:56
>>241
もう直ってるよ
0246デフォルトの名無しさん2010/12/25(土) 22:16:00
こういうのがFormsのダサいところなんだよな
0247デフォルトの名無しさん2010/12/25(土) 22:19:34
WPFにしたいならすればいいだけだし、おかしなアピールはいらんよ
0248デフォルトの名無しさん2010/12/25(土) 22:19:38
フルHD液晶のPC(140dpi)使ってる俺にとってはかなり問題だ。
MFCとWinFormsアプリ以外は問題ないと思っていたが、ブラウザの
拡大表示使ってたらSilverlightのサイズ計算もおかしくなるので困っている。
IEのDPI対応を何とかしてくれ。
0249デフォルトの名無しさん2010/12/25(土) 22:24:11
分かった
0250デフォルトの名無しさん2010/12/25(土) 22:30:51
WinFormsのダサいのは、GDIの設計が糞なのと、
文化オリエントの臭いがついているところ。
0251デフォルトの名無しさん2010/12/25(土) 22:50:30
Vistaから導入されたDPI仮想化を使えば、高DPI環境でも(ボケや滲みを許容すれば)WinFormsでも戦える。

96DPIじゃない環境が一般的な時代になったんだし、
崩れて読めなくなったりしない程度には対応を進めるべきだとは思うけどね。
0252デフォルトの名無しさん2010/12/25(土) 22:55:52
>>251
それはForm.PerformLayoutによるニセ仮想化じゃなくてVistaの仮想化だよね?
WinFormのニセ仮想化をオフにする必要があるけど、どうやるの?
0253デフォルトの名無しさん2010/12/25(土) 23:04:01
触りだして3日目なんですけど
VSのフォームアプリケーションでテキストに入力後にボタンクリックで
処理を走らせて結果を別のウィンドウで出すのってどうすればできますか?
WebのPOSTを受け取って画面表示みたいなイメージです
0254デフォルトの名無しさん2010/12/25(土) 23:11:59
>>254
フォームの表示方法
Form2 frm = new Form2();
frm.Show();
と、プロパティの
Public string Shorikekka{set;get;}
組み合わせる。

Form2 frm = new Form2();
frm.Shorikekka = "成功";
frm.Show();
0255デフォルトの名無しさん2010/12/25(土) 23:18:07
>>253
難しいぞ。姉妹スレでもフォーム間の受け渡しができなくて困ってる奴がいる。
http://hibari.2ch.net/test/read.cgi/tech/1289733048/
0256デフォルトの名無しさん2010/12/25(土) 23:47:26
クラス自体が分かってないんだろうな
まあそのうち慣れるさ
0257デフォルトの名無しさん2010/12/26(日) 00:35:53
シングルトンでおk
0258デフォルトの名無しさん2010/12/26(日) 02:07:43
"シングル"じゃ、一度しかShowできないよ
似た形にはなると思うけど
0259デフォルトの名無しさん2010/12/26(日) 02:19:02
>>258
>>255のスレ見ればなぜシングルトンなのかわかる
0260デフォルトの名無しさん2010/12/26(日) 02:20:30
おまえにはがっかりだ・・・
0261デフォルトの名無しさん2010/12/26(日) 02:35:29
一体何を期待していたのか
0262デフォルトの名無しさん2010/12/26(日) 04:42:06
>>254
最初の頃はこういうの書いてたけど
こういうものが必要な時点で設計がおかしいんだよな
0263デフォルトの名無しさん2010/12/26(日) 10:59:48
>>262
何かへんか? kwsk
0264デフォルトの名無しさん2010/12/26(日) 11:08:28
>>262
別に問題ないだろ
MSが提供するのは基本的なクラスであって必要とあれば継承して足せばいいだけ

実際Formアプリ作るときはFormクラスを継承したForm1とかにごりごりコード書くんだし
0265デフォルトの名無しさん2010/12/26(日) 11:30:21
>>263
推測を大いに含むが

class ExForm : Form
{

Model model;

ExForm(Model model){
this.model = model
}

void ok_ckick(object sender, EventArgs e){

model.HogeText = this.hogeBox.Text
DialogResult = DialogResult.OK
Close()
}

}

こういうことが言いたいんじゃないの
設計として正しいかは知らん
0266デフォルトの名無しさん2010/12/26(日) 11:35:53
余計な依存が増えてるだけじゃん
文字列渡すだけですむんだったら>>254の方が優れてる
0267デフォルトの名無しさん2010/12/26(日) 11:40:48
結果表示のためにダイアログを単発で表示するのはUI設計としておかしいってことじゃね
場合によるけど確かにウザいと思う
0268デフォルトの名無しさん2010/12/26(日) 11:41:30
Modelの結果をバリバリ使った高度なグラフ表示とかしたいなら
Modelを渡すようにした方がいいとは思うけど、簡単なメッセージだけなら
Form2はModelに依存させず文字列だけ受け取る方がいいと思う。
0269デフォルトの名無しさん2010/12/26(日) 11:45:59
あってるかどうかも分からない推測にマジ返し
これがプログラマの病んだ姿です
0270デフォルトの名無しさん2010/12/26(日) 12:31:44
たまに憶測で怒りだすやつがいるから困る。
そのくせ説明も聞かない。
怒りがおさまった頃に説明すると、「あ〜そう言うこと」って。。。
0271デフォルトの名無しさん2010/12/26(日) 13:12:14
溜まってるのね
0272デフォルトの名無しさん2010/12/26(日) 14:11:09
VBはまじ神だなぁどっかの糞#とは大違い
0273デフォルトの名無しさん2010/12/26(日) 14:17:00
F#の野郎・・・
0274デフォルトの名無しさん2010/12/26(日) 14:21:53
まあJ#はねえ
■ このスレッドは過去ログ倉庫に格納されています