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

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

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

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0111デフォルトの名無しさん2007/11/23(金) 23:09:04
C# 相対パス
でググればいくらでもでてくるだろうに。
Uri.MakeRelativeUri
0112デフォルトの名無しさん2007/11/23(金) 23:23:06
ほとんどの文字列操作は大抵にAPIにあるし、
無くてもアルゴリズムを自作できる程度のものが多い。
0113デフォルトの名無しさん2007/11/23(金) 23:28:15
>>111
どうもありがとうございます。
Uriクラスとは気が付きませんでした・・
0114デフォルトの名無しさん2007/11/23(金) 23:33:41
シリアル通信の3ch同時受信のプログラムを組んでるのですが
RS232Cの通信というのはかなりのCPU負荷をかけるものなのでしょうか?
1chでの受信ではデータの取りこぼしもほとんどなく転送速度もそこそこ出ているのですが
3chでのプログラムではPentium MのPCでは動作が不安定になってしまいました。
Core 2 DuoのPCでは普通に動くのでCPUパワーの問題かなと思ったのですが・・・。
Serialportクラスを3つ並べてそれぞれをDataReceivedイベントで監視するという
安直な考えで組んだプログラムですのでプログラムにも問題があるのでしょうが
純粋にCPU負荷がかかる処理であることが原因なのでしょうか?
0115デフォルトの名無しさん2007/11/23(金) 23:42:36
>>110
ふいたw
0116デフォルトの名無しさん2007/11/23(金) 23:46:28
>>114

同期、非同期から勉強することをお勧めする。
0117デフォルトの名無しさん2007/11/24(土) 00:16:22
>>114
イベント内でファイル開いたりしてないよね?
0118デフォルトの名無しさん2007/11/24(土) 00:28:45
>>114
>DataReceivedイベントで監視する
通信のプロトコルが分からないので断定はできないが、
たぶん設計としてここがまずいと思う。

必ずしもフリースレッドでやる必要はないんだけど、定期的にバッファをポーリングする
やり方の方がほとんどの場合適合的じゃないのかな。
0119デフォルトの名無しさん2007/11/24(土) 14:14:11
C#のWindowsアプリから、Excelで申請書を出力するアプリを作ろうとしています。
VS2005で、VSTOは持っていません。Excelは2003です。

あらかじめ、申請書のフォーマットのxlsファイルを用意し、そこに作成するWindowsアプリで
COMでExcelを操作して申請者の氏名などの情報を書き込んで、xlsを別名で保存するつもりです。

困っているのが、申請書に、Excelのフォームコントロール(チェックボックス、コンボボックス、
ラジオボックス)があり、これらをC#から操作(選択)する方法がわからないことです。

現在、VS上でどのオブジェクトを操作したらいいのかもわからない状態です。
ご存じの方がいらっしゃったら、お教えいただけないでしょうか。
0120デフォルトの名無しさん2007/11/24(土) 16:55:30
マクロにデータ与えて操作
0121デフォルトの名無しさん2007/11/24(土) 17:39:56
>>119
たぶん正攻法じゃないとは思うけど、
VBA側の処理で特定のセルの値とコントロールの状態をリンクするコードを書いておけば、
C#のコードからはその特定のセルの値を操作すれば間接的にコントロールを操作できるんじゃないの?
01221192007/11/24(土) 18:30:01
>>120,121

ありがとうございます。

マクロを組み合わせる方法がよさそうですね。
申請書の変更にも対応しやすそうですし。
0123デフォルトの名無しさん2007/11/24(土) 19:11:25
URLからそのページのTITLEを取得する方法
あれば教えていただけないでしょうか?

フレームワーク2.0です。
0124デフォルトの名無しさん2007/11/24(土) 19:22:18
手っ取り早くサイトのページダウンロードして正規表現か何かでtitle抜き出せば?
0125デフォルトの名無しさん2007/11/24(土) 19:34:19
>>122
VBAより、用意したWSHのスクリプトを呼び出す方がかっこよくね?
01261232007/11/24(土) 19:37:55
>>124
ありがとうございます。

うまいことクラスが用意されてる感じではなさそうってことですね。

最終的に方法が見つからなければその方法でいきたいと思います。

