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

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

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

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

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

■前スレ

ふらっとC#,C♯,C#(初心者用) Part76
http://hibari.2ch.net/test/read.cgi/tech/1308639127/

■関連スレ
C#, C♯, C#相談室 Part67
http://hibari.2ch.net/test/read.cgi/tech/1308128665/
ミスターサタンのC#相談室 
http://hibari.2ch.net/test/read.cgi/tech/1092656075/
VB.NET質問スレ(Part36)
http://hibari.2ch.net/test/read.cgi/tech/1301828549/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/
0153デフォルトの名無しさん2011/07/14(木) 12:24:14.32
>分割境界線が太くなるのと
これってListboxの挙動の関係じゃないの?
Listboxって確か書く項目の高さx表示個数できっちりきまるんじゃなかったっけ?
0154デフォルトの名無しさん2011/07/14(木) 12:29:39.10
>書く項目
各項目
0155デフォルトの名無しさん2011/07/14(木) 12:52:32.85
そういうふうにもできるし
自由な高さにもできる
0156デフォルトの名無しさん2011/07/14(木) 13:04:14.64
>>155
自由にできるのは知らなかった
デフォルトでは項目の高さx項目数で表示の高さが決まるようになってるよね

>>152
お試しで捨てプロジェクト作ってFormに直接ListBoxをFillで貼り付けて
Formの高さをいろいろいじってみ

切りのいい高さだと余白なくぴったりくっつくけど中途半端な高さだと
余白ができてるから

たぶんSplitContainerの分割線が太くみえるのはListBoxの余白でそうみえるだけ
0157デフォルトの名無しさん2011/07/14(木) 13:21:50.48
ListBox.IntegralHeightじゃ駄目?
0158デフォルトの名無しさん2011/07/14(木) 13:24:20.19
>>157
おお、それできりかえるのか
0159デフォルトの名無しさん2011/07/14(木) 13:25:11.94
>>157
あなたは神です!!!!!!!!!!!!
0160デフォルトの名無しさん2011/07/14(木) 13:57:22.57
やっぱりListViewは難しいですね
listBoxで作り直します
0161デフォルトの名無しさん2011/07/14(木) 14:05:43.35
>>147
すげぇ面倒見いいやつとかいわれないか?
0162デフォルトの名無しさん2011/07/14(木) 14:31:36.37
いいことじゃないか、まさに初心者用スレにふさわしい

だがどの程度の質問をされるかにもよるからな
0163デフォルトの名無しさん2011/07/14(木) 14:42:26.43
string[] d = Directory.GetDirectories("C:\\test\\aaa");

これでaaaフォルダの中にあるフォルダだけを取得する方法ってございませんか?

for (int i=0; i<d.Length; i++) {
d[i] = Path.GetFileName(d[i]);
}


取得した内容をlistboxに追加するときPath.GetFileNameを書いて
for (int i = 0; i < d.Length; i++)
{
listBox1.Items.Add(Path.GetFileName(d));
}
とやってフォルダ名のみにして追加してるのですが効率が悪いのでaddRangeで一括で追加したのです
0164デフォルトの名無しさん2011/07/14(木) 14:43:33.26
書き直します

string[] d = Directory.GetDirectories("C:\\test\\aaa");
これでaaaフォルダの中にあるフォルダだけを取得する方法ってございませんか?


現状は取得した内容をlistboxに追加するときPath.GetFileNameを書いて
for (int i = 0; i < d.Length; i++)
{
listBox1.Items.Add(Path.GetFileName(d));
}
とやってフォルダ名のみにして追加してるのですが効率が悪いのでaddRangeで一括で追加したのです
0165デフォルトの名無しさん2011/07/14(木) 15:03:12.65
再描画で遅くなるって話なら別の手があるぞ?
0166デフォルトの名無しさん2011/07/14(木) 15:08:01.78
BeginUpdateとEndUpdateの中でAddする方法でしょうか?
どうしてもAddだと遅くなってしまいまして
0167デフォルトの名無しさん2011/07/14(木) 15:08:12.60
>>164
まず >>165 の言うとおりだけども。