0127デフォルトの名無しさん2007/11/24(土) 19:43:11
どんなけ人頼みなんだよw
0128デフォルトの名無しさん2007/11/24(土) 22:37:31
内の会社はリフレクションでExcelのCOMを操作するライブラリ作ってやってる。最低限の機能しかないけど、Excelのバージョンに関わらず動くから便利。
ただ大量に出力する時はCOM経由は遅いのがネックだね
0129デフォルトの名無しさん2007/11/24(土) 23:50:50
それください
0130デフォルトの名無しさん2007/11/25(日) 00:14:15
ネット上にファイルが存在するかどうかを調べる為には
System.Net.WebClientクラスのDownloadFileメソッド等で
例外処理をする以外の方法はありませんか?
0131デフォルトの名無しさん2007/11/25(日) 00:15:03
リストビューの詳細表示でアイコン表示しないときでも、1行当たりの高さを広げて
間隔よく表示したいのですけれども、方法ありますか?
0132デフォルトの名無しさん2007/11/25(日) 00:21:24
>>130
普通にGETかHEAD投げてステータスコード見ろよ
0133デフォルトの名無しさん2007/11/25(日) 00:33:43
>>126
webBrowserコントロールに読み込んで
webBrowser1.DocumentTitleでOKっぽいよ
01341222007/11/25(日) 01:16:09
>>125
ありがとうございます。

VBScriptを直に使えるみたいですね。
完成したxlsファイルにはマクロを残したくないので、プログラム中でマクロを除去しようと考えていましたが、
WSHを使う方がスマートですね。
0135デフォルトの名無しさん2007/11/25(日) 13:03:13
テキストボックスとボタンを配置したForm2をShowDialog()で表示して、
Form2のボタンをクリックしたときFontDialogを表示します。
しかし、FontDialogを閉じたらForm2も一緒に閉じてしまいます。

狙いとしては、FontDialogで選択したフォントをForm2に配置してある
テキストボックスのFontプロパティに入れたいのです。

何か解決策はあるのでしょうか?
0136デフォルトの名無しさん2007/11/25(日) 13:03:35
>>132
HttpWebRequestクラスのGetResponseメソッドを使う
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemnethttpstatuscodeclasstopic.asp
の方法ですか?
この方法では404のとき例外が発生するのですが,例外を発生させない方法はありませんか?
0137デフォルトの名無しさん2007/11/25(日) 13:25:00
>>135
寿命を永らえされる方法を考えよう。
0138デフォルトの名無しさん2007/11/25(日) 13:28:57
>>135
Form2
{
01391352007/11/25(日) 14:47:07
Form2のボタンクリックのイベントハンドラで

FontDialog fd = new FontDialog();
if (fd.ShowDialog() == DialogResult.OK)
{}
this.DialogResult = DialogResult.None;

こんな感じでフォームが閉じないように出来たのですが、これで良いのでしょうか?
というか、わざわざ最後の行を書かないといけないのが釈然としません。
0140デフォルトの名無しさん2007/11/25(日) 14:59:29
釈然としないならボタンのDialogResultプロパティを疑えよJK
0141デフォルトの名無しさん2007/11/25(日) 15:00:57
what is "JK" ?
0142デフォルトの名無しさん2007/11/25(日) 15:40:35
>>140
ボタンのDialogResult?
イミワカランwwww
01431352007/11/25(日) 15:46:14
>>140
なぜFontDialogのDialogResultがFom2のDialgResultになるのか
その動作と理由が全く分かりません・・・。
後学のためにももう少し一連の動作の説明をお願いします。
0144デフォルトの名無しさん2007/11/25(日) 15:56:33
>>143
>>140は寝言だから忘れていいと思う。

想像だけど、原因はたぶんForm2に存在するボタンが、デザイナで
Form2のAcceptButtonになってるんじゃないの?
0145デフォルトの名無しさん2007/11/25(日) 16:16:47
ButtonクラスにDialogResultというプロパティがあって、それをNone以外に設定していると、ボタンが押されたとき自動的にダイアログが閉じられる。
Form.AcceptButtonではそうはならない。
寝言とか言う前にMSDNライブラリくらい読んどけボケ
0146デフォルトの名無しさん2007/11/25(日) 16:25:27
ちょっと基本的な部分で悩んでおります。
環境は.NET Compact Framework 2.0上で以下

class From1 : Form
{
public Form1()

}
0147デフォルトの名無しさん2007/11/25(日) 16:28:49
>>145
>ButtonクラスにDialogResultというプロパティがあって、
そんなプロパティーないってw
0148デフォルトの名無しさん2007/11/25(日) 16:38:05
>>147
ほらよ
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.button.dialogresult.aspx
0149デフォルトの名無しさん2007/11/25(日) 17:27:14
>>148
それは分かったから、FontDialogのDialogResultとForm2のDialogResultとの因果関係は?
0150デフォルトの名無しさん2007/11/25(日) 17:30:50
Clickイベントが発生してから、DialogResultに従ったフォームを閉じる動作が行われる。
0151デフォルトの名無しさん2007/11/25(日) 17:50:21
>>150
Form2をShow()で呼べばFontDialogを閉じてもForm2は閉じないことを確認しました。
つまりはそういうことなんですね。
0152デフォルトの名無しさん2007/11/25(日) 19:34:00
変なの沸いてんな
0153デフォルトの名無しさん2007/11/25(日) 22:32:43
>>142
>>144
>>147
0154デフォルトの名無しさん2007/11/26(月) 00:20:12
やべーなこのレベルはww
0155デフォルトの名無しさん2007/11/26(月) 00:22:39
そのためのふらっと
相談室に来るレベルじゃないってこと
0156デフォルトの名無しさん2007/11/26(月) 14:50:16
charからint、intからcharの変換ってこれの他に方法あったっけ。
値のチェックとかしてないけど。

private const int prefixDigits = 48;

public static int ToInt32(this char c){
return (int)c - prefixDigits;
}

public static char ToChar(this int n){
return (char)(n + prefixDigits);
}
0157デフォルトの名無しさん2007/11/26(月) 15:07:51
ちょ待
0158デフォルトの名無しさん2007/11/26(月) 16:33:45
>>156
冗談だよね
0159デフォルトの名無しさん2007/11/26(月) 16:40:54
変数名や 48 より、 '0' のがわかりやすい。
0160デフォルトの名無しさん2007/11/26(月) 17:00:34
>>157-158
おかしな所があったら指摘してね。

>>159
なるほど、その発想は無かったわ。
0161デフォルトの名無しさん2007/11/26(月) 17:03:35
ParseやToStringやその類を使えと言ったらダメなんですか
0162デフォルトの名無しさん2007/11/26(月) 17:18:50
だめだろどう見ても。
0163デフォルトの名無しさん2007/11/26(月) 17:19:40
じゃないわ勘違いw
0164デフォルトの名無しさん2007/11/26(月) 17:54:44
Int32.Parse(c.ToString())
(char)n.ToString()

一旦stringのインスタンス作ってるのが気持ち悪いYO
0165デフォルトの名無しさん2007/11/26(月) 18:00:45
>>160
’A' とかの文字が入ったときはどうすんの?
0166デフォルトの名無しさん2007/11/26(月) 18:12:57
>値のチェックとかしてないけど。
0167デフォルトの名無しさん2007/11/26(月) 18:21:24
int.TryParseを使った方が例外処理がいらないから楽だろうな。
0168デフォルトの名無しさん2007/11/26(月) 20:20:06
>>156
それはcharからint、intからcharの変換とは言わない。
0169デフォルトの名無しさん2007/11/26(月) 20:32:29
範囲が正しいってわかってるならわざわざメソッド化しなくてもc - '0'でいいしねえ。
範囲チェックして例外投げるのを主な目的にするならメソッド化する意味もあるだろうけど。

あとToInt32やToCharみたいな名前を使うのは混乱するのでやめていただきたい。
0170デフォルトの名無しさん2007/11/26(月) 20:34:17
君には影響ないから心配いらないよ
0171デフォルトの名無しさん2007/11/26(月) 21:34:05
うるせー馬鹿
0172デフォルトの名無しさん2007/11/27(火) 06:31:54
Disposeとデストラクタのどっちに終了処理かけばええんすかね
0173デフォルトの名無しさん2007/11/27(火) 07:09:37
内容によるが、デストラクタに書くことはほとんどない
0174デフォルトの名無しさん2007/11/27(火) 07:22:09
むしろデストラクタ書くな
たぶん使い方間違ってるから
0175デフォルトの名無しさん2007/11/27(火) 11:11:18
ていうか、あれをデストラクタだと思ってはいけないような気がする。
0176デフォルトの名無しさん2007/11/27(火) 11:44:56
だな、ってかデストラクタって呼び方やめただろ、紛らわしいから。
0177デフォルトの名無しさん2007/11/27(火) 13:12:26
>>176
ファイナライザだな
0178デフォルトの名無しさん2007/11/27(火) 21:20:34
しかしフォームから呼んだフォントダイアログのダイアログリザルトの値が
フォームに送られてフォームが閉じるって仕様の意味が分からんな。
通常のウィンドウ操作じゃあり得ないし、何を思ってこういう仕様にしたのだろうか。
0179デフォルトの名無しさん2007/11/27(火) 21:32:17
それは勘違いを基にした情報だろう
0180デフォルトの名無しさん2007/11/27(火) 21:40:19
ファイナライザっていうとコナミのガンダムもどきゲームを思い出して
0181デフォルトの名無しさん2007/11/27(火) 21:56:34
>>178
意味分からんな。使い方間違ってんだろ
0182デフォルトの名無しさん2007/11/27(火) 22:01:57
おいおいwwwまだいたのかよResult君ww
0183デフォルトの名無しさん2007/11/27(火) 22:24:55
ためした。
普通のプログラムでは何の問題もない。

多分こうなってるだけ。
DialogResult = fontDialog1.ShowDialog();

みなおせ。
0184デフォルトの名無しさん2007/11/27(火) 22:28:16
ワロス
馬鹿ばっか
0185デフォルトの名無しさん2007/11/27(火) 22:31:02
エスパーの俺からすると結論は、
>>183のように子フォームのダイアログリザルトを
親フォームのダイアログリザルトに設定している
01861832007/11/27(火) 22:41:16
エスパーの割にはたいしたことかいてないな…
憶測だけど
DialogResult = fontDialog1.ShowDialog();
は、
DialogResult dr = fontDialog1.ShowDialog();
あたりの書き間違いじゃないかな?

if(dr == DialogResult.OK)
{} else if(dr == DialogResult.…)

憶測の域を出ない。
0187デフォルトの名無しさん2007/11/27(火) 22:47:57
そんな立派なもんじゃなくてなんとなくそう書いただけじゃないか?
なんとなく書く奴って意外なほど多いぞ。
理解できないが。
0188デフォルトの名無しさん2007/11/28(水) 00:01:44
ただ悩むまでも無く、ソッコー気付くはずなんですが・・・
0189デフォルトの名無しさん2007/11/28(水) 00:07:39
まあ世の中色々な人がいる。
0190デフォルトの名無しさん2007/11/28(水) 01:28:08
普通はこう書かないか?
if(fontDialog1.ShowDialog() == DialogResult.OK){
//
}
0191デフォルトの名無しさん2007/11/28(水) 01:57:09
俺は switch 派だな
0192デフォルトの名無しさん2007/11/28(水) 02:00:45
列挙体の判定はswitchの方がシンプルになるからなー
0193デフォルトの名無しさん2007/11/28(水) 02:17:02
>>142
>>144
>>147
>>149
>>178
>>184
0194デフォルトの名無しさん2007/11/28(水) 05:15:03
Form2 f2 = new Form2();
f2.ShowDialog();

Form2で
if(DialogResult.OK == FontDialog.ShowDialog()){...}
で帰ってきたDialogResultがForm2に送られてForm2も閉じる
0195デフォルトの名無しさん2007/11/28(水) 05:15:34
>>194
何故じゃー
0196デフォルトの名無しさん2007/11/28(水) 05:42:22
もう、あきた
0197デフォルトの名無しさん2007/11/28(水) 09:24:31
ToolStripProgressBarってデフォルトだと鮮やかな緑なんですが、
プロパティとかで簡単に黄色とか赤に変更できたりしないのでしょうか?

カスタムコントロールから作らないと駄目ですか?
0198デフォルトの名無しさん2007/11/28(水) 13:20:44
ForeColor
0199デフォルトの名無しさん2007/11/28(水) 14:40:14
ForeColorじゃ�_
0200デフォルトの名無しさん2007/11/28(水) 15:08:34
プログレス程度なら自分で作れるだろ?
0201デフォルトの名無しさん2007/11/28(水) 15:26:02
Vistaのビジュアルに似せて作るのは少し面倒じゃね?
なんかグラデーション動いてるし角が丸っこいし
似せなくてもいいならいいけど
0202デフォルトの名無しさん2007/11/28(水) 15:37:29
Paintイベントにプロパティでswitchさせて描画させるだけだろ?
グラデーションやクリッピングなんてそんな難しくないだろ?
0203デフォルトの名無しさん2007/11/28(水) 15:42:03
頼んだ。
0204デフォルトの名無しさん2007/11/28(水) 15:42:07
Vistaのバーを見て言ってる?
つーかこれ、貼り付けてるときからてかりが動いてるなw
0205デフォルトの名無しさん2007/11/28(水) 16:15:13
上の端掴んでぐりぐりサイズ変更すると動きのスピードが変わるな
0206デフォルトの名無しさん2007/11/28(水) 17:39:51
>>201
Theme APIで描かせればそういう風になるんじゃないの?
やったことなくて憶測だけど。
0207デフォルトの名無しさん2007/11/28(水) 20:48:32
変数の値が変化した時に起こるイベントを作る事はできますか?
0208デフォルトの名無しさん2007/11/28(水) 20:51:17
Theme APIで描画=VisualStyleRendererで描画

つまり現在のビジュアルスタイルの色と形で描画されるんでしょ
質問者はその色を変えたいと。単純に色変えたいなら自前描画、
ただビジュアルスタイル風でかつ色を変えるのは不可能っしょ
0209デフォルトの名無しさん2007/11/28(水) 20:53:18
>>207
変数を直接外部からは(内部でも?)触らないようにしてプロパティでラップ
setterでイベントを起こせばそれらしくなるんじゃ
0210デフォルトの名無しさん2007/11/28(水) 21:16:03
Observer パターン?
■ このスレッドは過去ログ倉庫に格納されています