var d = Directory.GetDirectories("C:\\test\\aaa").Select(x => Path.GetFileName(x));
じゃダメなの?
0168デフォルトの名無しさん2011/07/14(木) 15:18:01.93
遅くなるって計測した上でいってんの?
0169デフォルトの名無しさん2011/07/14(木) 15:23:33.73
>>167
ありがとうございます
var d = Directory.GetDirectories("C:\\test\\aaa").Select(x => Path.GetFileName(x));
listBox1.Items.Clear();
listBox1.Items.AddRange(d);
と書き直したら、AddRangeの行でエラーが2つでてしまいました
エラー 1 'System.Windows.Forms.ListBox.ObjectCollection.AddRange(System.Windows.Forms.ListBox.ObjectCollection)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
エラー 2 引数 1: 'System.Collections.Generic.IEnumerable<string>' から 'System.Windows.Forms.ListBox.ObjectCollection' に変換できません
0170デフォルトの名無しさん2011/07/14(木) 15:24:17.02
ためになるな。
0171デフォルトの名無しさん2011/07/14(木) 15:24:47.11
>>168
ありがとうございます
速度についてはstopwatchで計測させていただきました
Addで追加するとAddRangeの3倍の時間がかかってしまいます
0172デフォルトの名無しさん2011/07/14(木) 15:26:03.59
string[] d = Directory.GetDirectories(@"C:\");
List<string> d2 = new List<string>();
for (int i = 0; i < d.Length; i++)
{
d2.Add(Path.GetFileName(d[i]));
}
listBox1.Items.AddRange(d2.ToArray());
0173デフォルトの名無しさん2011/07/14(木) 15:31:34.28
LINQきめぇ
0174デフォルトの名無しさん2011/07/14(木) 15:33:34.94
>>169
試しに
listBox1.Items.AddRange(d.ToArray<string>());
とかやってみたら
0175デフォルトの名無しさん2011/07/14(木) 15:34:10.86
d.ToArray() だけでいいか
0176デフォルトの名無しさん2011/07/14(木) 16:02:43.23
>>172-175
勉強になります
ありがとうございます
0177デフォルトの名無しさん2011/07/14(木) 16:27:59.05
あるメソッドが文字列を返します
もし文字列が空ならreturn falseで抜けて,文字列が空でなければ変数aに代入したいと思います
以下のように書いた場合、Axc()は2回実行されていることになりますか?
Axc()の処理が結構重いことをさせるので1回しか実行させたくないのですが
空でなかった場合には変数に代入して、空だったらreturn false;にする方法ってございませんか?
if ("" == Axc()){
return false;
}else{
string a = Axc();
}
0178デフォルトの名無しさん2011/07/14(木) 16:34:50.98
string s = Axc();
if ("" == s){
return false;
}else{
string a = s;
}

0179デフォルトの名無しさん2011/07/14(木) 16:38:59.85
こんなことで質問すんなよ
0180デフォルトの名無しさん2011/07/14(木) 16:45:50.93
>>179
>>!
0181デフォルトの名無しさん2011/07/14(木) 16:47:27.42
!
0182デフォルトの名無しさん2011/07/14(木) 16:49:42.72
帳票印刷をXPSファイルにやってるのですが、
文字の幅を短くしてある領域に納める処理に、
ScaleTransform()を使って横方向だけ縮小しているのですが、
どうも、アンチエイリアス後にScale処理されているようで
この処理をした文字だけがアンチエイリアスがされてない感じの
ギザギザ文字になってしまいます。
なにか対策ないでしょうか。
0183デフォルトの名無しさん2011/07/14(木) 17:01:19.21
XPSってなんぞ?
なにやら便利そうだな
0184デフォルトの名無しさん2011/07/14(木) 17:20:27.00
>>183
プリンタに「Microsoft XPS Document Writer」
ってない?
0185デフォルトの名無しさん2011/07/14(木) 17:22:30.96
その領域に合わせたフォントを作るべきで
縮小がそうなるのはしょうがないんじゃ?
01861822011/07/14(木) 18:01:02.35
ありがとうございます。
どうも.NetのFontオブジェクトでは縦横比を変えれない仕様らしく、
変形は全てTransformでやるべき、という姿勢だとどこかで見かけました。
縦横比を変更したFontオブジェクトを作ることってできるのでしょか。

XPSはMicrosoft XPS Document Writerでやってます。
ちょっと工夫しまして、GUI無しでXPSファイルに書きだした後、
XPSビューアで開き、それをプレビューとして使用してます。
また印刷はそのXPSビューアがGUI提供してくれてるのでキレイに処理できます。


0187デフォルトの名無しさん2011/07/14(木) 18:11:11.05
listBoxが3つあります

public void MsgBox1() {MessageBox.Show(listBox1.Text);}
public void MsgBox2() {MessageBox.Show(listBox2.Text);}
public void MsgBox3() {MessageBox.Show(listBox3.Text);}
という風にやるよりは
public void MsgBox(string selectbox) {MessageBox.Show(selectbox.Text);}
として書いて
MsgBox("listBox2");みたいに出来ればよいのですが、これだとエラーが出て出来ませんでした
同じコードは一つのメソッドにまとめたいのですが方法ございませんか?
0188デフォルトの名無しさん2011/07/14(木) 18:15:42.57
引数というものを勉強しろ
0189デフォルトの名無しさん2011/07/14(木) 18:17:52.74
C#の初心者ならともかくプログラミングの初心者はあっちいってくれ
0190デフォルトの名無しさん2011/07/14(木) 18:21:33.71
フードプロセッサーに機械のパーツを入れようとしてる みたいなイメージだな
0191デフォルトの名無しさん2011/07/14(木) 18:22:10.51
まず本読めよ
型とか全然理解してないだろ

public void ShowListBoxMessage( ListBox selectbox )
{
 MessageBox.Show( selectbox.Text );
}

ShowListBoxMessage( listBox2 );

でもこんな糞メソッド作らないでいいよ
0192デフォルトの名無しさん2011/07/14(木) 18:24:06.47
型って良く知りませんでした
何故これは作ってはならないのですか?
0193デフォルトの名無しさん2011/07/14(木) 18:25:25.52
MessageBoxを呼び出す程度ならベタで書いてもいいんじゃないの?ってだけ
まあ別にやってもかまわんけどね
0194デフォルトの名無しさん2011/07/14(木) 18:34:46.32
そうでしたか
listbox2って渡しちゃうとこれ重くなったりするののが理由なのかなと思ってしまいました
ありがとうございます
0195デフォルトの名無しさん2011/07/14(木) 18:42:27.15
>>186
LOGFONTでもうまくいかんねー
ScaleTransformしたあとに
TextRenderingHintでTextRenderingHint.AntiAliasいれたら
一応かかったけど、図形としてだろうかこれ
01961822011/07/14(木) 18:47:03.52
>>195
おお、試してくれてるのですか。感謝です。
試してみます。
01971822011/07/14(木) 18:57:14.60
>>195
私のところではかかってませんでした。
思うに、それは、スケールする前のアンチエイリアスよって出来た
ドットが残ってるだけではないでしょうか? 
その場合は、XPSビューアなどで縮小するとやっぱりギザギザになります。
解像度に応じて、リアルタイムにアンチエイリアスがかかってほしいですが、
スケールするとならなくなってしまいます。
0198デフォルトの名無しさん2011/07/14(木) 19:36:49.77
VC#2010Expressです
.NET Framework2.0で動くプログラムを作りたくて以下の事をしました

プロジェクトを新規作成しました
プロジェクトのプロパティを開きました
対象のフレームワークが.Net Framework4.0になってたので.Net Framework 2.0に変更しました
ttp://www.dotup.org/uploda/www.dotup.org1788383.jpg
そしたらたくさんエラーが出てしまいました
ttp://www.dotup.org/uploda/www.dotup.org1788381.jpg
たすけてください
0199デフォルトの名無しさん2011/07/14(木) 19:41:31.23
4.0のままでいいんじゃない?
0200デフォルトの名無しさん2011/07/14(木) 19:43:09.78
恐らく、参照設定の中でエラーになってるのを消すのと、
usingでエラーになってるのを消せばいいはず
0201デフォルトの名無しさん2011/07/14(木) 19:43:36.29
エラーと警告は違う
0202デフォルトの名無しさん2011/07/14(木) 19:52:47.79
恥ずかしながら4.0をインストールさせるページが分からず、
ttp://hide.maruo.co.jp/software/hmnetexnet.htmlのページの一番下に2.0のダウンロードページの説明があったので
2.0で作ろうと思いました
本当は4.0で作るのがいいのですが。。(知識は乏しいのですが何でも最新版が好きなので)
消したら大丈夫でした
ありがとうです
0203デフォルトの名無しさん2011/07/14(木) 19:53:40.20
>>202
4.0で作るっていうか使う部品によって2.0互換のコードになるんじゃなかったっけ?
.netのバージョンでどこまでサポートとかあるはずだし
0204デフォルトの名無しさん2011/07/14(木) 19:57:18.30
素朴な疑問なんだけど4.0と3.5と2.0が入っている比率ってどのくらいなんだろう
0205デフォルトの名無しさん2011/07/14(木) 19:58:53.35
>>202
>4.0をインストールさせるページ
…VisualStudio入れた時点で、自動的に入って来ないか?
0206デフォルトの名無しさん2011/07/14(木) 20:02:48.36
>>204
普通にwinをうpでーとしてれば4.0になってるっちゃ
0207デフォルトの名無しさん2011/07/14(木) 20:04:11.27
Windows7に初期状態でインストールされてるのが3.5なのか。。
4にしてほしかったよな

http://www.atmarkit.co.jp/fwin2k/win2ktips/1128dnfwvr/dnfwvr02.gif
0208デフォルトの名無しさん2011/07/14(木) 20:08:14.58
Windows8は4が入る?
0209デフォルトの名無しさん2011/07/14(木) 20:12:56.03
>>207
Win7出たのが2009年10月(9月)で、
4.0出たのが2010年4月だからなー。そりゃ無茶ってモンよ。

>>206
Windows Update だけだと、Client Profileしか入って来なくね?
0210デフォルトの名無しさん2011/07/14(木) 20:12:58.77
>>203
>>205
>>206
ホームページで自分の作ったソフトを公開するときに4.0のインストールの仕方をどうやって教えていいのか分からず、2.0の解説のあったページを参考に2.0にしたいと思ってました
なるべくたくさんの人にインストールしてもらいたいので2.0ならいいのかなと思って2.0を選ばせていただきました
0211デフォルトの名無しさん2011/07/14(木) 20:18:58.69
いまさらユーザーに2.0のインストールを誘導するのは酷だ

どうせClient Profileで十分だろ
http://www.microsoft.com/downloads/ja-jp/details.aspx?displaylang=ja&FamilyID=5765d7a8-7722-4888-a970-ac39b33fd8ab

詳細は
http://msdn.microsoft.com/ja-jp/netframework/ff687189
0212デフォルトの名無しさん2011/07/14(木) 20:22:44.11
ClientProfile軽いからなw
50MBちょっとだから、昨今の回線事情なら直ぐに入れられる

後はまあ、Silverlightを検討するのもアリだが
0213デフォルトの名無しさん2011/07/14(木) 20:47:51.31
そうですね
ぼくは今日から4.0布教のために4.0で作ることを決意しました
0214デフォルトの名無しさん2011/07/14(木) 21:43:40.98
CSharp Language Specification.doc
タイトルC# 言語仕様
作成者AraceliJ
会社名BGS Spain
作成日時2010年1月28日 14:38:00
更新日時2010年4月3日 5:16:34
更新者xiuyan.liu
改訂671
編集時間2927 分

いまのところ、コレが最新?
0215デフォルトの名無しさん2011/07/14(木) 21:46:35.42
ここ1年は3.5にしておくのが無難だと思っておる。
0216デフォルトの名無しさん2011/07/14(木) 21:50:10.73
4.0に手を出すのはWPFとかSilverLigthあたりをやる人くらいじゃね?
0217デフォルトの名無しさん2011/07/14(木) 21:53:28.39
UI以外にも、dynamicとかCOM interopの強化とか
MEFとかTPLとかPLINQとかいろいろ付いてるぞ
0218デフォルトの名無しさん2011/07/14(木) 22:06:16.96
VBなら3.5→4.0で大分使い勝手が向上してるんだけどね
0219デフォルトの名無しさん2011/07/14(木) 22:23:51.90
GetDirectoriesでSystem Volume Informationにアクセスすると強制終了してしまいます
隠しフォルダ?システムフォルダ?っていうのでしょうか?エクスプローラでは表示されてないようなこのフォルダみたいなフォルダの場合
はGetDirectoriesでアクセスしないように処理の前に判定したいのですが以下のように書いてもちゃんと動作しませんでした
どなたかアドバイスお願いいたします

if (FileAttributes.System != di.Attributes)
{
return false;
}
string[] dir = Directory.GetDirectories("フォルダ名");
0220デフォルトの名無しさん2011/07/14(木) 22:25:24.69
OSは何?
0221デフォルトの名無しさん2011/07/14(木) 22:28:14.64
Vistaです
0222デフォルトの名無しさん2011/07/14(木) 22:29:15.20
コードミス
if (FileAttributes.System == di.Attributes)
{
return false;
}
string[] dir = Directory.GetDirectories("フォルダ名");

でダメでした
0223デフォルトの名無しさん2011/07/14(木) 22:42:13.72
自己解決しました
http://jeanne.wankuma.com/tips/csharp/directory/getattribute.htmlを参考にしました
0224デフォルトの名無しさん2011/07/14(木) 23:02:19.97
string[] h = new string[] {"aaa","bbb","ccc","","ddd","eee",""};
という配列があって
空の要素を削除して
string[] h = new string[] {"aaa","bbb","ccc","ddd","eee"};
という風につめたい場合のforを使わないでやる方法ございませんか?
0225デフォルトの名無しさん2011/07/14(木) 23:03:41.24
h.Where(x => 0 < x.Length).ToArray()
0226デフォルトの名無しさん2011/07/14(木) 23:13:36.00
スマート厨とパフォーマンス厨の決闘になりそうだな
0227デフォルトの名無しさん2011/07/14(木) 23:20:29.74
厨厨タコかいな、まで読んだ。
0228デフォルトの名無しさん2011/07/14(木) 23:21:09.97
>>225
すいません書いてみたのですがエラーになります
エラー 1 'System.Array' に 'where' の定義が含まれておらず、型 'System.Array' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
0229デフォルトの名無しさん2011/07/14(木) 23:21:42.22
3000ギルですが購入しますか?
0230デフォルトの名無しさん2011/07/14(木) 23:22:16.81
一回エラーメッセージ自力で解決できるまで頑張った方がいい

本当に
0231デフォルトの名無しさん2011/07/14(木) 23:24:56.37
PHPだとエラーみてもマニュアル見て解決できるのですが
C#はエラーの内容がレベル高すぎて難しいですね
0232デフォルトの名無しさん2011/07/14(木) 23:27:37.08
そのエラーメッセージでググって一番上に出てくるサイト
http://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_05/csharp30_05_01.html

根本的に何でエラーになったのか理解しないと繰り返すぞ
0233デフォルトの名無しさん2011/07/14(木) 23:36:03.11
>>228
.NET 2.0だな…
乙
0234デフォルトの名無しさん2011/07/14(木) 23:49:39.47
usingでlinqを追加したら動きました
ただ、実行しても空の部分が残りました
02352192011/07/14(木) 23:52:53.01
Directory.GetDirectories()で取得するとき、隠しファイル属性は除外する方法はございませんか?
0236デフォルトの名無しさん2011/07/14(木) 23:58:25.19
ありません
自分で属性確認するしか
0237デフォルトの名無しさん2011/07/15(金) 00:02:17.69
C#クソだな
0238デフォルトの名無しさん2011/07/15(金) 00:02:47.02
>>234
元の配列が変わるわけじゃなくて、抽出結果を返す
0239デフォルトの名無しさん2011/07/15(金) 00:02:57.90
すいません、教えてください。
FC2ブログにデータをPOSTしてブログを投稿したいのです。
ログインまではできておりますがPOST先のURLはどうやって調べればよいでしょうか?
また、ここに投げればよいというURLがあれば教えてください。
0240デフォルトの名無しさん2011/07/15(金) 00:06:37.92
mail欄が空白だとマルチなのかなと思ってしまう
0241デフォルトの名無しさん2011/07/15(金) 00:07:59.95
>>235
DirectoryInfo.EnumerateFileSystemInfosかGetDirectories使えば
0242デフォルトの名無しさん2011/07/15(金) 00:11:46.47
>>239
そんなもんFC2に聞いて下さい
FC2のサポセンじゃないんですよ
0243デフォルトの名無しさん2011/07/15(金) 00:22:31.67
http://blog.fc2.com/xmlrpc.php
らしいけど
仕様なんか知るわけないし、C#にチンカスほども関係ないのでやはり自己解決してくれ
0244デフォルトの名無しさん2011/07/15(金) 00:30:23.48
>>243
ありがとうございます。
C#で投稿しようと現在つくってます。
PHPつかえば楽らしいんですがクライアントツールで作成したいと四苦八苦してまして。。

>>242
なるほど。サービスを提供する会社に問い合わせないとわからないシロモノなのでしたか。
ありがとうございます。
0245デフォルトの名無しさん2011/07/15(金) 00:33:49.76
postボタンを押したときに何を送るかwiresharkで調べればいいだけじゃあ
0246デフォルトの名無しさん2011/07/15(金) 00:42:36.47
コボラーとPHPerは他所に出てくるな
0247デフォルトの名無しさん2011/07/15(金) 01:02:37.49
>>236さんは出来ないと教えていただきましたが
>>241さんのはどちらも取得できるものは同じですがそれらを使ってどのように除外するのですか?
0248デフォルトの名無しさん2011/07/15(金) 01:11:53.95
FileSystemInfo.Attributesプロパティを見ればよかろう
http://msdn.microsoft.com/ja-jp/library/system.io.filesysteminfo.attributes.aspx
http://msdn.microsoft.com/ja-jp/library/system.io.fileattributes.aspx
02492192011/07/15(金) 01:28:31.36
>>223の方法でしょうか?
0250デフォルトの名無しさん2011/07/15(金) 01:35:55.82
>>244
FirebugとかChromeの開発者ツールで、HTTPリクエストが見れるから
ボタンを押した時のそれっぽいのを見つけてあとは眺めて頑張れ
0251デフォルトの名無しさん2011/07/15(金) 05:07:32.69
Firefoxは、5.0以上ならFirebugじゃなくてもいいし
IE9でも、F12キー押下で出るDeveloperToolsにネットワークキャプチャ追加されたぜよ
0252デフォルトの名無しさん2011/07/15(金) 07:11:18.25
フォルダ列挙厨はListBox厨と同一人物だろ?

基本的なところを本を読むなどして身につけた方がいいと
何度言わせたら

■ このスレッドは過去ログ倉庫に格納されています