ふらっとC#,C♯,C#(初心者用) Part29
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part28
http://pc11.2ch.net/test/read.cgi/tech/1211688164/
ジェネリックのwhere節で型パラメタをintやshortやlongなどの整数型に限って それらの型同士の四則演算をするにはどうすればいいですか?
無理 Expressionクラス使って無理矢理やれないこともないけど
static T Add<T>(T a, T b) where T : struct { var paramA = Expression.Parameter(typeof(T), "a"); var paramB = Expression.Parameter(typeof(T), "b"); var body = Expression.Add(paramA, paramB); var lamdba = Expression.Lambda<Func<T, T, T>>(body, paramA, paramB).Compile(); return lamdba(a, b); } こんなかんじ このまま使ったら毎回メソッド生成してとんでもなく遅いはずだからlamdbaはキャッシュしてね
型パラメータの指定の方は、staticコンストラクタで
switch(typeof(T)) {
case typeof(int):
case typeof(short):
case typeof(long):
break;
default:
throw new Exception();
// どうせ TypeInitializationException にされるが、
// TypeParameterException とか作ってもいい
}
とかすると、where句で表現できない制限でも
インスタンスを生成/staticメンバを参照しようとした時点でエラーにできる
四則演算の方は、同じくstaticコンストラクタで
>>8 のデリゲートまでを生成して、
static T Add<T>(T a, T b) {
return AddFunc(T, T); // AddFunc is Func<T, T, T>
}
とか
10 :
9 :2008/07/23(水) 04:48:36
あと、俺は前に全ての演算をラップするクラスを作ったりしたな 定義されていない演算は使おうとすると例外投げたり、 元の型と相互に暗黙の型変換できるようにしたりして // a, b is T Operand<T> _a = a; Operand<T> _b = b; T c = _a + _b; T d = _a << 8; というふうにジェネリックで使えるようなやつ
なるほど ありがとうございます
12 :
デフォルトの名無しさん :2008/07/23(水) 18:56:41
米国時間22日、マイクロソフトは「Xbox LIVE Community Games」を北米で今年後半から
開始すると発表した。その他の地域については2009年から逐次開始する予定。
Xbox LIVE Community Gamesは、XNA Game Studioで開発されたXbox360用ソフトを
Xbox Liveを通じ一般利用者へ販売することを可能とするサービス。
Xbox LIVE Community Gamesでの販売は、XNA開発者コミュニティ「XNA Creators Club」の
有料会員(年額9,800円)であれば誰でも行うことが可能となる。
販売価格については200〜800マイクロソフトポイントの間で自由に設定することができ、
手数料として売上の30%が引かれることとなる。
XNA Game Studioは、マイクロソフトが無償で公開しているVisual Studioをベースとした
ゲーム特化型の統合開発環境。.NET Framework及びDirectXをベースとしたライブラリ
「XNA Framework」を使用し、基本的には設定ひとつでXbox360及びWindowsへの両対応が
可能となる。
XNAについては、RPGツクールが次期バージョンでの対応を表明しており、日本での
普及にも期待がかかる。また、教育機関による学習教材としての採用も増加しており、
月刊ベーシックマガジンの休刊以降問題視されていた日本人ゲーム開発者の急激な
減少に歯止めをかける期待も持たれている。
http://news4xbox.blogspot.com/2008/07/xbox360.html
TreeViewでノードが選択されたときに それぞれのノードを判別する方法って Text値で見分けるしかないのですか?
や、TreeNodeそのもの使えば良いじゃん
Tagプロパティに対応するオブジェクトを入れておいたりする
>>14 TreeNodeそのものを使用とはどういう意味でしょうか?
ノードそれぞれに固有の番号が振り分けられているとか?
だとしたら、その番号はどうやって知ればいいのでしょうか?
最初、Index値を参照しようと思ったら、Index値は各ノードに
個別の値が振り分けられているわけではなかったので、断念しました。
>>15 検索していて、ちょうど今その方法を見つけました。
やはりそれしかないのでしょうか?
よく考えたら、Text値だとテキストの内容がかぶったら
判別できませんね。
OpenFileDialog dlgFile = new OpenFileDialog(); if (dlgFile.ShowDialog() == DialogResult.OK) { dataSet1.ReadXml(dlgFile.FileName); } DataGridViewのDataSourceプロパティにdataSet1を指定しているんですが、 このメソッドを実行してもファイル読み込んだきり無反応です。 例外も起こりません どうすれば表示できるようになるのでしょうか?
>>18 DataGridView
DataSourceにいれてやると勝手に表示してくれたりしないんですか?
DataMember未指定とか
21 :
デフォルトの名無しさん :2008/07/24(木) 09:43:36
>>17 dataSet1に定義されたTableを指定しないと…
まず、ヘルプ読まないと。
23 :
デフォルトの名無しさん :2008/07/24(木) 18:06:52
質問です。 現在Microsoft Visual C# 2008 Express Edition を使っています。 特に設定はイジっていませんが、実行すると必ずFormがVisual C#の後ろに隠れてしまいます。 新しくプロジェクトを作っても、毎回後ろに隠れてしまいます。 どうすれば元のようになりますでしょうか? よろしくお願いします。
実行ってどうやってるの
exeダブルクリック
26 :
デフォルトの名無しさん :2008/07/24(木) 21:48:39
コンソールアプリだとRedirectStandardOutputをFalseにしても 標準出力が止められないんですが、何か止める方法はないでしょうか。
すいません。めちゃくちゃ基本なんですが、キャストのことで質問させてください。 double d = 1278.86d; double d2 = 100d; double d3 = d * d2; Console.WriteLine(d3.ToString()); int i = (int)(d3); Console.WriteLine(i.ToString()); これで、一行目が127886 二行目が127885 になるのですが、これって正常ですか?
正常です。理由が分からないなら、 まずデバッガの使い方を覚えることをお勧めします。
>>26 むしろConsole.OutにTextWriter.Nullを指定するってのはどう?
>>28 ありがとうございました。
d3が127885.99999999999になってました。
何故こんなことになるんでしょう?
double 1278.86をint 127886にしたいときはどのようにするのでしょうか?
レベルが低くてすいません・・・
よろしければご教示ください。
decimal使えば
Math.Roundしてからintにするってのは?
>>31-33 低レベルな質問にお付き合いいただいて、ありがとうございました。
Math.Round 調べてみます。
今は誰も浮動小数点というか2進少数の話とか教えてくれんのかね 無難にdecimal使っとくよろし
>>35 ありがとうございます。
decimalにしときます。
こういう時使うんですね・・・理解してませんでした。
double d =0; for(int i=0;i < 100;i++) d += 0.01; Console.WriteLine(d);
浮動小数点数は近似値だっていうことだね
decimalは遅いからな。用途によって使い分けたいところだな。
そこでRational型の出番です
42 :
デフォルトの名無しさん :2008/07/27(日) 19:50:52
質問させてください VisualStudioExpressEdition2008のC#入れて勉強しています Javaからの転向組みなのですが、基本的な部分でわからないことが多いので質問させてください ・プロジェクトの保存場所を変更したい場合はどうすればいいのでしょうか? ・コンソールアプリケーションを作成していますが、成果物をコマンドラインで使う場合はどうすればいいのでしょうか? ・複数のMainメソッドを1個のプロジェクトに作成したいのですが、実行するMainメソッドごとに成果物を作成することは可能でしょうか? ・API仕様集のようなものはどこを読めば良いのでしょうか? ・namespaceを使っているのですが、ソースコードの保存はフォルダ構成を考慮する必要がないのでしょうか? よろしくお願いします。 すでに、既出でしたら、○○嫁と叱って下さい
>>42 プロジェクトはソリューションかプロジェクトのフォルダごとコピーでどこへでも。
自分専用のフォルダきってPATH通せばOK。
Mainは複数あってもいいがEXEを作るときにどれをエントリーポイントにするか指定しなくてはならない。
別のMainから起動したいなら別にEXEを作ってそれからキック。
マニュアルはMSDN。オンラインでOK。
namespaceとフォルダの関連性はなし。おまけにinternal scopeとnamespaceの関連性もない。
>>44 メニューの「ファイル」→「新規作成」→「プロジェクト」で開くダイアログに、フォルダを入力するところがあるよ。
>コンソールアプリケーションを作成していますが、成果物をコマンドラインで使う場合はどうすればいいのでしょうか? Javaと違って.exeが出力されるので、.exeを直接起動できる。 >複数のMainメソッドを1個のプロジェクトに作成したいのですが、実行するMainメソッドごとに成果物を作成することは可能でしょうか? 1個のプロジェクトには1個のエントリポイントしか作れない。 Main()メソッドを複数作ることはできるが、エントリポイントとして使用できるのはひとつだけ。 ただし、1つのソリューションに複数のプロジェクトを含めることができるので、プロジェクトを分ければOK。 >プロジェクトを作成してから、フォルダを移動するのではなく、最初から作成場所を指定する機能は無いのでしょうか? 最初に保存するときに、保存場所を決めるように求められるべ? >API集にどうやっていけば良いのかわかりません クラス名で直接ググった方が早い。
普通にツール-オプションに設定するところあるよ。
Expressならまず ツール→オプション→すべての設定を表示にチェック→プロジェクトおよびソリューション →作成時に新しいプロジェクトを保存 と 常にソリューションを表示 にチェック これでプロジェクトを新規作成するときに場所が選べるようになってソリューションも表示される 既定のプロジェクトの場所もそのページで変えられる
>>48 StandardEditionなら、[ツール]→[オプション]→[プロジェクトおよびソリューション]→[全般]でいける。
EEは知らん。
おまえらかぶりすぎだろ。
>>48 >本当にExpressEditonのC#ですか?
シラネーヨ。
Expressだけ、メニューやらダイアログの構成が違ってるのか?
まじでExpressのプロジェクトの新規作成のダイアログには、フォルダを指定する箇所がないのか?
42,44です
レス色々とありがとうございます
非常に助かりました
>>48 Java+Eclipseの人は同じようなこと悩みますね
>>50 できました
VisualStudio使うの初めてだったので、助かりました
私には、C#以前にVisualStudioの勉強が必要そうですね
Java+Eclipseの時もメニューバーのWindowの中にPreferencesがあったりして、かなり苦戦した記憶が、、、
また何かありましたら、よろしくお願いいたします
>>57 そんなことで苦戦って、先が思いやられるな
>>58 ツール類にはいつも苦労させられます
知っている人が周辺にいてくれればすぐにわかることでも結構悩みますし、、、
そんなことありませんか?
Javaの前はHDLやってたのですが、そのときもコーディングよりもツール動かすまでが大変でした
60 :
48 :2008/07/27(日) 23:25:50
>>57 Java+Eclipseの人でも無いし
むしろ、Eclipseがどうして栄えてるのかがわからない。
Eclipseな人ってどんなマシン使ってるの?くそ重たくて使い物にならないとおもうんだけど
Ath X2 4800+ + 4GB RAM (32bit)でWindows使ってるけど、くそ重たかったよ
>>60 そうですか?
私の環境だとeclipseよりVisualStudio2008の方が重いです
Javaどのバージョンいれてます?
て、スレ違いかな
すみません、初心者といいますかそれ以前のことで申し訳ないのですが、いくつか質問させてください。 もしスレ違いならお手数をおかけしてすみませんが誘導お願いいたします。 C#を始めるために、,NET再頒布3.5と.NET SDK2.0、.NET再頒布1.1と.NET SDK1.1を 入れたのですが、これで特に問題はありませんでしょうか。 それとも、おとなしくVC#無償版を入れたほうがよいのでしょうか。 またその場合、.NET再頒布3.5とVC#無償版を入れればよいのでしょうか。 あともうひとつ質問なのですが、v2.0フォルダのC#コンパイラでコンパイルしたものは2.0の実行環境で、 v1.1フォルダのC#コンパイラでコンパイルしたものは1.1の実行環境でそれぞれ動作する、 という認識で間違いないでしょうか。 すみませんが、どなたかご存知の方ご教授願います・・・。
別にSDKだけで開発できるけど、VC# を避ける理由は全くないんだが。 学習の手助けになるという意味でも VC# 入れとく方が無難。 SDK は別個に入れる必要なし。てか、3.5 の SDK 入れろよ。 あと、VC# 入れれば SDK も入る。
バージョンは、多分、デフォルト設定だと v1.1 の方は .NET 1.1 用、V2.0 の方は .NET 2.0 用で間違いないけども。 コンパイラオプションできりかえられたような。
.NET SDKを入れるともれなく.NET本体も付いてくる(ないと使えないから)。 また、VC#でもインストーラがもれなく.NETを入れてくる。 だから、そんな何でもかんでもインストールする必要はない(時間の無駄以外に害はないけど)。
>>63-65 早速のご回答ありがとうございます!
な、なんとオプションで切り替えられるのですか・・・。
MSの.NET公式を色々と探したのですが、SDK3.5を見つけることができなかったのです・・・。
そ・・・そうなのですか、MS公式のSDK2.0のページに.NETSDK2.0を入れる前に
.NET2.0とLangPackを入れろと書いてあったのでてっきり全部入れないといけないのかと思ってました・・・。
やはりSDKいれれば全部ついてくるんですよね、おかしいとおもいました。
全部アンインストールしてVC#2008無償版を入れてみようと思います。
皆さん本当にありがとうございました!失礼しました。
コンパイラが2.0だからって.NETも2.0ってわけじゃないよ、ね?
>>67 バージョンってのがちょっと複雑なんだけど・・・
・C# の言語のバージョン(1.0, 1.2, 2.0, 3.0)
・IL と実行環境のバージョン(1.0, 2.0)
・標準ライブラリのバージョン(1.0, 1.1, 2.0, 3.0, 3.5)
があって、IL の 1 と 2 の差は generics の有無。
なので、C# 2.0 以降は IL の方も 2.0 必須。
逆に、ライブラリさえ使わなければ C# 3.0 で書いたプログラムも .NET 2.0 で動く。
VisualStudioと対応する.NET Frameworkのバージョン VS2002(VS7) - .NET Framework 1.0 VS2003(VS7.1) - .NET Framework 1.1 VS2005(VS8) - .NET Framework 2.0 ※1 VS2008(VS9) - .NET Framework 2.0/3.0/3.5 ※1 アドイン追加で、.NET Framework 3.0 向けの開発も可能 対応OS .NET Framework 1.0/1.1 - 98, 98SE, ME, NT4.0, 2000, 2003, XP,(2008, Vista ※1.1のみ) .NET Framework 2.0 - 98, 98SE, ME, .2000, 2003, XP, 2008, Vista .NET Framework 3.0/3.5 - .2003, XP, 2008, Vista CLRのバージョン .NET Framework 1.0 - CLR1.0 .NET Framework 1.1 - CLR1.1 .NET Framework 2.0/3.0/3.5 - CLR2.0 C#のバージョン .NET Framework 1.0 - C#1.0 .NET Framework 1.1 - C#1.1 .NET Framework 2.0/3.0 - C#2.0 .NET Framework 3.5 - C#3.0
ん、最後のC#のバージョンの所は正しくなかったな。 C#のバージョン VS2002(VS7) - C#1.0 VS2003(VS7.1) - C#1.1 VS2005(VS8) - C#2.0 VS2008(VS9) - C#3.0
.NET2.0の範囲で使えるC#3.0 推論型、匿名型, 暗黙型付け配列 コレクションのイニシャライザ、オブジェクトのイニシャライザ パーシャルクラス、パーシャルメソッド 自動プロパティ、ラムダ式 .NET3.xが必要になる機能 ラムダ式でFunc<>やAction<>, Expression<>などの利用 LINQクエリ式他 拡張メソッド - これが意外だったり。
Action<>は引数1個のものに限り.NET2.0でも使える。
VC#でコンパイルする際に.NET依存しない実行ファイルの生成って 可能ですかね?exeのサイズ大きくなってもいいので・・
無理です。
拡張メソッドをVBで書くとよくわかる ExtensionAttributeがSystem.Coreを使ってるからしょうがない imports System.Runtime.CompilerServices public module Foo <Extension> public function Bar(s as String) as String
.NET Framework2.0をターゲットにして拡張メソッドを定義 それを2.0プロジェクトから利用するバッドノウハウ。 前者でコンパイルが通るのは、まぁ理解できる。 後者でインテリセンスに表示されてないのにコンパイルが通るってwww # CLRの機能に変更を加えず、拡張メソッドを実現している証拠・・か。
だって拡張メソッドなんてただの糖衣構文じゃない。
>>77 普通にコンパイルエラーになるのだけど?
>.NET Framework2.0をターゲットにして拡張メソッドを定義
System.Runtime.CompilerServices.ExtensionAttributeが見つからないため新しい拡張メソッドを定義できません。
System.Core.dll への参照は指定されていますか?
自前でSystem.Runtime.CompilerServices.ExtensionAttributeを定義すれば問題なかったりする 実装はなくてOK
これですな。これこそバットノウハウの鑑。 namespace System.Runtime.CompilerServices { class ExtensionAttribute : Attribute { } } これを使ったアセンブリをさらに.net 3.0のアセンブリから参照すると、 ExtensionAttributeがダブるとエラーになるが、 これを回避するためにこういうことをするとさらに邪悪さが増す。 // csc /r:hoge=my.dll extern alias hoge;
把握した。さっそく.OfTypes<T>()を実装したぜ。
MONOのSystem.Core.dllのソースコード使えば MITライセンスだし
そこまでする手間で、お客さんに.NET3.5を入れてもらえよw
OfType<T>は過大評価されすぎ
>>66 ちなみに.NET Framework 3.0から
対応するSDKはWindows SDKという名称になった。
87 :
デフォルトの名無しさん :2008/07/28(月) 21:18:25
フォームの ownerdraw について調べております。 目的は、フォームの外形をマウスで変形したりリサイズする際、 リアルタイムで内部まで追随させずに外形枠の仮想線だけを 追随描画し、マウスのボタンを解放した時点で内部の描画を行う 方式を取ることでした。 これに関し SetStyleやOnPaintなどのアドバイスを頂いたことが ありました。しかしどうもうまく実現できておりませんでした。 そこで ownerdraw を用いるのかもしれないと思い、調べているのですが、 情報にたどり着いておりません。よろしければアドバイスを頂きたく。 よろしくお願いします。
[画面のプロパティ]→[効果]→[ドラッグ中にウィンドウの内容を表示する]→OFF
描画処理について、質問です。 現在、描画系の処理について勉強していて、 試しにペイントもどきのようなものを作ってみようと思いました。 そこで、以下のようなプログラムを書いてみました。 マウスがクリックされている間に、別スレッドから描画メソッドをInvoke経由でコール。 描画メソッド内にて現在のマウス座標に対して、DrawRectangleで点を打つ。 という簡単な物です。 これを実行すると一応、点が描画されて、マウスを動かしていくと、 線っぽくひけるのですが、マウスを速く動かすと線が、細切れになってしまいます。 これは、描画処理が追いついていないのでしょうか。 スレッドは、1ms単位でクリック情報をポーリングしており、 クリックされていれば、メソッドがコールされます。 スレッドでは、キューに積む。 別スレッドで描画などすれば解決するものなのでしょうか。 (上記も試行してみましたが、上手く動きませんでした・・・実装が悪いのかもしれません) 以上、よろしくお願いいたします。
マウスってそんなに細かく動かないだろ
91 :
89 :2008/07/28(月) 21:46:03
>>90 つまり、マウスを大きく動かしたときは、
ポインタは細かい座標を指していないということでしょうか・・・
(日本語怪しい・・・
>>90 だよな
早く動く=前の位置よりいきなり座標移動が起きる
だからその間の補完は自分で考えてしないとどうしようもない。
どんな描画系のツールでも同じ現象になるのがほとんどのような。
スレッドとか使わなくても、MOUSEMOVEイベントがきたらその座標に、前回のMOUSEMOVEイベントの座標から線を引けば繋がった線が引けるよ。
94 :
89 :2008/07/28(月) 21:47:40
そうすると、 取得できた座標と前回の座標からその中間の線を 計算して描画する処理が必要ということですかね・・・
前の点と現在の点でDrawLineすれば?
96 :
89 :2008/07/28(月) 21:49:56
>>92 >>93 なるほど!
やはり、そうなのですね。
疑問が解けてすっきりしました。
前回の座標値と今回の座標値を結ぶ線を描画するという
方向で考えてみたいと思います。
ありがとう御座いました。
>>94 windows標準のペイントだと対策はしてるようだけど
かなり荒い補完なので前回の座標と新しい座標間でラインを引いてる
感じだな。
98 :
89 :2008/07/28(月) 21:50:55
99 :
デフォルトの名無しさん :2008/07/28(月) 21:57:15
>>88 ありがとうございました。OSレベルでの設定変更で対応する方法を
試すことができました。確かにそれで実現することができました。
ところで、それをアプリケーションレベルで実現したいと考えておりました。
そこで先ほど見つけたこちら:
フォームのリサイズが終了するまでコントロールの大きさを変えない .NET Tips C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/form/preventcontrolresize.html にある方法を試してみましたところ、確かにフォームの内部の描画が
Resizeの終了時点で行われることが確認できたのですが、この場合
フォームの外形自体が描画されてしまうため、内部に何の描画もない
領域が見えてしまったりして見栄えがいまひとつなことがわかりました。
Resize操作中は、OSレベルと同じように、フォームの外形線だけを
リサイズしたいのですが、これは不可能でしょうか?何卒アドバイスを
頂きたく!よろしくお願いします。
onresizebegin/onresizeendでデフォルトの描画処理を停止/再開するようにすれば
GroupBoxに何個かラジオボタンを設置し、そのグループボックスを複数設置 その時、あるグループボックスの中にあるラジオボタンをクリックした際、 指定したグループボックスの中にあるラジオボタンのチェックを解除する方法を教えていただきたいです。 よろしおねがいします。
103 :
デフォルトの名無しさん :2008/07/28(月) 23:08:29
質問というか相談なんですが、 LINQ使わないなら、VS2005のほうがいいんでしょうか? とりあえず今VS2008を入れてみたんですが、 これはLINQを使うこと前提になってるぽい感じですよね? 自分はADO.NETも理解できてない状態なので、 もしLINQ使うにしても、いきなりLINQより、 ADO.NETやった後のほうが良いかと思うんですが、どうなんでしょうか? ちなみに、SQLに関しては、PHP+MySQLとAccessの経験があります。
>>103 VS2008で.NET Framework 3.5/3.0/2.0 は選べる。C# 3.0 2.0 1.0も選べる。
>>103 じゃあLINQ行くかの時にめんどくさいからそのままでおk
>>101 そうじゃない。その記事はリサイズ中のコントロールの*レイアウト*の停止
俺が言ってるのはフォーム自体の*描画*の停止
>>102 そのグループボックス内の全てのラジオボタンをChecked=falseにする
もしくは、そのグループボックス内の任意のラジオボタンをChecked=trueにした後で、Checked=falseにする
>>104 ,105
ありがとうございやし!
Frameworkは2.0にしてたんですが、C#まで選択可能とは気付きませんでした。
2008のままでボチボチ勉強してみます。
というか、いきなりLINQでいいと思う。
varだけはないとやっていけません
Xml.XmlReader.GetAttribute()では属性の名前が分からなくてもインデックス指定で取得できるのですが、 Xml.XmlDocument.GetAttribute()では名前がわからないと取得できません・・・ XmlDocumentでXmlReaderのように知らない属性名や値を取得するにはどうしたらいいのでしょうか?
>>108 んっと、LINQの文法?がちょっと肌に合わなくて、
いきなりLINQからだと、C#自体挫折しそうなんです。。。
varとか自動プロパティとか使いまくりだけど クエリ式は一切使ってないな 使う場面もない
Winフォームでラベルを盛り上げるにはどうしたらいいんでしょうか 凹んだのはできるんですけど盛り上がってるのはつくれないの (^9’)
>>106 どうもです、
>フォーム自体の*描画*の停止
この実現方法についてアドバイスかヒントを
いただけるとありがたく。
resizebegin で SuspendLayout をしてみましたが
できませんでした。
border styleFixed3Dにすると凹むんですよ・・・凸にしたいです
そのようなプロパティはないでござる
なになにオーナードローとは 自分でオリジナルの・・・・・ もしもし^^;さすがにあるでしょ いけずー
わかった!パネル使えばいいのか!
.NET2.0以降ならFormClosingイベントを使えば、閉じる理由がわかる。 Closingイベントは非推奨になってなかったかな。
123 :
デフォルトの名無しさん :2008/07/29(火) 07:43:02
>>122 はい、そうなんです。
FormClosingイベントを使っていて、フォームが閉じられようとする時に
フォームが閉じられるのをキャンセルしてるから、いつまでたっても終了しないと…
これに替わる策というのはあるのでしょうか?
Closingが非推奨なのは知りませんでした。
だからー、FormClosing のほうなら e に CloseReason があるだろ
と
>>122 は言っている
無条件でキャンセルするのではなく、アプリの作りにもよるけど、 e.CloseReason == CloseReason.UserClosing の時だけキャンセルするとかすればいい。 Closingイベントは、VS2005以降は手動で追加しない限り使えないので、気にする必要なし。
なるほど、CloseReasonでフォームがクローズされる理由を取得できるということですね。 ありがとうございました。勉強になりました!
127 :
102 :2008/07/29(火) 10:36:58
>>106 グループボックス内のラジオボタンを一つずつfalseにしていくのですね
ありがとうございました
一人で作る場合でもpublicとかprivateとかなるべく使い分けた方が良いんですか? アクセスを限定すればちょっと早くなったりしますか?
アクセスはコンパイル時のチェックだけだ。 でもいつも意識してるほうがいいぞ。
>>128 VS2008でC#3.0の機能の使用を制限する方法は無かったと思う。
むしろ何かあったら方法おせーて
プロジェクトープロパティービルドー詳細設定ー言語のバージョン、ISO-2でC#2.0相当
知らなかったわthx ISO-1 - ISO/IEC 23270:2003(C#1.0相当) ISO-2 - ISO/IEC 23270:2006(C#2.0相当)
C#でネイティブコードって吐けますか? C#で作られたプログラムの起動が遅すぎる。 でもちょっと興味もある……。
>>134 この質問定期的にわくね。ゴキブリみたい。
>>135 そうなのか。みんな同じこと考えてるのな
javaにおけるgcjの評価を調べてみると native C#の未来が見えてくる。
>>134 とりあえずngen.exeについて調べてみろ。
>>137 どうして関係ない話題でうやむやにしようとするのか
知らないなら黙っとけ
>>134 ngen.exe
環境ごとに勝手にネイティブイメージ作ってくれればいいのに いやむしろネイティブコード吐けばいいのに
一回実行したら次からはキャッシュから起動して欲しいとは思う でも32ビットでコンパイルしたコードが64ビットで動くのはすごくないか
キャッシュから起動すればいいじゃん
143 :
134 :2008/07/29(火) 19:34:02
とりあえず終了時にでもイメージ作るようにすれば扱いやすくなるかな
リリースビルド時に自動でngenかけちゃえばいいじゃん。
.NETのアプリが遅く感じるのは、 関係するDLLやライブラリ類が多くそのロードに時間がかかっている。 特にメモリの少ないPCでは顕著。それに対してJITやngenの影響は相対的に小さい。 通常のアプリではコードのサイズは大きくても常に動いている部分は意外と小さいのに対して、 .NETのアプリはアクティブに使われるコードの分布が広いのでキャッシュが効きにくい。 マネージド内は実行時の最適化で部分的なパフォーマンスはネイティブよりよくなることもあるが、 ネイティブコードの呼び出しのオーバーヘッドが大きい。このためWinFormなどが重くなりがち。 ライブラリ類の互換性やGCの特性を維持したままネイティブコード化を目指しても スピード的なメリットはない。この辺はGCJが実証済み。 GCをなくして独自のライブラリを準備していいならあれだがそれをC#と呼べるかは不明。 いっぱい書いたが結論。ネイティブコンパイルができれば万事解決というのは短絡思考。
.net Framework 1.0とかJava2の頃から比べたら.net 3.0なんて爆速としか言いようがない 初期は本当にひどかった
バージョン上がるごとに機能追加されるだけじゃなくて速度も上がってんの?
.net 2.0と.net 3.0と.net 3.5で速度は変わってないよ。 ライブラリが増えただけで基幹部分は変わってないから
VS 2005でビルドしたものより2008の方がファイル小さくてしかも速い気がするから、 多分コンパイラ班が頑張ってるんだと思う
たしかに2008のが小さくなるね
そんなこといわれるとバージョンアップしたくなるじゃないか 2005あたりからstandardでも最適化ついてるんだっけ?
C#のコンパイラは.NETのランタイムライブラリの一部だよ。 IDEとは何にも関係ない。
expressでも付いてる。最適化は2種類あって /optimaize+ でコンパイル時の最適化○、JITでの最適化○ 無指定 でコンパイル時の最適化×、JITでの最適化○ /debug+ でコンパイル時の最適化×、JITでの最適化× になる。
自分自身を再起動するにはどうしたらいいんでしょう。
別のプロセスを立ち上げてから自殺。 そのプロセスは親が死んだのを見届けてから再起動。その後自殺。
というか 3.5 は 2.0 "SP1" + ライブラリだからコア部分が何も 変わってないわけではない。
VC++メインなんだわ ちょっと調べたら(って小一時間かかったが) 2003はproから最適化可 2005はstdから最適化可、pgoはpgoから 2008はstdからpgo含め最適化可みたいね
質問させてください ArrayListをmsdnで調べると、IListインタフェースを実装していますよね? そこで、Javaのように IList<decimal> list = new ArrayList<decimal>(); とかやったのですが、ArrayListが非ジェネリクス型だのなんだのといわれてエラーになります IList<decimal> list = (IList<decimal>)new ArrayList(); とか IList list = new ArrayList(); なら上手くいくのですが、最初のコードは何が悪いのでしょうか? msdn見てもよくわかりません よろしくお願いいたします
ArrayListはジェネリック型じゃない ジェネリック型のはただのList こんな感じで作る IList<decimal> list = new System.Collections.Generic.List<decimal>(); あとIList と IList<T>は別物
java5から導入されたジェネリックはerasureといいコンパイル時にだけ影響する。 コンパイルが済むとその情報は消えてしまう。ただし、メタ情報としては残る。 その為バイトコードの拡張が不要な上、旧コードのとの相性も良い。 その反面プリミティブ型についてはオートボクシングで利便性は向上しているが ボクシングによる低いパフォーマンスはそのままである。 .NETのはIL(バイトコード)をジェネリック用に拡張していてプリミティブ型のパフォーマンスがよい。 そのかわり非ジェネリックのコレクションとの互換性はない。
>>158 再起動をどう定義するかの問題、になるんだろうけど
何か特殊な事情でもない限り、普通はそんなややこしいことしなくても
フツーに別のプロセスを立ち上げて自分は終了するだけで必要十分だと思うけど。
>>159 using System.Linq;
ArrayList ar = new ArrayList() { 1,2,3,4,5 };
List<int> lt = ar.Cast<int>().ToList();
>>164 そんな無駄の多い方法を初心者に教えるのはどうかと思うぞ
Enumerable.Range(1, 5).ToList() でいいだろ
おまえら初心者スレでLinqは控えなさい
ヤダヤダ!
ボクのほうがすごいLinq書けるもん!
>>167 のおじちゃんよりLinq書けるよ!
本当は全く書けないと見た
関係ないけど、LINQって何故かLinqって書いちゃうんだよな
Linqスレはすさまじい過疎だというのに・・・
ミラじゃねーし
>>170 非推奨にはなってないな。型が一定でないコレクションでは使う。
まあList<object>でもいいっちゃいいけど。
うわー何だこれありえねええ って思ってたらcomboBoxをtextBoxって書いてた。
>>178 どんまい
ListとかDictionaryとか使いにくすぎるんだけど
誰かSTL風コレクションライブラリを作った神はいないの?
つ stl/cliへようこそ
ListやDictionaryが使いにくいとな LINQが分かってないんじゃないかね
サポートOSの関係で2.0使ってる いきなりXP以降だからなぁ 趣味ならいいけど仕事では使えん…
自前で .Select とか書いちゃえば、 ターゲットが .NET 2.0 でも C# 3.0 使えるけどね。 ライブラリとか売ってるんなら、 Visual Studio 2005 使わざるを得ないとかもあるけども。
>>181 C++ からこっちくると、
forward iterator 相当しかないのが不思議に感じるのよね。
まあ、foreach 使えりゃそれでいいやとか思い出すとどうでもよくなるんだけど。
Properties.Settings.Default.Reset() ってVisual Studioで設定した値に戻るんですか? それともApp.configに書かれてる値になるんですか? 後者だとReload()と同じですよね
List<string[]> ListValues = (List<string[]>)SortedList.Valuesで 型 'ValueList[System.String,System.String[]]' のオブジェクトを 型 'System.Collections.Generic.List`1[System.String[]]' にキャストできません。 という例外が起こるのですが、sortedlistの値だけを別のコレクションに取り出したいときはどうしたら良いのでしょうか?
.ToList();
List<string[]> ListValues = new List<string[]>(SortedList.Values);
new List<string[]>(SortedList.Values)
出来ました。 我ながらお恥ずかしいです
バイト列に16進で00が入っていた時に、GetString(バイト列)でstringに変換したときには、 stringに何が入っているのでしょうか? たとえば、47だったら、Gになりますよね。 単純にASCII文字だったら00はNULということになりますよね? stringの場合は、NULは何に相当するのでしょうか?
文字列の終了をさすコード? C言語の場合だけど。
'\0'
194 :
191 :2008/07/30(水) 22:17:48
あ〜〜〜、何時間も調べたのに分からなかったのに〜 なるほど、\0で処理したら上手くいきました。 本当にどうも有り難うございました。
文字列リテラルでNULL文字を入力する方法が知りたいのなら最初からそう書けばいいのに、 どうしてあんな意味不明な文章になるのだろうか
>>195 本人が何がわかってないかをわかってない典型的なパターンじゃね?
いや、ライブラリからバイト列が返ってくるんですよ。 何文字が入っているかは分からないのです。後ろの方は全部0が入っているだけなので。 それを画面にデバッグ出力出来ればそれで十分な用件があったんです。 普通に、全部をstringにして表示しますよね。1行で書けるし。 それで出力したら、文字列の後ろの方に空白らしきものが沢山表示されるので、 まぁ、Trimで良いかと思ったんですが、どうやら空白ではないので、トリムできないと。 ということで、何をトリムするべきか知りたかったのです。 というか、NUL文字って何の役に立つのですか? stringでNUL文字が入っていると、何か嬉しいことがあるのですか? 自動的に空白に置換されても良いと思うのですが‥‥
>>197 だから文字列が入ってる場合に\0は文字列の終了を指すんだってば
C言語の場合
てか\0は数値で言うとただの0だからな 長さ固定のバイト列の余りの部分にはどうしたってそれが入ってくるだろ
要するに、「どの文字にも割り当てられてませんよ」ということが保証されてる文字コード。 だからC言語では「文字列の終端」として使ってたし、 固定長でデータ送る際に「文字のない場所に埋めておく値」として使う。
それに1バイトの最初のほうは制御コードで文字としては成立しないからな。
202 :
201 :2008/07/31(木) 00:07:16
>それに1バイトの最初のほうは制御コードで文字としては成立しないからな。 それに1バイトコードの最初のほうは制御コードで文字としては成立しないからな。
foreach (string[] strArray in List<string[]>) このような文があるんですが、string[].Length文だけ foreachが回ってしまいます。 List.countは1なのにどうしてこうなるのでしょうか?
>>203 意味わかんない。
とりあえず、元のコードそのまま貼って。
>>197 もしかしてC#側でbyte配列を確保してライブラリ関数の引数に渡してる?
//List<string[]> list //list[0]にだけstring[3]型の変数が入ってる //string[] strArray foreach (string[] strArray in list) { for(int i=0; i<2; i++) { Console.WriteLine(strArray[i]); } } こうすると strArray[0] strArray[1] strArray[2] strArray[0] strArray[1] strArray[2] strArray[0] strArray[1] strArray[2]
>>207 i<2なのにstrArray[2]が出てくるわけ?
違うとこの出力が混ざってるんじゃないの
ちゃんとコピペしてよ
>//list[0]にだけstring[3]型の変数が入ってる これが間違いでlist[1]、list[2]にも入ってるかコードが3回実行されてるか
質問用にとおまえが改変するから原因がわからなくなる
>>197 byte[]の代わりにStringBuilderをライブラリ関数に渡せば一発解決するんじゃね?
まだいるなら、ライブラリ関数のシグネチャを晒してみてよ。
>>208 foreach (string[] execValue in execListValues)
{
writer = execValue;
notice = writer[2] + "\n" + tri + " " + bbt
+ "\n数量:" + writer[5] + "\n" + writer[6];
export.write = writer;
export.trade = tri;
export.baibai = bbt;
showNotice(notice);
}
このshowNotice(notice);メソッドがexecValue.Length回実行されてしまうんです
213 :
212 :2008/07/31(木) 00:38:59
もしかしたら何かの間違いでexecListValuesに複数のstring[]が入ってるんじゃないかと、 ブレークポイント入れて見てみましたが、execListValues.countは1でした
int count = 0; foreach (string[] execValue in execListValues) { writer = execValue; notice = writer[2] + "\n" + tri + " " + bbt + "\n数量:" + writer[5] + "\n" + writer[6]; export.write = writer; export.trade = tri; export.baibai = bbt; showNotice(notice); count++; } Console.WriteLine(count); こうしてみ
215 :
212 :2008/07/31(木) 00:45:52
>>214 showNotice()は画面に表示するメソッドなので
notice = writer[2] + "\n" + trihiki + " " + bbt
+ "\n数量:" + writer[5] + "\n" + writer[6] + "円\n" + count.ToString();
としてみたんですが
全ての表示で0でした
OK。ということはforeachループは1回しか回っていない。それはわかるな? 次はshowNotice()の中身だ。
217 :
212 :2008/07/31(木) 00:58:34
>>216 foreachを動かしてるメソッドをtimerで起動しているんですが、
インターバルが小さすぎて次のメソッドに追いつかれてしまったみたいです。
timer1.Intervalを大きくしたら正常な動作になりました。
ありがとうございます。
すみませんでした。
showNoticeはこうなってます
private void showNotice(string notice)
{
notifyIcon1.BalloonTipText = notice;
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon1.ShowBalloonTip(Properties.Settings.Default.PopTime);
System.Threading.Thread.Sleep(Properties.Settings.Default.PopTime);
notifyIcon1.Dispose();
}
なんか恐ろしいことやっとるのう
>>217 その説明とそのコードからは、潜在的なバグの存在をひしひしと感じるんだが……
そこまでは、ここではフォローしきれん。
上に同じ
221 :
212 :2008/07/31(木) 01:19:22
もうクラスファイルが9個で3000行くらいのコードになり、 ちょっと把握が難しくなってきました。 このメソッドもbackgroundWorkerの中でやってたりします。 どんな所が悪いのかよろしかったら教えてください 経験が浅くてよく分かりません
>>221 backgroundWorkerを使っているなら、Timerを使う必要はない。
たとえば、backgroundWorker_DoWorkの中で、
while (...)
{
// ほぼ一定間隔でやりたい処理
途中で書き込んでしまった。すまん。
>>221 backgroundWorkerを使っているなら、Timerを使う必要はない。
たとえば、backgroundWorker_DoWorkの中で、
while (...)
{
// ほぼ一定間隔でやりたい処理
Thread.Sleep(1000);
}
とでもすれば、大体一定間隔で処理ができる上に、追いつきを考慮する必要も
なくなるだろ。
> System.Threading.Thread.Sleep(Properties.Settings.Default.PopTime); > notifyIcon1.Dispose(); これは無駄。バルーンはShowBalloonTip()で指定した時間がたてば自動的に消えるから、 わざわざSleepしたりDisposeする必要はない。 というか、notifyIcon1を破棄してしまったら、次に使うときどうするんだ? あと、これが一番肝心なところなんだけど、こういうコードから推測できるのは、 あなたはクラスの仕様を把握していない。つまり、よくドキュメントを読んでいない、ということ。 どんなクラスにしても、きちんとドキュメントを読んで、仕様を把握して使うようにしないと、 いずれ根深いバグに悩まされることになる。
このスレ色々と参考になるなぁ…。 回答者の方々いつもサンクスです。 自分も趣味グラマーなもんでクラス設計の仕方を全然わかってなかったり…。 どうしても動けばいいや適なコードになってしまう。
ToolTip.Showで生成したのウィンドウのサイズを知る方法はありませんか? Win32APIで生成するしかないのでしょうか。
>>223 なるほど、目から鱗です
一定間隔の処理はtimer使うものだと思い込んでました
>>224 Disppose()はどうしてもバルーンが消えないから投げやり的に書いてしまったものです
クラスの仕様を把握していないのは確かにそうです
MSDNは冗長的だったり、概念的なものしか書いて無かったり、
どんな動作するのかわかりにくいです。
しかも鯖が重くてアクセスするのも大変で・・・
非常に参考になりました
次からは気をつけたいと思います、ありがとうございます
MSDNはダウンロードしてローカルで見れるぜ あとConsole.WriteLineはFormアプリでもVSの出力ウインドウに表示されるぜ
>>228 表示位置を指定したいので.Showを使っていますが
popupでも可能でしょうか。
まず調べて試してから
すいません。今さわれる環境に居ないもんで 焦ってしまいました…。
開発環境はあっというまに膨れ上がるから、HDD追加したほうがいいぞ・・・
235 :
226 :2008/07/31(木) 11:44:10
取得出来ました。有り難う御座いました。
>>229 あれコンソールも出るんだっけか?
Trace使う方がいい気もするが…
Debug使った方がコンパイル時消してくれるんじゃなかたっけ?
Traceは、デバッグ、リリース関係なく/define:TRACEスイッチに依存するからより柔軟に制御できるようになるよ さらに以下の2行を追加すると、ファイルとコンソールに出力してくれるようになる Windowsアプリケーションの場合2行目は無効だが Trace.Listeners.Add(new TextWriterTraceListener(Application.ExecutablePath + "trace.txt")); Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
さらにTextBoxTextWriterクラスを自作するとTraceの内容をTextBoxに表示できるようになって便利
System.IO.Stream stream = webResponse.GetResponseStream()で受け取ったデータを、 StreamReaderを使ってstring変換という手順を挟まずにファイル出力って出来ませんか?
Stream からよみとって FileStream に書き出せばいいじゃん ふらっと的には WebClient の DownloadFile でも
どうしてもwebResponseをつかう必要があるなら、こんな感じかな。
using (Stream rs = webResponse.GetResponseStream())
using (FileStream ofs = File.OpenWrite(...))
{
byte[] buf = new byte[ 1024 * 8 ];
while (true)
{
int len = rs.Read(buf, 0, buf.Length);
if (len == 0) { break ; }
ofs.Write(buf, 0, len);
}
}
でも最適解は
>>241 の言うとおりWebClient.DownloadFile()だと思う。
質問させてください 現在、1個のソリューションに複数のプロジェクトを作成する予定にしています。 その中で複数のプロジェクトから呼ばれるユーティリティ的なクラス群を準備する予定です。 その場合、どこにそれらのクラス群を作るべきでしょうか? VC#2008のソリューションエクスプローラでは、プロジェクトの中にフォルダは作れるようですが、ソリューション直下にはフォルダが作れないようです よろしくお願いいたします
も一つプロジェクト
246 :
デフォルトの名無しさん :2008/08/01(金) 20:18:42
C#でテキストのシンタックスハイライトをしようと思ったら どうやって作るのが一番楽ですか? RichTextBoxのTextChangedを使うのが普通ですか? それとも他にC#で使えるシンタックスハイライトに対応した テキストコンポーネントがあるのでしょうか?
>>248 その下のほうにある string メンバ のページにメンバ(メソッド、プロパティ、イベント)の一覧がある
非推奨になってるものは解説にはっきりそう書いてあるからそんなに気にしなくていい
コレクションは特に理由がなければSystem.Collections.Generic名前空間の中にあるものを使う
>>248 msdnが一瞬毎日新聞英語サイトのmdnにみえてドキッとした
Win32API質問箱スレにローカルで利用できるMSDNへのリンクが貼ってあるからそれ使ったほうが効率いいよ
msdnって場合によってはサイトの色とか見た目が違う時あるよね? あれって内容は同期してることは保証されてるのかな?
なんでそういう訳のわからん回答(というより迷答)になるんだ?
>>248 左のツリーに「String メンバー」があるし、そのページのコンテツツにも
そこへのリンクがちゃんと存在している。
この書式は基本的にはローカルのMSDNライブラリでも変わらない。
推奨・非推奨の区別の表示は定型化されてない。
ただ、本文には「旧式だからこっちを使え」とか、「こっちを使うことを推奨する」
と明示してあることも多い。
非推奨の場合、インテリセンスのキャプションにも非推奨って 出てこなかったっけ?
obsoleteだけじゃないの?
257 :
248 :2008/08/02(土) 14:11:34
回答ありがとうございました おかげさまで助かりました
プロパティのゲッター・セッターのアクセシビリティが 継承クラスで変更できないのですが こういう場合は素直にメソッドで変更するのが吉ですか? public { get; protected set; } を public { get; set;
途中で送信してしまいました。 public { get; protected set; } を public { get; set; } にしたいのですがコンパイラに起こられるので private { get; set; } public GetXXX(), protected SetXXX(hoge); みたいにするしかないですかね?
変えなけりゃいい 必要なら新しく作れば
public new XXX { get { return base.XXX; } set { hoge } }とか
262 :
261 :2008/08/02(土) 15:24:38
書き方変だな public new 型 XXX { get { return base.XXX; } set { なんかセットする処理 } }
void Hoge(string[] files) という関数があって、 listBox1.Items を引数に渡したいんだが string[] files = new files[listBox1.Items.Count]; listBox1.Items.CopyTo(files); Hoge(files); としてるんだけど、もっとシンプルに書く方法ありますか?
間違えた ×string[] files = new files[listBox1.Items.Count]; ○string[] files = new string[listBox1.Items.Count];
>プロパティのゲッター・セッターのアクセシビリティが >継承クラスで変更できないのですが 狭くすることは出来たよねたしか? だったらそれを上手く使えばシャドウイング使わなくても出来そうだね。 っていうか昔やったことがあった気がする。 まあbaseクラスを弄れない場合はどうしようもないけど。
>>263 普通にIEnumerableを引数にとってString[]を返すstaticメソッドを用意する。
267 :
デフォルトの名無しさん :2008/08/02(土) 16:52:15
相談です。 C#でコマンドラインから起動するときに、引数を取りたいのです。 Main関数があれば static void Main(string[] args) でよいのですが、GUIプログラムで、 namespace Program { public partial class Form1 : Form { private string appId; public Form1() { InitializeComponent(); } とかで始まる場合、どのようにしたらよいでしょう? あと、その引数をテキストボックスにセットするには、 private void keywordTextBox_TextChanged(object sender, EventArgs e) { } になんと書けば?
Main関数はある Form1にそのargsを渡しておけばいい keywordTextBox.Text = args[i];
269 :
デフォルトの名無しさん :2008/08/02(土) 17:05:09
ほんとだ。ありました。Form1.csばかりみてましたが、Program.csにありました。感謝。 private void keywordTextBox_TextChanged(object sender, EventArgs e) { keywordTextBox.Text = args[i]; } はだめなんですけど、こちらはどうやって渡せばよいでしょう?
Main の args 使うほうがいいと思うので超絶薦めないが Environment.GetCommandLineArgs() で取れる。 Main の args とはちょっと違うんだが(先頭に実行ファイル名が入る)。
俺はGetCommandLineArgs()のほうが場所を選ばないから好きだな アクセスはこうする string[] args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) { args[i]; } テキストボックスに値をセットする場合、TextChangedは関係ない テキストボックスで変更された値を取得したいとき、TextChangedを使う コマンドラインパラメータをテキストボックスにセットするなら以下のとおり string[] args = Environment.GetCommandLineArgs(); textBox1.Text = string.Join(", ", args, 1, args.Length - 1);
引数ってどうせ大抵解析が必要だから おいらならエントリポイントのクラスにプロパティ用意するかな
273 :
デフォルトの名無しさん :2008/08/02(土) 17:23:50
ますます感謝。Environment.GetCommandLineArgs()は昨日使ったばかりなので、そのときは、プログラム名をReplaceで置き換えましたが、ひょっとすると、この - 1を使うとプログラム名なしにできるんでしょうか。 private void keywordTextBox_TextChanged(object sender, EventArgs e) { string[] args = Environment.GetCommandLineArgs(); keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1); } としてビルドは正常に終了しました。 しかしっ! bin\Release>amazon.exe 岡本玲[リターン] としてみましたが(アマゾンで検索するソフトを作ってます)、検索用のテキストボックスには文字列入らないです…。
解析が必要なほど複雑な引数だったらクラスにしてるなぁ public class Foo { public static Foo Create() { Foo foo = new Foo(); string[] args = Environment.GetCommandLineArgs(); ... return foo; } }
>>273 TextChangedから離れろww
string[] args = Environment.GetCommandLineArgs();
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);
以上をFormのコンストラクタに書いてもう一度試してみたらいいよ
ワロタw
277 :
デフォルトの名無しさん :2008/08/02(土) 17:56:43
う。笑われた…。ま、めげずに。 コンストラクタ(初耳)とは、いちばん先頭のことですね。 「クラスのオブジェクトを作成するときに呼び出す特別なメソッドのこと」(勉強中)。 public Form1() { InitializeComponent(); string[] args = Environment.GetCommandLineArgs(); keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1); } として、できました! で、ここでさらにボタン(goButton)を押す(検索を開始する)には?
>>277 keywordTextBox.Textが空でなかったら、goButtonのClickイベントを呼び出す
>>278 goButtonってアマゾンのサイトのボタンなんじゃね?
>>279 ん?そうなのか?ってことはアプリの中身は何もできていない状態ってこと?
281 :
デフォルトの名無しさん :2008/08/02(土) 18:38:19
またまたサンキューです。 「C# イベント呼び出し」「C# クリックイベント」で検索し、 public Form1() { InitializeComponent(); string[] args = Environment.GetCommandLineArgs(); keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1); goButton.PerformClick(); } としてみましたが、待てど暮らせどクリックできず…。 いや、アプリの中身はできてて動いてますよ〜。 手動でキーワードを入れて、〔検索〕ボタン(名前はgoButton)を押せば、Amazonを検索できてます。
>>281 なんでもかんでもコンストラクタに書けばいいってもんじゃないぞ。
FormのLoadイベントに書いてみ
283 :
デフォルトの名無しさん :2008/08/02(土) 19:19:24
できました! あとは引数のないときのif文について。 string[] args = Environment.GetCommandLineArgs(); if (args != null) { keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1); } で、ビルドはできるようになりました。 bin\Release>amazon.exe 岡本玲[リターン] で、検索して起動も完璧!(大感謝です)。 が、 bin\Release>amazon.exe[リターン] だと、引数を設定しろとのパネルが出ちゃいます。
>>283 どの行でエラーが発生してるのか把握できてる?
ブレークポイントの設定やステップ実行のやり方はわかる?
で、tryとcatchについて調べてみよう。
や、try-catchの知識はいずれ必要だがここでは違うだろ まず引数の数や中身を確認しろという話だ
286 :
デフォルトの名無しさん :2008/08/02(土) 19:39:51
ナイスアドバイス。 どの行でエラーが起きているか把握してません(よわい…) ちょっと飯食ってきます。
デバッグモードでコンパイルしないとデバッグできないよ 上のほうのツールバーにリリースになってるところがあるからクリックしてデバッグに変えてみ それからコマンドラインの引数はプロジェクトのプロパティで設定できる プロジェクトツリーの根元の項目を右クリックしてプロパティ
private void Form_Load(object sender, EventArgs e) { string[] args = Environment.GetCommandLineArgs(); if (args.Length != 1) { keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1); goButton_Click(this, EventArgs.Empty); } } private void goButton_Click(object sender, EventArgs e) { // 検索処理 }
文字ごとに処理をする関数を作りたいのですが Stringで渡した方がいいでしょうか?Char[]で渡した方がいいのでしょうか?
どっちでも受け取れるよう、引数をIList<char>型にしておけばいい。
確かに俺も一瞬あるあるっていいかけたwww
>>289 あくまで文字列操作なんだったら string 渡しとけ。
冗談抜きで「文字コードの配列」として以上の意味を全く持ってない場合なら char[] でもいいけど。
>>289 どっちでも使いやすい方でいい気もするんだけど、
自分以外の人間も使うメソッドならStrigの方がいいんじゃないの?
char[]だといろいろ余計なチェックが必要になるじゃん。
>>290 IEnumerable<char>だろjk
IList<char>とかやっちゃうやつはオブジェクト指向の暗黒面に捕らわれてる
下らんこと言って楽しいのかね。 いや人から見て面白いと思ってるんだろうか。 こういう下らないヲタ系プログラマは粛清してやりたいよまったく。
>>296 お前みたいなやつのほうがウザイさ加減が上。
298 :
289 :2008/08/03(日) 01:06:07
サンクス 今のところは自分だけで使うのでStringにしておきます。
まあ、夏休みに入ったからな。
300 :
290 :2008/08/03(日) 02:29:55
本当に初心者です。ホームページ上の一部の文字情報をとってくるためには どのような関数?を使用したらよいのですか?
初心者って名乗るやつは2ちゃんで嫌われるってことを知らないのかね初心者は
>>295 あるある。意味もなく間口の広いメソッドを作って、自分しか使わないとか。
304 :
デフォルトの名無しさん :2008/08/03(日) 05:13:36
ファイルコピーの完了を監視できないでしょうか? FileSystemWatcherだと、完了までは確認できないみたいで。。。 とある掲示板では、コピー中だとファイルが開けないので、 開けるようになるまで試行して、開けたら完了とみなす。みたいな事が 書かれていたのですが、他の方法は無いものでしょうか?
どういう状況なのか微妙にわからないけど Processクラスでcopyコマンドの完了まで待機するんじゃだめなの?
306 :
デフォルトの名無しさん :2008/08/03(日) 09:32:12
おはようございます。みなさん昨日はいろいろありがとうございました。たくさんできてうれしくなって缶ビールを飲んだら、すっかり気持ちよくなって、起きたらもう朝でした。幸せ者です。
>>284 try-catchは、エラーが予測されるある処理を実行して、エラーが出たら別の処理に移るもので、今回は、そのcatchがエラーを出している、ということはたぶんわかっています。
ブレークポイントとステップ実行は、まだこれからです。ちょっとアップアップです。
>>285 ふむふむ。
>>287 ふむふむ。え〜と、たぶんいまのところずっとデバッグモードでコンパイルしていると思います。っていうか、違いがあることを知りました。
ツールバーは使ったことがなかった…。リリース/デバッグ切り替えは見つからなかったのですけど、オプションの設定とかが必要なんでしょうかね。
コマンドラインの引数はプロパティで設定できるんですか!
おお、なんかいろいろ設定できますね。
>>288 これかっ! できました。ありがとうございます。
酒を抜いてから書き込んでくれ
308 :
デフォルトの名無しさん :2008/08/03(日) 09:51:22
飲んだのは500ミリの缶ビール1本ですから。もう抜けてま〜す。 で、さらに質問。 bin\Release>amazon.exe 岡本玲[リターン] のときはばっちり動くのですが、 bin\Release>amazon.exe filename.txt[リターン] として、 filename.txt 岡本玲[リターン] 仮面ライダーキバ[リターン] とする場合に、その個々の要素で検索するには、たぶん配列の理解が必要、ということでよいんですよね? ほかにあとはファイルIOも必要か。 このあいだファイルを読んで、行番号をつける、というのを書けたので、行番号の代わりに、amazon.exeと書けばよいわけだから…。 if arg[0] == *.txt { readline ://ファイルを読む処理 writer.WriteLine("{0}\t{1}", "amazon.exe ",lines); //作ったファイルを実行! } else { //いまの処理 } とかでよいと思います。 Q ifの条件って、これでよい? Q これ、テンポラリーのファイルを作らなくても実行できるものですか?
>>302 じゃあ、初心者用と名乗ってるこのスレは、2ちゃんで嫌われ者なんだね。
ぐぐれ ・Path.GetExtension() ・File.Exists() ・FileStream→StreamReader.ReadLine() ・Process.Start()
おいおいそのやりかたはどうなのよ?
>>310 要求仕様には忠実だなwww
>>308 「//いまの処理」の所を、検索ワードを引数に取る関数として切り出す。
・ファイルが渡された場合、1行ずつ取得して↑の関数に一つずつ渡して処理させる。
非推奨のメソッドを使うと具体的にどんな問題があるんですか?
SP一つ上がっただけで急に消えたりとかバグが発覚しても直されなかったりとか
class B { public String Show() { return hoge(); } protected String hoge() { return "B";} } class C:B { protected String hoge() { return "C";} } で (new C).Show() がCを返すにはどのようなキーワードを使えばいいんですか?隠蔽するならnewを使えってIDEはいってるけど・・・ それともこの場合はabstruct class Aの中でabstruct String hoge()とpublic String hoge()を用意した方がいいんでしょうか?
何が言いたいのかよく分からんけどhogeを仮想にするだけじゃないの?
virtualとoverride
Java 屋さんと見た。
>>317 サンクス。滅多に使わないから仮想メソッドとか忘れてたw
>>318 残念。デルフィアン(?)です。Delphi.netは糞です。クラス名にTがつかないDelphiなんてDelphiじゃありません。
ここ最近質問者のキャラが濃くなってる気がする
cookieヘッダを自前で作るにはどうすればええの? HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); Uri uri = new Uri(url); CookieContainer cook = new CookieContainer(); //ここでcookieを追加したい。 req.CookieContainer = cook; req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; サーバーから受け取って保存するんじゃなくて、pythonでいう cookie_value = 'NAME="a"; MAIL="a"; PON="***";' req = urllib2.Request(req_url) req.add_header('Cookie', cookie_value) みたいなことがしたい。
すいません、自己解決しました。 cook.SetCookies(uri,cookieheader);
>>308 using System.Text;
using System.Collections.Generic;
using System.IO;
string[] args = Environment.GetCommandLineArgs();
List<string> list = new List<string>(args.Length);
for (int i = 1; i < args.Length; i++)
{
if (File.Exists(args[i]))
{
list.AddRange(File.ReadAllLines(args[i], Encoding.GetEncoding("shift-jis")));
}
else
{
list.Add(args[i]);
}
}
keywordTextBox.Text = string.Join(" ", list.ToArray());
goButton_Click(this, EventArgs.Empty);
Q ifの条件って、これでよい? if (StringComparer.CurrentCultureIgnoreCase.Equals(File.GetExtension(args[i]), ".txt") && File.Exists(args[i])) {} Q これ、テンポラリーのファイルを作らなくても実行できるものですか? できる
質問です 起動したFormを常に先頭(IEより前に)に出すのは可能でしょうか?
TopMostぐらいかな SetParentは別プロセス禁止って明記されてるからなぁ
はい
>>326 今MSDNライブラリを確認したけど、そんなこと書いてないぞ。
>>329 > 新しい親ウィンドウと子ウィンドウは、同一アプリケーションに属していなければなりません。
同一アプリケーションとは書いてあるが、同一プロセスではないな
C#から使えるエディタコンポーネントで キーワード表示や行番号表示に対応したものってありますか? 今までに見つけたものだと、キーワードが1色しか設定できなかったり 行番号に対応していなかったりしていたんですが。
MonoDevelopから引っ張ってくれば GPLだけどw
別のスレッドで実体化したフォームが、スレッドを閉じるまでフリーズしてしまうんですが、 ButtonなどからhogeForm.Close()とか呼び出すにはどうしたら良いのでしょうか? Application.Doevents()を書いてみたりしたのですが、効果はありませんでした
独自用語使うのはやめれ スレッドで実体化だのスレッドを閉じるだの そもそも普通はGUIは全てGUIスレッド一つで扱うもんだが何故別スレッドにした?
>>335 メインスレッドは極力軽くしたいと思って、別のスレッドでnewしてたんですが、
GUIの処理はメインスレッドに戻ってやるものだったんですね。
ありがとうございます
弊害はあっても必要性はないから。 小学生でも考えればわかるじゃん。
ttp://dobon.net/vb/dotnet/programing/playmidifile.html ここを参考にwmpでサウンドファイルの再生をしようとしているのですが、
音が出ません。
具体的にはthis.mediaPlayer.controls.play();
で以下の例外がプロパティに代入されています(何故かスローされない)。
どうすれば再生できるのでしょうか。
{"型 'WMPLib.WindowsMediaPlayerClass' の COM オブジェクトを
インターフェイス型 'WMPLib.IWMPPlaylist' にキャストできません。
IID '{D5F0F4F1-130C-11D3-B14E-00C04F79FAA6}'
が指定されたインターフェイスの COM コンポーネント上での
QueryInterface 呼び出しのときに次のエラーが発生したため、
この操作に失敗しました: インターフェイスがサポートされていません
(HRESULT からの例外: 0x80004002 (E_NOINTERFACE))。"}
>>338 その弊害を教えろって琴田と思うぞ、うん
341 :
339 :2008/08/05(火) 00:57:38
自己解決しました。 アパートネントモデルがSTAである必要があるんですね・・・ BeginInvokeで呼び出したメソッドからInvokeするのっておかしくないですよね?
treeViewでかれこれ5時間くらいつまっています。 任意のノードをインデックスで選択状態にしたいのですが、やり方がわかりません。 treeView1.SelectedNode.Indexにインデックスを直接代入しようとしたら、 『読み取り専用』だと言われました。悲しいです。
WPFを使わないフォームアプリってVistaでもGDIで描画されちゃうの? むしろ遅いって事?
>>342 TreeView.Nodesの中からインデックスでTreeNode取得してTreeView.SelectedNodeに代入
つかTreeViewは階層があるからインデックスっつってもどんなの指してんのかよく分からんが
TextBoxのスクロールバーが、長い文を改行した時でも元に戻らないのですが、 これをリセットするにはどうしたらいいのでしょうか? 具体的には開業後にも直前にあった文章の位置までスクロール出来てしまい、 意味の無い余白を表示出来てしまいます。 これはnotepad.exeでも変わらないので、Windowsの仕様と言う事になるのでしょうか?
意味はじゅうぶんわかるけどな。 3行分のMultiLineなTextBoxを作る。 改行を10回打つ。 BSを10回打つ。 スクロールエリアは10行分のままでスクロールバーも消えない。 ってことだろ? ならTextBoxの仕様。自分で行数数えてフォントの高さをかけて表示・非表示を 制御するか。RichTextBox使う。
>>349 すでに取り違えてるしw
横スクロールのほうでしょ。
縦はちゃんと動作するよ。
横スクロールなら横スクロールって書けや。 質問するなら推敲して誤字は直せよ。
まあでも、Editコントロールは最大横幅の情報を常に持っていて 最長の行が短くなってもこれを調整することは無い仕様、ということだろうね。 まあ行が短くなるたびに全行スキャンしなきゃならんし、このコントロールが できたのは大昔だし、こんなもんなんじゃない? 全部消すとスクロールバー自体が消えるから、入れなおせばたんとなるけどな。
で、お礼のレスもない。
普通に読めば分かるじゃん
TextBoxのスクロールバーが、元に戻らないのですが、 リセットするにはどうしたらいい? 開業後にスクロール出来てしまい、 意味無いす。 これでWindowsになるの?
日本語でおk
英語でもおk
359 :
342 :2008/08/06(水) 16:59:22
>>345 ありがとうございます。できました。
階層ごとにインデックス振られてるから、全部いっぺんに指定できると思ったんですが、
一個ずつじゃないとできないんですね。
エラー 2 引数 '2': 'int' から 'char' に変換できません。 というエラーがstringのSplitで出るんですが、定義を見てもインテリジェンスをみてもint countとあります。 なんでこのエラーが出るんでしょうか?
インテリジェンスw 第一引数の型が合ってないから想定外のオーバーロードになってる
気になる、、、どんなコード書いた?
インテリジェンスじゃなくてインテリセンスでした・・・ setting.Split( "=" ,2 , StringSplitOptions.RemoveEmptyEntries); って感じです。'='でもやったんですが駄目でした。 インストールしくじってるんでしょうか。 Splitの定義を見てもあってると思うんですが。
ちなみに setting.Split('=', '2','o'); とかでビルドが通る・・・
配列かそうでないかはちゃんと見たほうがいいぞ。 >setting.Split('=', '2','o'); は setting.Split( new char[] {'=', '2','o'} ); と同義だろう。 ということで、"=" は new string[] {"="} かnew char[] {'='} あたりでどうか。
366はマジで書いてるわけじゃないとは思うが。(いや本当のところは分からんけどw) お礼は当然すべきだと俺も思うし、質問だけしてトンズラする奴に腹が立つ気持ちも わかるんだが、だからって「お礼しろ」ってのもなんだかなあw 回答する側だって本当の動機は「人に教えを垂れたい」っていうエゴなわけで、 それに気づかない奴ってのもかなり痛い奴だなあと個人的には思うんだよね。 あとdobonさんのとこの掲示板なんかでマルチポストを執拗に報告してる奴とかさあw
>>365 おおう、できました。
ありがとうございました。
オレもお礼の強要はネタにしか思えんけどw、 回答が役に立ったかどうかは気になるから、報告があると安心するけどね。
静的なクラスでスレッド作ってた時は軽かったんですが、 Static消した途端にあほみたいに重くなるのって理由あるんでしょうか?
>>370 たぶん、というより確実に、重くなった原因は他にあると思う。
何が重いのかどんだけ重くなるのか
質問させてください IList<decimal> list = new List<decimal>(); list.add.... とか書いて作成したlistをソートしたいと考えています decimalですので単に大小を比較してソートするだけなのですが、IList<T>型にはSortとかいうメソッドはないのでしょうか? APIみてもよくわかりません よろしくお願いいたします
374 :
346 :2008/08/06(水) 21:19:07
今読みました。 何か知らぬ間に話が膨らんでるようで申し訳ないです RichTextBoxを使えば取りあえずの要求は満たされるんですね。 ありがとう
論理演算子が良くわからないんですが、 &&と&の違いって何なのでしょうか?
左側が真のとき右側を評価するかどうか
って真じゃない偽だ
if (A){if (B)} がif (A && B)って事ですか C & C = true って事ですね
>>379 >if (A){if (B)}がif (A && B)って事ですか
そいう言うこと
>C & C = true
どういうこと?
A && B は(Aがfalseのとき)Bを評価しない分高速だが、Bが実行されるときとされないときが出てくる。
たとえば、Bがobj.Close()というメソッドだった時 obj.Close()が呼び出されない場合がある。
それに対し&は処理が遅い分、どの式も必ず評価される
if(func1() & func2()){} みたいにfunc2()が評価される事を意識して&が使われるのってどうなの? 第三者に対して分かりにくくね?
ifの評価式のところでは副作用があることをやっちゃいけないと思うんだ なので俺だったらこうする bool a = func1(); bool b = func2(); if (a && b ){}
初心者用スレなんだからさあw そういう風に書くと常にそう書かないと思い込む 教条主義的というか馬鹿の一つ覚えする奴が出るだろう。
この程度でそんな思い込む奴いたらそもそもどうしようもないからどうでもいい
ドラッグドロップイベントも引数に(object sender, RoutedEventArgs e) って書いておけば間違いないですか? EventSetter使うべきですか? イベントの自動生成はどうして無くなっちゃったんでしょうか、便利だったのに・・・
387 :
デフォルトの名無しさん :2008/08/07(木) 00:33:26
StreamService.Instance.Remove<FutureData>(FutureDataUpdated); 上記のソースの<FutureData>の<>ってなんですか? ()は引数だってのはわかるんですが、<>はなに?
ジェネリックでググルかMSDN。 この程度であわててたらLinqでどうなるかわからんね。
>>385 DragOverやDropイベントをMSDNで引く
→イベントのデリゲートの型がわかる
→今度はそのデリゲートのページを見る
→適切な引数がわかる
>>389 コントロールの要素内にイベント名入れたらインテリセンス出てきました。
すみませんでした
System.Windows.Input.KeyEventArgsで、 [Ctrl]+[Key.hoge]を判別するにはどうしたらいいのでしょうか? System.Windows.Forms.KeyEventArgsでは、 e.ControlでCtrlキー、e.AltでAltキーの押下が判別できましたが・・・
373です
>>375 msdn読んで、IList<T>にはSortメソッドが存在せず、List<T>にはSortメソッド存在することは理解しました。
しかし、なぜIList<T>にSortが存在しないのかやはりわかりません
IList<T>の解説を読むと
「IList<(Of <(T>)>) ジェネリック インターフェイスは、ICollection<(Of <(T>)>) ジェネリック インターフェイスの子孫であり、すべてのジェネリック リストの基本インターフェイスです。」
とあります
それなのに、SortメソッドがIList<T>になくList<T>にだけあるのはいまいちぴんときません
そもそも、基本的な質問なのですが、リスト構造を使いたい場合
List<XX> list = new List<XX>
という書き方は間違いなのでしょうか?
インタフェースが存在するなら、生成は実際のクラスで行うにせよ、アクセスはインタフェースを介して行うのが常識だと思っていましたが、違うのでしょうか?
ついでに、さらに質問ですが、IList<T>のAPI読んでも、IList<T>の実装クラス一覧が見当たりません
この辺はどこを見れば良いのでしょうか?
何度もすみませんが、よろしくお願いいたします
>>392 だから、List<>とIList<>は名前が似てるだけで他に特別な関係があるわけじゃねーんだよ。
394 :
デフォルトの名無しさん :2008/08/07(木) 02:38:25
>>392 > インタフェースが存在するなら、生成は実際のクラスで行うにせよ、
> アクセスはインタフェースを介して行うのが常識だと思っていましたが、違うのでしょうか?
どこで聞きかじった知識なのか知らんが、そんな常識は捨ててくれ。今すぐ。
>>393 MSDN読むとList<T>はIList<T>の実装のように見えますけど、違うのでしょうか?
>>394 じゃ、なんのため、インタフェースがあるのでしょうか?
多重継承を実現するため
IList<>はインターフェイスを継承させるだけのクラスで、 実際にはそこから派生したListやDictionaryなんかを使うものでしょ?
>>395 そう。IList<>はただのList<>の親クラス。
お前はどんなクラスでもObjectにキャストしてから使うのか。
原始的なIListに高度なSortはいらないという設計になってるだけでしょ ぶんまわすだけならその使用法で問題ないと思うが Sortしたいならそのようなinterfaceを持つものを使うしかないよ 自作でも何でも
.Net 3.5ならIListというかIEnumerableにOrderByがある まあListならSortを使ったほうが効率的だろうけど
>>392 >>395 ソートはリスト(クラス名とかじゃなくて概念そのものね)の構成要素じゃないし、
IList<T>を最小構成にしたかったのでは
インターフェイスは必要だから/必要と考えられたからあるのであって、
必要がなければ無理に使わなくてもいいし、その必要性が理解できていないレベルなら
使うという選択肢自体削っていいと思う
回答側も夏まっさかりか・・・
「SortしたいならListのまま使え」でFAなのに、何を騒いでいるんだ?
>>392 > それなのに、SortメソッドがIList<T>になくList<T>にだけあるのはいまいちぴんときません
インターフェイスはその機能を実現する最小限の機能セットであるべきだから
IListにSortメソッドが含まれると、IListを実現するすべてのクラスでSortを実装しなければならなくなり、使い回しにくくなってしまう
車が運転できますといった場合、カーナビの操作までは含まれないような感じ
> インタフェースが存在するなら、生成は実際のクラスで行うにせよ、アクセスはインタフェースを介して行うのが常識だと思っていましたが、違うのでしょうか?
局所的に使うだけなら意味ないよ
メソッドの引数、戻り値、クラスのプロパティやフィールドなどで使うなら意味がある
たとえば、メソッドの引数として使えば、以下のように、Listや他のIListから派生したクラスが使えて便利になる
ただし、この場合はIEnumerable<T>を使えばもっと多くの種類のコレクションクラスが使えるようになる
void DoSomething(IList<string> list)
{}
> ついでに、さらに質問ですが、IList<T>のAPI読んでも、IList<T>の実装クラス一覧が見当たりません
> この辺はどこを見れば良いのでしょうか?
リフレクションを使って自分で調べるしかない。俺は自作の検索ツールを使ってる
>>382 if (a != null && a.Foo())
{}
とかは普通に便利だろ
>>376 '&'は論理演算子じゃなくて、ビット演算子
Booleanを扱う'&&'とは根本的に違う
どっちかというと'+'とか'-'とかに近い
ビット演算子というのは、数字を2進数として扱い、ビットごとにANDをとったりする
010 & 011 = 010
010 & 101 = 000
というような計算を行うもの
[Flags]属性付きの列挙型でよく使う
382は副作用がある場合についていってるんだし boolに対する&は論理演算だし
>>406 bool型への'&'は1桁の2進数を処理するビット演算だから論理演算じゃないだろ
副作用の問題だって、論理演算のように見えるビット演算だから混乱を招きやすいわけで、
理解するまで'&&'だけ使っとけって言ってやればいいじゃん
なぜわざわざ初心者を混乱させようとするんだ
>>395 IList<T> は、単に list[i] で要素を取れることだけ保証したインターフェース。
Sort は要件に入ってない。
どうしてもインターフェース化したいなら ISortable とかを別インターフェースにすべきだろう。
>>405 Perl ではよく使うけどね、短絡 &&, || の副作用を積極的に使うの。
ただ、C# ではコーディングマナーとしてはそれは良くないとされてるはず。
& がビット単位なのは C++。
C# の場合、違いは短絡評価の有無だけ。
a && b は
operator false(a) ? a : operatora & (a, b)
という挙動になる。
hoge != null && hoge.IsHoge なんかはよくやっちゃうけど
>>410 偉そうに無意味な知識をひけらかして混乱させている連中のことを言ったわけだが
反応するところを見ると自覚はあったわけだw
意味わからん、俺書くの初めてだし。
俺は
>>406 →
>>407 の流れに対して言っただけ。
うそ言ってるから混乱させてるのはお前だろっておもっただけ。
ああ、そういう意味では、特に1行目に対して言っただけ。 3行目は同意。
ループ待機させてるスレッドが意図しないタイミングで無くなってしまうんですが、 スレッドが消える要件にはどんなものがありますか? 状況 ・例外は起こっていません ・ブレークポイントをループ直後のにはさんでいますがそこまで進みません
ループ直前でブレイクさせてみたら
416 :
414 :2008/08/07(木) 11:09:33
自己解決しました breakと書くところをreturnって書いてましたorz
どじっ娘かよw
>>392 最近 DI を始めましたって感じかもしれないね。
あれ始めてすぐは何にでもインターフェイスがなければならないと思うようになって、
依存性が高かろうが低かろうが、標準ライブラリのクラスだろうがDIしないと気がすまないようになる。
一過性の病気というか麻疹みたいなものだ。
PaintBoxでResizeイベント中にImageを弄ったら どうやらもう一度Resizeが呼ばれるらしいのですがなんとかなりませんか
>>419 とりあえずフラグ作って2回目の呼び出しを無視したら?
Resizeって無限に呼び出されずに2回だけ呼び出されるんだな……なんでだろ?
というか、何でImageを弄る必要があるんだろう。 サイズが変わったからってImageを弄る必要は普通はないはずだと思うけどな。 ところでふと思ったが、ResizeとSizeChangedって何が違うんだっけ?
>>420-421 SizeChangedイベントを使うとうまくいきました
ありがとうございます
>>418 DI以前にプログラムそのものが始めてです(DIはつい最近知りました)
Java、C#、rubyを触ってます
色々な先生から話を聞きましたが、Collectionのような外部とのやり取りが決まっていて内部の実装方法にたくさんのやり方がある場合インタフェースは有効な手段だと感じています
とりあえず、List<T>はインタフェースを介さずアクセスする方向で進めていきます
要件にあった必要最小限のインターフェースを使うって方針で間違ってない。 Sort が必要なら List<T> そのまま使えばOK。
↑デタラメ
>>423 逆に、
List<T>というただ一つの実装方法を使う時には
インターフェイスは不要な手段ということでは?
>>426 まだ未熟な人間ですが、たとえ、実装が1個しかなくても、リストのような提供する機能がはっきりしていて、実装方法が複数考えられる場合インタフェースでアクセスすることが望ましいと考えています
リスト構造は実装方法が色々と考案されており、これから新たにList<T>と同等の機能を提供する別の実装が提供される可能性があります(もしくは自作する可能性もあります)
その場合、使用するクラスを変更した場合、インタフェースを介してアクセスしていれば、インスタンス生成部を変更するだけで修正が終わるなどの利点があると考えています
そりゃ前提条件を変えれば結論が変わる事もある
C++ の STL なんかだと、sort はコンテナのメンバ関数じゃなくて、 std::sort(random_access_iterator begin, random_access_iterator end) よね。 ただし、std::list なんかは、↑ランダムアクセスイテレータ持ってないけども list 専用のアルゴリズムでソート可能なんで list::sort を持ってる。 C# もそれに則ってるんじゃないのんだろうか。 整列は Array.Sort とか Enumerable.OrderBy を使うのが基本で、 List<T>.Sort は List<T> 専用のアルゴリズムのソート。
IList<T>はランダムアクセスイテレータを持ってるわけだけど インターフェース越しの呼び出しは遅いからなあ 配列にコピーしてからやったほうが早そう
C#にダックタイピングはいらんですよ
極めて細かい粒度(メソッド単位)で全てインタフェース化したら、Listは幾つのインタフェースを実装するんだろうね? 細かすぎる粒度は、全体の見通しを悪くして、仕様を複雑化させるだけだと思うんだ。(要はバランス) もし自分が納得いかない場合は、納得できる物を自分で作れば良い。 君以外の大多数の人々は現状で満足している事を忘れるべきではない。
433 :
426 :2008/08/08(金) 03:20:54
>>427 今までの他の人たちのレスを繰り返すことになるかもしれないけど、
単にSort()を持ったインターフェイスが欲しいのならば、
ISortable を作れば良いし、
ISortableList : IList , ISortable みたいなインターフェイスを作ってみてもいいかもしれない。
List<T>と同等の機能の別実装ならば、
普通に継承してオーバーライドしてしまえば、ほとんど問題解決しない?
それ以上の可能性のために冗長な機能を付ける必要はないのでは?
あと、IList<T>自体はSynchronizedCollection<T>にも実装されているし、
「インデックスによって個別にアクセスできるオブジェクトのコレクションを表します。」
となっていて、そういうふうに設計されている。
List<T>.Sort()があるからIList<T>.Sort()を作れ、というのは不自然かなと思う。
アルゴリズムに関してはIEnumerableだけあればいいんだよ LINQはそれに気づかせてくれた
データが然程多くなく、かつリソースが潤沢ならな
using System; class Exercise { static void main() { Console.Write("input a:"); int a = int.Parse(Console.ReadLine()); Console.Write("input b:"); int b = int.Parse(Console.ReadLine()); Console.Write(a + b); Console.Write(a - b); Console.Write(a * b); Console.Write(a / b); } } と入力すると エラーをはくのですが、文法で間違っているところはどこでしょうか?
437 :
436 :2008/08/08(金) 14:56:07
実際には static void main()の前などには空白を入れています
main→Main
なんでエラーを書かないんだろうね? 多分読みもしてないんだろうね
自己解決しました。 それと、 Console.Write(a + b); Console.Write(a - b); Console.Write(a * b); Console.Write(a / b); だと横一列に結果がでてくるので改行したいのですが \nはどこに書けばいいんでしょうか?
そりゃ馬鹿だから
>>440 Console.WriteLine();を使え
443 :
デフォルトの名無しさん :2008/08/08(金) 15:04:14
改行したい場所に書けばいい
なにが自己解決やねん
>>442 カスの質問にお答えしていただいてありがとうございます
>>443 Console.Write(a + b)\n;
Console.Write(a + b);\n;
Console.Write(a + b,\n);
などを試しているのですができません
くだらなさすぎる質問ですみません
>>438 書き込むときに更新していなかったで気づきませんでした
ありがとうございます
Console.WriteLine(a + b);
Console.Write(a + b); Console.WriteLine();
Console.Write("{0}\n",a + b);
Environment.NewLine
>>447 >>448 >>449 ありがとうございます。
ネットでC#について説明しているところを順番に読んでやっているのですが
Console.Write("{0}\n",a + b); のなかの
{0} の意味が良くわかりません。
例えば、演習の回答に
Console.Write("{0} + {1} = {2}\n", a, b, a + b);
このように書いてあるのですが、良くわかりません
>>452 わかっています
ただ、\nでやる場合はどうしたらいいかが
気になったので質問させていただきました
そういうのは質問時に含めるとかしないとな。 あと、期待した答えじゃないレスを無視とかしてたら 誰も相手にしてくれなくなっちゃうよ。
Console.Write("" + (a + b) + "\n");
>>455 無視してるつもりはなかったのですが
そのようにとらえているのであれば、すみません
もうちょっと詳しく説明が載っている本を買って勉強したいと思います
>>456 ありがとうございます
そのような方法もあるんですね
Console.Write("{0} + {1} = {2}\n", a, b, a + b); {0}にはaが, {1}にはbが, {2}にはa+bが入る
Console.Write("{0} + {1} = {2}\n", a, b, a + b);は Console.Write(a + " + " + b + " = " + (a + b));と同じ 文字列の後に続く2つ目の引数を0番、それ以降1番, 2番, …として {0}のところが0番、{1}のところが2番、{2}のところが2番、…にそれぞれ置き換えられる
{0}は最初の引数、{1}は二番目の引数・・・といった感じで入る
そんなにMSDNのConsole.Writeの記述は読み解きにくいのだろうか
>>459 ありがとうございます
そういう意味だったんですね
そんなん見た感じで分かるじゃん
>>464 自分は馬鹿なのでそのようなことができませんでした
とりあえず実行してみるといい
「馬鹿」は免罪符じゃねーぞゴミ
馬鹿につける薬は無い 二度と来るな
やさしくしているじゃないか
精神的に向上心の無い者は馬鹿だ、と太宰治も書いている 向上心の無い奴に教えても無駄だね
煽りはスルーしてね
Regex.Replaceの(string, MatchEvaluator)のオーバーロードって何に使うの?
>>471 それ漱石……
>>473 マッチ文字列によって置換後の文字列を変更する場合
正規表現が"[ab]"だとして、MatchEvaluatorでマッチしたのがaだったらAに変換、bだったらBに変換、とか。
>>474 Regex.Replace(string, MatchEvaluator)にはその正規表現を受け取る引数が無いんだけど
476 :
475 :2008/08/08(金) 16:11:51
ああすまん勘違い
メインでは無いスレッドから呼び出したスタティッククラスのメソッドでInvokeして、 メインスレッドのインスタンスにアクセスしたいのですが、 エラー1 静的でないフィールド、メソッド、またはプロパティ 'System.Windows.Forms.Control.Invoke(System.Delegate)' で、オブジェクト参照が必要です。 と言われてしまいます。 なので、静的でないフィールドを宣言使用すると、 「静的クラスでインスタンスメンバを宣言することはできません」 と言われます。 要求を満たすにはどうしたらいいのでしょうか?
「なので、」って何が「なので」よ。 >エラー1 静的でないフィールド、メソッド、またはプロパティ >'System.Windows.Forms.Control.Invoke(System.Delegate)' >で、オブジェクト参照が必要です。 この例外のメッセージに書いてあるまんまだと思うんだけど。
メインスレッドのインスタンスって意味不明だな 一般にインスタンスはスレッドに縛られない コントロールにアクセスする以外はInvokeする必要は無いよ?
480 :
477 :2008/08/08(金) 22:38:51
良くまとまって無かったみたいですみません まずメイン(Form1の)スレッドでは無いループ処理のスレッドで、 try~catch文のcatchの中から前述のスタティックメソッドを呼び出したいのですが、 そのメソッドはForm1のパブリックメソッドを呼び出すように記述しており、 ここで "有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドから コントロール 'textBox1' がアクセスされました。" と、例外を出してしまいました。 そこで、スタティッククラスのスタティックメソッドからInvokeすれば良いんじゃないかと思い、 取りあえず書いてみたところ前述のようにコンパイルエラーが出ました。
なんか要領を得んなあ。 最小限のコードを晒してくれ
>>480 またこういうサポセンのお姉さんを泣かせるエスパ召還タイプの人か。
まずチミの言ってるInvokeってのはISynchronizeInvoke.Invokeだってこと分かってる?
つまりISynchronizeInvokeを実装したクラスのインスタンス(早い話がコントロール)
の参照を持ってなきゃ呼べない。
この当たりの当たり前のこと理解してる?
webClass{ void methodHoge(){ try{ }catch (WebException we){ WebExceptionClass.WebExceptionHandler(we); return false; } } } static class WebExceptionClass{ public static void WebExceptionHandler(WebException webException){ switch (webException.Status){ case WebExceptionStatus.ConnectFailure: Form1.Form1Instance.stringbuilder.Append(webException.Status.ToString()); Form1.Form1Instance.stringbuilderUpdate(); break; } } } public partial class Form1 : Form{ private static Form1 _form1Instance; public static Form1 Form1Instance{ get{return _form1Instance;} set{_form1Instance = value;} } public void stringbuilderUpdate(){ TextBox1Text = stringbuilder.ToString(); } }
元VBerでしょ君。 VBが悪い言語だとは思わんが、VBerってこういうカプセル化もなにもあったもんじゃない コードを平気で書くんだよななぜか。 しかもコミュニケーション不全症候群ときてるw 文章ってのは読み手の厚意を期待してテキトーに手を抜いて書くものじゃなくて、 どんな意地悪な奴が批判的に読もうと思っても一意に解釈するしかないように推敲して書くんだよ。
>>482 System.Windows.Forms.Control.Invokeではないんですか?
methodHogeを呼び出すループでもInvokeしているんですがインテリセンスではControl.Invokeになってます
>>484 VBは全く経験がありません。
Javaを1ヵ月と、Cを1ヵ月の経験があります。
C#は2ヵ月くらいです
テキトーではなく本当にどこが悪いのかわからないんです。
>>486 まず君の「問題」を他人に正確に伝える努力をしよう。
ひょっとすると君自身は「そうしてる」つもりかもしれないが、
客観的には成功しているとは思えない。
君がやっていることは「俺は困ってるんです助けてください」
と同情を求めているだけ。
誰もエスパーじゃないんだから、君が君自身の問題を正確に表現しない限り
誰も助けようがないだろう。
VBには暗黙のFormインスタンスというものがあるが、C#にはない。 何らかの方法でWebExceptionHandlerがFormインスタンスを参照できるようにプログラムを書かないといけない。
>>488 Form1Instanceではなぜできないのでしょうか?
シングルスレッドの時は問題なく出来たのですが
490 :
488 :2008/08/09(土) 00:23:03
>>489 あーすまん。暗黙のインスタンスは関係なかったね。こうでいいんじゃないの?ほか突っ込みどころ満載なのは無視するとして。
Form1.Form1Instance.Invoke((MethodInvoker)Form1.Form1Instance.stringbuilderUpdate);
>>490 駄目みたいです
InvalidOperationException
Message="有効ではないスレッド間の操作:
コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox1' がアクセスされました。"
他の突っ込み所とはどういったところでしょうか?
492 :
477 :2008/08/09(土) 01:40:01
class Form1に public void text_Rewrite() { if (this.textBox1.InvokeRequired) { this.Invoke((MethodInvoker)delegate() { stringbuilderUpdate(); }); } else { stringbuilderUpdate(); } } を追加してstringbuilderUpdateのかわりに呼び出すようにしたらうまく出来ました。 ありがとうございました
WebBrowser(Sys.Win.Forms)で、ホイールクリックによって「新しいウィンドウ(タブ)を開く」を実装したいのですが、ホイールを押してもスクロールカーソルが表示されるだけでリンクが動作しません。 いい方法があればご教授ください。
>>493 foreach (HtmlElement link in webBrowser.Document.Links)
{
link.MouseUp += new HtmlElementEventHandler(link_MouseUp);
}
private void link_MouseUp(object sender, HtmlElementEventArgs e)
{
if (e.MouseButtonsPressed == MouseButtons.Middle)
{
// 色々
}
}
動的に生成されるアンカー要素にはどう対応する?
496 :
デフォルトの名無しさん :2008/08/09(土) 15:13:46
書式に合った文字列かを判別する方法ってありますか? 設定ファイルなどで "#####0" などと定義しておいて、対象の文字列が、6桁の数値になっている。 みたいな感じで、定義したフォーマットにあっているか判別できるといいなぁと。 Formatなどで、数値などを特定の書式に変換はできますが、 逆に書式に合った数値なのかを判別できないものかと。。。
正規表現使えば良いんじゃね
>>494 ありがとうございます。
まさかそんなところにあったとは・・・。
WebBrowserにMouse周りのイベントがないのに納得
しかし、スクロール機能が先に効いてしまい、MouseUpが取れません。
この機能をキャンセルすることってできますか?
すみません 度忘れしてしまったので教えてください VBなどでもループ処理中になるとテキストボックスなどに文字を表示して も表示がされるように、システム?に一時的に制御を明け渡す命令がありましたよね・・・ あれってなんでしたっけ?orz
Application.Doeventsのことをいってるんだろうけど、 スレッドを自由に起動できるドトネトでは基本的にこれは「いらない子」のはずだ。
502 :
500 :2008/08/09(土) 22:44:50
たいしたツールではないんですがファイルを読み込んで加工した上で出力を大量に 行うんですが経過が更新されないもんで・・・
>>502 だからUIスレッドでデータ処理するなよ
早くマルチスレッドのお勉強をしましょうね
取りあえずBackgroundWorkerから始めよう
うるせーよ 教えろ
MSDNれカス
509 :
500 :2008/08/10(日) 00:13:51
>>506 つーか関係ない書き込みすんなw
BackgroundWorkerいいですね〜勉強してみます。
俺は普段ThreadStart/Threadで済ます
BackgroundWorker と Thread のわかりやすい違いって何? 見当外れの質問ならスマン。
UIスレッドにアクセスするのにInvoke使うかイベント使うか
513 :
デフォルトの名無しさん :2008/08/10(日) 01:09:13
>>512 backgroundworkerのrunworkerイベントとかprogresschangedイベントって
必ず呼び出し元のスレッド(UIスレッド)で実行されるようになっているけれど
これってどういう実装したらいいんだろう。
Compact Framewrokにはbackgroundworkerがないもんで、似たものを自分で
作りたいんだけど、普通にイベント実装しただけでは当然のことながらbackgroundworker
側のスレッドで実行されてしまうし。
>>513 こっそりコントロール作ってCreateControlしといてそれのBeginInvoke呼び出せ
ちょっと確認したらCreateControlもないのか。CreateHandleも。 代わりにHandleを事前に参照しとけばなんとかなるかな。
FtpWebRequest に、WebClient の ProgressPercentage みたいな機能ありませんか?
FTPにはファイルサイズを数値で取得するような手段が無いからな
C#でwinnyつくれる?
>>513 ISynchronizeInvokeインターフェイスを使う
if (ISynchronizeInvoke.InvokeRequired)
{
ISynchronizeInvoke.Invoke.BeginInvoke(デリゲート);
}
else
{
(デリゲート).DynamicInvoke();
}
詳しく知りたければSynchronizingObjectプロパティを実装しているクラスをReflectorで調べる
>>511 BackgroundWorkerはThreadPoolのスレッドを使い回すので効率的
Threadはスレッドを新規に立ち上げる必要があるので負荷がかかる
お客様の中に
>>499 をご存知の方はおられませんかー?
独習C#第2版を読んでC#を学習しています。 私はPCにVisual C# 2005 Express Editionを入れているので、Windowsのコマンドプロンプトで プログラムをコンパイルするには、 SET Path=%Path%;C:\Windows\Microsoft.NET\Framework\v2.0.50727 というコマンドをコマンドプロンプトを起動するたびに実行しなければなりません。 しかし、以前読んだJavaの入門書では初めにWindowsのユーザー環境変数を設定するように 書いてあり、一度設定するだけで済み、その後のコンパイルが楽チンでした。 そこで、もしかしたらC#でも上記のコマンドを実行する代わりに、新しいユーザー環境変数を以下の ように設定すれば良いかなと思ったのですが、このような認識で誤りはないでしょうか? 変数名 PATH 変数値 C:\Windows\Microsoft.NET\Framework\v2.0.50727
; で区切って足していけばOkだよ
524 :
デフォルトの名無しさん :2008/08/10(日) 09:59:39
>>515 >>514 いいアイデアかと思ったけどCFではサポートされてないんですねえ。。。
Controlを継承して、BgWorkerCfを作って 非同期処理からイベント発動
するときに this.Invoke(ProgressChanged, new object[]{this, e})
とかやって、コントロールは非表示にしておけばできないこともないすかね…。
>>519 これも 検討したんですが、compact frameworkではdynamicinvokeがサポート
されていないんですよね…。。。。
SDKコマンドプロンプトがその辺の設定を全部やってくれるはず
>>524 > いいアイデアかと思ったけどCFではサポートされてないんですねえ。。。
ん? 何が? HandleとBeginInvokeはCompact Frameworkでも使えるはずだけど?
コントロールはハンドルさえ作っとけばFormに追加する必要も無いはずだよ、Compact Framework独自の制限が無い限り
何かよくわからないけど、後に役立ちそうなレスは保存そしておこ
BackgroundWorker を使ってみた。 ・DoWork ここで色々やる。 Form上のコントロールへのアクセスはできない。 ・RunWorkerCompleted ・ProgressChanged ここでForm上のコントロールに結果を反映させる。 結果はe.Resultまたはe.UserStateで渡される。 何かやって、終わったら(もしくは途中で)結果をobjectとして呼び出し元に反映する。 シンプルで時間がかかる処理には便利。 こんな感じの理解で良いのかな? ツッコミ等あればよろしく
すみませんが、どなたか教えてください。 開発環境:VisualC#2008Express デザイン画面を使っているとInitializeComponent()やLoadイベントのハンドラ等が表示時にコンパイルされますよね? この時に自分で書いたコードの一部をコンパイルされないようにしたいんです。 (そこを通るとコード外のリソースにアクセスしにいって、デザイン画面がバグるので) デザイン画面用のコンパイル時のみ#defineされているものとかあるのでしょうか? それがあれば、#if !とかで制御できると思うのですが…。 よろしくお願いします。
if (DesignMode) コンパイルはされるけど実行されなくなる
532 :
デフォルトの名無しさん :2008/08/10(日) 13:29:36
NUnitのテストケースをステップ実行させたいのですが、 どういったツールを利用すれば可能になるのでしょうか?
>>531 ありがとうございます。
期待していた動作が得られました。
プリプロセッサか関数属性かどっちかにあるんじゃないかと思ってたんですが、Componentのプロパティなんですね。
なんとなく意外な感じです。
>>532 Debugger.Launch()とか
>>534 nunit.exeを、でしょうか。
結構面倒な手順を踏まないといけないんですね...
いやデバッグしたいコード中で うまくいったらラッキー
テストドリブンドットネットとかでできなかったっけ? 通常実行かデバッグ実行か選べた気がする
CodeDomProviderでC#のコードをコンパイルする時、そのコードの中でSystem以外の名前空間に対してusing使っちゃいけないんでしょうか?
別に構わんが、アセンブリへの参照は追加しとけ。
Javaのコンストラクタ内で利用するsuperと同様の機能はC#にありますか? あるとしたらどのように書けばよいのでしょうか
クラス名(int a) : base(a) { }
ヘルプでコンストラクタ調べれ
どうもです
545 :
デフォルトの名無しさん :2008/08/10(日) 22:42:03
>>497 ,498
ありがとうございます
助かりました^^
WebClient uploadClient = null;
private void btnUP_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = openFileDialog1.FileName;
Uri u = new Uri("
http://xxxxxxxxx/up/ ");
if (uploadClient == null)
{
uploadClient = new WebClient();
uploadClient.UploadProgressChanged += new UploadProgressChangedEventHandler(uploadClient_UploadProgressChanged);
uploadClient.UploadFileCompleted += new UploadFileCompletedEventHandler(uploadClient_UploadFileCompleted);
}
uploadClient.UploadFileAsync(u, filename);
}
}
このようなプログラムを実行してもファイルがUPできないんですが、どこがおかしいか教えてもらえないでしょうか
547 :
デフォルトの名無しさん :2008/08/10(日) 23:10:52
TradeDivision 列挙体 メンバ名 内容 Sell 売り Buy 買い TradeDivision td; 上記のような列挙体があって、設定されているメンバ名をとりだしたい場合はどうすればいいのでしょうか?
よくわからんが、ToString()しとけ
>>547 clickのツールのアドインを作っているのかな?
それからメンバ名の取り出しじゃなくて、内容の文字列(売り、買い)を取り出したいのかな?
C#の言語での質問というわけではないんですが…。 VisualStudioのソリューションエクスプローラーでフォルダを作って 作成したファイルを分類すると、勝手に名前空間が書き換えられます。 実際にフォルダができる必要もないんですが、こちらはまあいいとしても名前空間の書き換えは困ります。 コードに影響を与えず、上手いことソリューションエクスプローラー上でファイルを分類する方法は無いでしょうか?
552 :
デフォルトの名無しさん :2008/08/10(日) 23:58:42
googleのような電卓(テキストボックスに1+1*8を入力すると9と出力する)を作りたいのですが、 どのように作ればいいのかさっぱりわかりません。 どなたか教えていただけないでしょうか?
tp://dobon.net/vb/dotnet/programing/eval.html
>>551 別に整理しても自動で名前空間は書き換えられないだろ。
フォルダの方に新規にクラス作成すると確かに名前空間付くけど、
それは作ってから消すか、トップレベルに作ったものをドラッグで移動すればいいんだし。
>>554 ちょっと試してみましたが、書き換えられるものと書き換えられないものがありますね。
・〜.xsd以下のDataSet関連派生クラス群は移動すると書き換えられる。
・Formの場合、デザイナ生成コードの箇所のみ名前空間が書き換えられてビルドできなくなる。
(ということがあったと思うんですが、今試したら再現しませんでした。気のせいだったのかな…)
・単なるコードファイルは問題なし。
自動生成したデータセット関連以外なら移動しても大丈夫なのかな。
上も移動した後、消せばいいのかも知れないけどデザイナで編集したときとかが不安。
まあ、とりあえずテストして大丈夫な場合とそうでない場合をもうちょい調べてみます。
ありがとうございます。
556 :
デフォルトの名無しさん :2008/08/11(月) 00:45:55
>>550 おおー そうです。
これだけでclickのツールってよくわかりましたね^^
>>556 //列挙体の設定
TradeDivision td = TradeDivision.Buy;
//内容の文字列(売り、買い)の取得
string str = CodeService.GetString(td);
で出来ると思う。
質問内容によっては先物板のclickのスレ等で質問で質問したほうが
いいかもしれないけど過疎っているからなあ・・
558 :
デフォルトの名無しさん :2008/08/11(月) 01:24:16
数字や文字を文字コード(ASCII)に変換する方法ってありますか?
>>559 つ 【System.Text.Encoding】
>>556 C#でツール書ける環境提供してるのってクリックだけじゃんw
563 :
デフォルトの名無しさん :2008/08/11(月) 13:50:11
>>527 Controlクラス継承してBackGroundWorkerCf クラスを定義、
↓
呼び出し元で
BackgroundWorker bw = new BackgroundWorker();
IntPtr = bw.Handle;
とハンドル参照してハンドル作成
↓
BackgroundWorkerCfクラスのイベント発動時に
this.Invoke(new Action<ProgressChangedEventArgs>(OnProgressChanged),new object[]{new ProgressChangedEventArgs(progress,null)});
てな具合にしたら、きちんと呼び元のスレッドで実行されました。
Control派生しちゃうとフォームに貼り付けられるから好みじゃないな
ん? 呼び元のスレッドってそれはつまりUIスレッドに渡せなかったってことか?
>>564 こういうのはUIスレッドへの同期専用に軽量のコントロールをシングルトンで
持つのが普通じゃないのかなあ。俺はそうしてるけど。
チームなり自分個人なりのクラスライブラリってあるでしょ?
そういうのの適当なクラスに静的メソッドとしてもっておけば
毎回くだらないことで悩んで時間つぶさないで済む。
シングルトンじゃコントロール生成するスレッドの制御が難しくなるから不適当。
それはないと思うよ。 UIスレッドに同期する必要があるオブジェクトのインスタンスの生成をUIスレッドで 行う場合はそもそも何も考える必要はないし、そうでない場合も いろいろ工夫の仕方はある。 一番簡単なのは、 private static control uiSyncObj = new Control(); とでもしておくこと。 そもそもUIスレッドで起動するアプリならこれで何も問題ないはずじゃないの?
Controlを同期用に渡してやるのも単純でいいよ。 new BackgroundWorkerCF(textBox1);
>>568 普通はありえないけどUIスレッドが複数あった場合はものすっごく混乱する。
>>569 俺は568だけど、それは問題がある場合が多い。
だって簡単に言えば、イベントを受信する側のフォームの寿命っていいうのは
しばしばアプリの寿命と違うからね。
572 :
567 :2008/08/11(月) 15:42:19
>>568 あー、ちょっと前提がずれてた。
Form1にInvoke用メンバとして持たすなら問題ないね。
BackgroundWorker代替クラスのメンバとして持たす場合を想定してた。
後処理のことをいえばVSでフォームにBackgroundWorkerを追加しても System.ComponentModel.IContainer components に追加してくれないのは不満だな。 これに追加してくれればスレッドよりも先にフォームが閉じられても対処されるのに。
派生させてIContainer引数に取るコンストラクタを自作 実に不毛だな
using (WebBrowser b = new WebBrowser())
{
b.DocumentCompleted += delegate(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument doc = b.Document;
Console.WriteLine(doc.Title);
};
b.Navigate("
http://www.google.co.jp/ ");
while (true)
{
Thread.Sleep(100);
}
}
WebBrowserクラスを使ってHtmlDocumentを取得したいのですが、
上のコードがいつまで経っても終わりません
間違っているところとかあるでしょうか……
えーと、無限ループで待機してもDocumentCompletedが呼ばれないという意味です
そりゃお前、スレッドが占有されてたらDocumentCompleted呼び出される余地はないだろう
578 :
デフォルトの名無しさん :2008/08/11(月) 18:53:36
うぉおおおおおおおおおおおおおおおおおおおおおおお FormのDisposedはその名に反して終了時に呼び出されん!? とりあえず static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 form1 = null; AppDomain.CurrentDomain.ProcessExit += (sender, eventargs) => { if (null != form1) { form1.Dispose(); } }; ... } みたいにしてるんだけどカコワルイ。 終了処理とかどこに書くん? デストラクタもないしorz
終了時ってのがいつのことなのかわからんが呼ばれるんじゃね? つか普通はClosedあたりに書くんじゃね?
>>578 Form.FormClosedとかとかApplication.ApplicationExitとかはだめなの?
Mainの最後じゃあかんの?
初レスです。 C#(.NET 3.5 & WPF)でP2P分散データベースを構築するアプリケーションを作ろうとしているのですが、データベースとしては何を使うべきでしょうか。 # ローカルデータベースやデータセットなどがあると思いますが、どちらを使えばいいのかイマイチわかっていません。。。 データ量は100万以上を想定しています。 よろしくお願いいたします。
>データセット ありえない
それはC#スレよりもDB系のスレで聞く方が。
>>583 >>584 早速ありがとうございます!
データセットは大量のデータを扱うには難しいということを事前に聞いていたので、ローカルデータベースの方で検討してみようかと思います。
ちなみに、直接的には関係ないのですが、データセットとローカルデータベースでは、いったい何が違うのでしょうか。
# そもそもなぜ同じような機能を持っているものが複数あるのか疑問なのですが…
>>583 はSystem.Data.DataSetのことだと思ってありえないといってるのだと思うよ。
君が言ってるのは普通のOSファイルのことだろ?
データの持ち方によっては単純で有効だよ。
db4o
SqlServerCE
590 :
582 :2008/08/11(月) 22:56:22
>>586 すみません。
そこまで理解できていませんでした。
イメージとしては、頻繁に使うデータ(メモリ)・全データ(ディスク/ファイル)と考えています。
# やはり数万〜数十万になるデータをすべてメモリ中に置くのは無理があると思うので、多少パフォーマンスを犠牲にしても、ファイルとして置くのがいいのかなと考えています。
もちろん、クエリや検索条件などはデータセットなどで持つことを考えています。(XMLとして書き出すこともできますし)
もし他に有効なデータの持ち方などがありましたらご指摘くださると幸いです。
591 :
582 :2008/08/11(月) 23:01:12
データセットってOSの普通のファイルをさす用語であったのか…しらんかったよ…
ディスクをDASDと言う世界での話しか?
だすどキター
byte型の配列を用意して、もし、配列がnullだったら1を入れるとしたいのですが、nullだとエラーがでます byteの場合は何で比較すればいいでしょうか?
いみがわかりまへん
byte[] i; i = System.Text.Encoding.ASCII.GetBytes(trackBar3.Value.ToString()); if (!i[0]) i[0] = 48; これでエラーがでるのです
( ゚д゚)ポカーン (゚д゚ ) ( ゚д゚ )
こっち見んなw
600 :
デフォルトの名無しさん :2008/08/12(火) 15:04:14
( /д゚ )
左 1.5
エラー CS0023: 演算子 '!' を 'byte' 型のオペランドに適用することはできません。 で if (i[0 == null]) i[0] = 48; にしたら 警告 CS0472: 型 'int' の値が型 'int?' の 'null' に等しくなることはないので、式の結果は常に 'false' になります。 になります
つーかなんで配列の中で0==NULLとかやってるの?
if (i[0 == null]) ではなくif (i[0] == null)でした 書き込みミスです
素直に0x00で比較すればいいんじゃねーの? NULLは別の意味じゃねーの?
なりませんでした・・・・ スライダでデータを取得したものを文字コードにして、i[0]とi[1]に格納するのですが、 スライダの値がひとけたになるとi[0]に値がないみたいでエラーが起きてしまいます。 無理なのでしょうか?
>>597 byte[] i;
i = new int[0];
if (!i[0])
i[0] = 48;
これでエラーがでるのです
スライダーの値(int?)を何でわざわざアスキーコードで取り出すんだろ?
言ってることが根底からわけが分からない
612 :
デフォルトの名無しさん :2008/08/12(火) 15:41:35
>>597 byteは値型なのでnullは代入できない。
i[0]は決してnullになることはない。
エラー云々の前に 整数型を文字列型にしてさらにそれをASCIIバイト配列に
するなんていう無意味かつ変態的な設計を根本から見直せ。
C#ではnullは「変数にインスタンスが入ってない」という意味 byteは数値なのでnullにならない よってbyteとnullは比較できない ifの中身は数値ではダメ if(i[0]) とか if(!i[0]) とかは不正 if(i[0] == 0)とかif(i[0] != 0)とかしないといけない !はbool型の値をひっくりかえすもので数値に対しては適用できない
そのトラックバーだっけ? を文字として取り出して何に使うのか書いたら? なんか目的を実現するための方法が間違ってる気がする
Cでトリッキーなことやってるのをそのまま移植しようとしてるとか?
何がしたいのか分からないので正解を書きようがない
だなあ。 C#なりの正解を教えることもできん。 トラックバーの数字を文字として扱いたいならそのまんま .ToString() つけておけばいいし書式したければ ToString("00") とかすればいいし。 bytでほしけりゃ Convert.ToByteとかあるしなあ。
nullとの比較というのが本当は何がしたかったのかも分からない
というか、c#わかってないまま無理してこのまま進めるより CもしくはC++でこういうことをやってたのをc#で実現するにはどうすればいいですか? と聞いてくれたほうがなんぼかいい
>>617 できました。ありがとうございました
>>612 >>2 のサイトにのってサイトでサンプルでのってたのが、byteでした
>>他
すいませんでした
621 :
デフォルトの名無しさん :2008/08/12(火) 16:17:26
多次元配列の定義と同時に値を代入する方法について質問です。 以下だとエラーが出るのですが、正しい書き方を教えてください const int[,,] sz =new int[5,4,8] { 0,0,0,1,-1,0,-1,1, 0,0,0,1,-1,0,-1,1, 0,0,0,1,-1,0,-1,1, 0,0,0,1,-1,0,-1,1, 0,0,0,-1,0,1,-1,0, 0,0,-1,0,1,0,0,1, 0,0,0,-1,0,1,1,0, 0,0,-1,0,1,0,0,-1, 0,0,0,1,1,0,1,-1, 0,0,0,1,1,0,1,-1, 0,0,1,0,0,-1,-1,-1, 0,0,0,-1,-1,0,-1,1, 0,0,-1,1,0,1,1,0, 0,0,1,1,1,0,0,-1, 0,0,1,-1,0,-1,-1,0, 0,0,-1,-1,-1,0,0,1, 0,0,-1,0,1,0,2,0, 0,0,0,1,0,-1,0,-2, 0,0,1,0,-1,0,-2,0, 0,0,0,-1,0,1,0,2, };
{ {0,0,0,1,-1,0,-1,1} {0,0,0,1,-1,0,-1,1} {0,0,0,1,-1,0,-1,1} {0,0,0,1,-1,0,-1,1} }, これが5こ?
{ {0,0,0,1,-1,0,-1,1}, {0,0,0,1,-1,0,-1,1}, {0,0,0,1,-1,0,-1,1}, {0,0,0,1,-1,0,-1,1}, }, こうだ
エラーが出るんならそれを書け
625 :
621 :2008/08/12(火) 16:34:02
>>623-624 ありがとうございます。
constを外したらとりあえずできました。
このままでもプログラム動作的には問題ないですが、
変更するものではないので、できればconstにしたいです。
constにすると、以下のようなエラーです。
>>624 エラー 1 'Tetris.BZ.sz' の型は 'int[*,*,*]' です。文字列以外の参照型のconst は null と共にのみ初期化できます。
new int[0] の配列サイズは0だぜ
>>625 static readonlyにしれ。
constは円周率とか自然対数とか絶対不変の定数に使うもので、
変更するものではないからといって使うものではない。
ちょっと前にふらっとか相談室でそんな議論がでていたな。
メッセージ通り、参照型はconstにできない。 多次元だとReadOnlyCollectionも無理だな。 どうしてもってんなら適当なインデクサを持たせたラップクラス作ることになるな。
constに指定したものは、コンパイル時にリテラルに置き換えられる。
→リテラルといえるようなもの以外は指定できない。
だったかな。
クラス変数(定数?)に指定するなら
>>627 の通り。
ブロック内で使うのは良い選択だと思うのだがどうだろう?
MSDNライブラリにはControl.BeginInvokeはあってもDelegate.BeginInvokeはありませんよね。 なのにどちらも使う事が出来たりよくわかりません。 どうしてDelegate.BeginInvokeはインテリセンスも効かないのでしょうか?
Delegate/MulticastDelegateクラスにはInvoke/BeginInvokeは存在してない コンパイラがデリゲート型を作る際MulticastDelegateから派生させてそれらを用意する
>>630 デリゲートの Invoke, BeginInvoke, EndInvoke は C# コンパイラが生成してるもの。
System.Delegate クラスのメンバじゃない。
Action a1; なら a1.BeginInvoke(callback, obj)、
Action<T> a2; なら a2.BeginInvoke(arg1, callback, obj)
みたいな、デリゲートの方に応じた引数を取れるのは
デリゲートの型を見てコンパイラが自動生成してるメソッドだから。
こういう仕組みはクラスの継承とかでは無理。
なるほど、コンパイラが自動でやっていたんですか よくわかりました、ありがとう
すみません 特定のクラスからのみアクセス可能な修飾子などは作成可能でしょうか? もしくは、同一パッケージ内からのみアクセス可能、同一ファイルからのみアクセス可能などの設定は可能でしょうか? とあるクラスAを作成し、Aのあるメソッドの戻り値のクラスとしてBを考えています BはA以外からインスタンス化されることはないので、Aからのみ作成可能にしたいです(そうでなければ、なるべくBを生成可能な範囲を小さくしたいです) なにか、上手い方法などありましたら、よろしくお願いいたします
>>635 特定のクラスのみ → 無理
同一パッケージ、というか同一名前空間から → internal
同一ファイル → それもない
A からのみインスタンス化されるクラス B
↓
public なインターフェースを継承した、A 内 private クラスを作れ
637 :
デフォルトの名無しさん :2008/08/13(水) 12:10:02
string型をchar型に変換したいのですが どのように記述すればよいでしょうか?
>同一パッケージ、というか同一名前空間から → internal internalはアセンブリスコープ。DLLやEXEの範囲内。 ちなみにJ#でpackageスコープで定義したクラスはC#からpublicに見える。今日にも使える無駄知識^^;
>>637 char [] hoge = "HOGE".ToCharArray()
コンストラクタをprivateにすりゃいい
レスありがとうございます もともとクラスをpublicにして、コンストラクタを特定のクラスからのみ利用可能にしようと考えていました もうちょっと、勉強してみます
すみません、開発でWindowsFormで.NET 3.5を使用したら、 ユーザ環境でも.NET3.5が必要なのは当然ですが、 ASP.NETで3.5を使用した場合には、 IISの入っているサーバに3.5を入れるだけで良いのでしょうか? それとも、ブラウザの入っている各クライアントにも3.5が必要になるのでしょうか? そんなことになったら、MacやLinuxで見えなくなりますよね。 いや、もしかして、ASP.NETってそういうものなのでしょうか?
クライアントにはHTML返すだけ、と言えば分かるか?
>>643 どうも有り難うございます。
でも、便利なコントロールあるじゃないですか。
あれも、コントロールはクライアントローカルのものが使用される訳ではなく、
全てIISサーバからJSとして送られているということで良いのでしょうか?
MSDNライブラリの左下フレームはTreeViewだ 一度ソース見てみるといいよ
あ、ソースってHTMLページのな
どうも有り難うございます。 なるほど、壮大な無駄な気がしましたが、 良く考えると、キャッシュされるから問題ないのかも〜。 ありがとうございました。
いつも思うけどMSDNのTreeViewは、やりすぎ 無駄に重いし却って使いづらいよね
元の順序が保存されるSortメソッドってありますか
元の順序を第二ソートキーにすれ
>>642 Windows.Formsでターゲットを.NET 3.5にしてても、
実際に3.5や3.0の機能を使わなければ2.0だけで動くよ
653 :
デフォルトの名無しさん :2008/08/13(水) 17:02:44
質問です。サーバーのプログラムを作っていて、起動時にウィンドウを表示せずに、タスクトレイに常駐させたいと思っています。 private void Form1_Load(object sender, EventArgs e) { restartServer(); this.ShowInTaskbar = false; } とすると、ウィンドウは表示されませんが、タスクトレイにもアイコンはなく、タスクマネージャで見るとイメージ名はありますが、クライアントからアクセスしても反応がありません。タスクトレイにアイコンがないので終了もできません。 private void Form1_Load(object sender, EventArgs e) { restartServer(); this.WindowState = FormWindowState.Minimized ; } とすると、起動時にウィンドウは開かないのですが、タイトルバーだけのウィンドウがスタートボタンの上に出ています。 自動生成したProgram.csで、 Application.Run(new Form1()); を、 Application.Run(); にもしてみましたが、これでも this.ShowInTaskbar = false; の場合と同じ症状です。 アドバイスいただけるとうれしいです。
restartServer()はどっから持ってきたの? 前提がわからないので、適当に書くけど、 通常、タスクトレイのアイコンはウィンドウとつながってるイメージになるので、 普通にウィンドウを作るんじゃないかな。 ウィンドウ出したくなければ非表示にすればいい。 サーバーというのはサービスにするのとは別の話?
>>653 肝心のタスクトレイに表示するブツはどうなってんだ
Notifyiconはどこにいるの?
658 :
デフォルトの名無しさん :2008/08/13(水) 17:31:33
C++でいう#define 的なものは使えますか? 複数のクラスを超えて有効にしたい固定数値などあるのですが。
固定数値なら定数ならconstそれ以外ならstatic readonly使いなさいな
660 :
デフォルトの名無しさん :2008/08/13(水) 17:42:36
早速コメント感謝。 >654 restartServer()ですが、起動時にサーバーをリスタートしています。初期化する目的と思います。 サービスにするのとは別の話です。 これについては特に今回の処理とは関係ないかと。 >656 ブツ? は、notifyIconは、デザイン画面では下のほうにあります。 Form1.csのプログラム上では、次のようになってます。 private void notifyIcon_Click(object sender, EventArgs e) { this.Visible = true; if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; } this.Activate(); }
>this.ShowInTaskbar = false; のままで、 notifyIcon1.Visible = true はできるだろ? そもそもプロパティでtrueにしとけばいい話ではあるが。
662 :
デフォルトの名無しさん :2008/08/13(水) 18:15:18
>661 できます。プロパティでtrueになってます。 private void Form1_Load(object sender, EventArgs e) { this.ShowInTaskbar = false; } private void notifyIcon_Click(object sender, EventArgs e) { this.Visible = true; if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; } this.Activate(); } としました。これだと起動時にウィンドウが開いてしまいます。 ウィンドウを開かずにタスクトレイに入れるにはどうしたらよいでしょう?
通知用にFormを使わない手もあるけど、 使うならShowInTaskbar をfalseでminimaizeで起動すれば ウィンドウ出ないはずだけどな。プロパティで全部設定してみたらどうなる?
664 :
デフォルトの名無しさん :2008/08/13(水) 18:28:39
おつきあいいただきありがとうございます。 private void Form1_Load(object sender, EventArgs e) { this.ShowInTaskbar = false; this.WindowState = FormWindowState.Minimized ; } としたところ、 ウィンドウ-開かない タスクバー-表示 タスクトレイ-表示 となりました。 GUIのForm1のプロパティでも、ShowInTaskbarの値はfalseです。 Taskbar=falseなのに、タスクバーに表示されている理由がわからん…。
どっか別の場所で表示させてるんじゃないのか?
666 :
デフォルトの名無しさん :2008/08/13(水) 18:41:34
なるほど。 private void Form1_VisibleChanged(object sender, EventArgs e) { this.ShowInTaskbar = this.Visible; } というところがあったので、ここをコメントアウトしました。 すると、 private void Form1_Load(object sender, EventArgs e) { this.ShowInTaskbar = false; this.WindowState = FormWindowState.Minimized ; } private void Form1_VisibleChanged(object sender, EventArgs e) { //this.ShowInTaskbar = this.Visible; } すると、最初に書いたとおりで、タスクバーには表示しなくなりましたが、タイトルバーだけのウィンドウが表示されるようになり、終了できなくなります。
今動かしているプログラムではなく、新規に プロジェクト作って試してみては如何か。 あなたのソース全体は誰も分からない故。
新規にWinFormのプロジェクト作る NotifyIconはっつけて表示されるようにプロパティ設定 そのMouseClickイベントでthis.Show()するようにする Mainで Form1 form1 = new Form1(); Application.Run(); GC.KeepAlive(form1); 最低限でこんぐらいだっけ?
>>668 Application.Run(form1);じゃね?
すまん脊髄反射でボケかましちまった
長いがフルでアップ。ダブルクリックで終了だ。iconはてけと〜に用意してくれ。 using System; using System.Drawing; using System.Windows.Forms; class HideForm : Form { public HideForm() { ShowInTaskbar = false; WindowState = FormWindowState.Minimized; FormBorderStyle = FormBorderStyle.None; Size = new Size(0, 0); notifyIcon = new NotifyIcon(); notifyIcon.Icon = new Icon("notify.ico"); notifyIcon.Visible = true; notifyIcon.DoubleClick += (e, args) => Close(); } protected override void Dispose(bool disposing) { if (disposing) notifyIcon.Dispose(); base.Dispose(disposing); } NotifyIcon notifyIcon; } class Startup { static void Main() { Application.Run(new HideForm()); } }
673 :
デフォルトの名無しさん :2008/08/14(木) 12:29:19
基本的な質問かも知れませんが、質問させてください ソリューションAの中でプロジェクトA-1とプロジェクトA-2を作っています プロジェクトA-1の内部は名前空間a.A1以下にしています プロジェクトA-2の内部は名前空間a.A2以下にしています プロジェクトA-1でプロジェクトA-2のクラスを使いたい為に、プロジェクトA-1のソースコードで using a.A2; と記述していますが、 「型または名前空間名A2はaに存在しません。アセンブリ参照が不足しています。」 とか言われて上手くいきません VC#2008でプロジェクトA-1を右クリックして、プロジェクトの依存関係でA-2にチェックを入れたりしましたが駄目でした アドバイスお願いいたします
A-1でA-2をプロジェクト参照すれ
>>674 プロジェクトの依存関係はコンパイルする順番を制御するだけだからこの場合は関係ないよ
>>675 の言うように、参照の追加で。
依存関係は、更新したときに相方を先にビルドしなおすことが必要なときに設定。
というか、参照設定をすれば、依存関係も自動的に設定される。
674です レスありがとうございます 参照も確認していました A-1でA-2のプロジェクトを参照していました 原因はわかりませんが、その後再起動したところ、直っていました ありがとうございました
680 :
デフォルトの名無しさん :2008/08/14(木) 19:28:19
このあいだ、検索ソフトで引数を取って、引数をテキストボックスにいれ、検索ボタンを押す、という処理を教えていただいたものです。 その節はたいへんありがとうございました。 さて、今回ですが、起動時に引数を取ることはできるのですが、さらに、そのうえで、起動後にも(1)コマンドラインから(2)TCP/IP経由で他のマシンから引数を取得して検索を開始するにはどうしたらよいでしょう? アドバイスお願いします。 ちなみに、起動時に引数を取る処理は、 static void Main(string[] args) としたうえで、 string[] args = Environment.GetCommandLineArgs(); if (args.Length != 1) { findstring.Text = string.Join(", ", args, 1, args.Length - 1); startbutton_Click(this, EventArgs.Empty);//〔検索〕ボタンをクリックして検索実行。 } と処理しています。
ToolStripMenuItemの背景色を取得するにはどうしたら良いのでしょうか。 SystemColorsからは取得できなさそうな雰囲気なのですが、、、
無線LANからネットワークにつながっているのかの確認方法 そのときのESSIDの取得方法 が分かりません ヒントでも良いので、教えて下さい
683 :
デフォルトの名無しさん :2008/08/15(金) 01:43:14
賢者様にお尋ね申す。 文字列に変換する方法として以下の方法は適切でしょうか?イリーガルでしょうか? System.Diagnostics.FileVersionInfo ver = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); MessageBox.Show(this, "" + ver, "バージョン情報", MessageBoxButtons.OK, MessageBoxIcon.Information);
>>682 ManagementClass mc = new ManagementClass(@"root\WMI", "MSNdis_80211_BaseServiceSetIdentifier", new ObjectGetOptions());
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
byte[] temp = (byte[])mo["Ndis80211MacAddress"];
String[] token = new String;
String BSSID = null;
for (int i = 0; i < 6; i++)
{
token = Convert.ToString(temp, 16);
token = token.PadLeft(2, '0');
BSSID = BSSID + token;
}
BSSID = BSSID.ToUpper();
Console.WriteLine("BSSID :" + BSSID);
}
}
>>683 ver.ToString()
String.Concatは暗黙的にToStringを呼んで文字列にしてから連結してる。
>>685 ありがとうございます。
明示的にToString()した方がスマートですね。
>>685 それそこまで言うほど重要じゃないから
重要なのは、値型をobjectで渡さないことと、引数が配列になってしまうのを防ぐこと
値型をToString()していないと、ボックス化のコストが余計にかかる
引数を配列で渡すはめになると、配列を生成する分、メモリと時間のコストがかかる
public static string Concat(object[] args)
public static string Concat(string[] values)
文字を連結するときはできるだけ以下の引数と一致するようにすることが大事
public static string Concat(object arg0)
public static string Concat(object arg0, object arg1)
public static string Concat(object arg0, object arg1, object arg2)
public static string Concat(object arg0, object arg1, object arg2, object arg3)
public static string Concat(string str0, string str1)
public static string Concat(string str0, string str1, string str2)
public static string Concat(string str0, string str1, string str2, string str3)
688 :
デフォルトの名無しさん :2008/08/15(金) 04:05:47
どうしてC#はメソッド名の初めは大文字からなんでしょうか。ずいぶんなれてきたんですけど・・ メリットを紹介しているサイトとかないでしょうか?
>>688 設計した人の好み?
自前クラスだと自分で決められなかったっけ?
大文字かどうかよりも、固定されていることが大事なんだと思う
最近の〜がどの程度だか分からないが、Javaって小文字だったよね
いやだから言語設計した人の好みだって
>>691 「最近の言語」ってたとえば何を念頭においてるんだ。
.NET Fx上で動く言語を除いたらそんなにたくさん思い浮かばんぞ。
695 :
デフォルトの名無しさん :2008/08/15(金) 05:37:21
>>691 それ、ソース元がmsなんだけど…もしかして信者?
>>690 メソッドはメモリ上では固定の場所に格納されるんですけど、何が固定されてるんですか?
統一ってことだろjk
698 :
デフォルトの名無しさん :2008/08/15(金) 08:25:02
統一するなら、ハンガリアン表記もあるのとMSらしいと思いませんか?
まだやってたのか 所詮はコンパイルまで必要な名称なだけでコンパイルしちゃえば大文字だろうが小文字だろうがどうでもいい。 昔から変数の名前だってそうだろ? ルールというか慣習なんかもあってメソッドの頭を大文字にするならそれにあわせればいい。 細かいことにこだわってて仕事になるのか? こだわるならバグが入らないようなコーディングや、テストとかにこだわれ
700 :
デフォルトの名無しさん :2008/08/15(金) 09:01:57
変数名はどうでもいいらしいけど、動的呼び出しとかフィールドアクセスのときはどうするの?
>>699 え、だからそういう流れになって来たのをお前がまた復唱しただけだぞそれ
マルチプロセスをマルチスレッドみたいに簡単に扱えるクラスって無いかな?
ちょっと上でそれっぽいこと話してたような。 メインスレッドで負荷のかかることスンナとか言われてたな
>>699 細かい事(たかた2chの1スレッドで話題にされていること)にこだわってるのは
君自身じゃないの?
俺の意見を言わせてもらえば、答えは案外簡単で、
Camel形式より人にとって自然だからでしょ。
別の言い方を比喩的に言えば、Camel形式の方が「情報量が高い」わけで
それをメソッドみたいな「ありがちな」ものに割り当てるのは合理的じゃないからだ。
>>699 的にコンパイラの立場にたったものの言い方はあまり意味はない。
だってコード書くのは人間だからな。
>>700 CLRにはVBやPascalのような大文字小文字を区別しない処理系向けに、
リフレクションに大文字小文字を区別しないオプションが存在している。
MSはWindows APIのときから大文字Camelだったから、 その流れを汲んだんだと俺は思っている。
707 :
デフォルトの名無しさん :2008/08/15(金) 12:09:27
タバコの話をしてるの?
708 :
デフォルトの名無しさん :2008/08/15(金) 12:10:24
おじさんたちw
どうでもいいことにこだわる それがかっこいい
>>684 ありがとうございました。それでやってみます。
>>703 WebBrowserを使って自動で数ページ移動するのに時間がかかる場合も
重い処理に入るんですかね
うわぁぁぁあ SP1にしたらコンパイル通らねええ 勝手に仕様変えるのおかしいだろ、常識的に考えて
713 :
デフォルトの名無しさん :2008/08/15(金) 14:58:39
まさにMSの陰謀というか哲学でしょ
コンパイル通らなくなるような変更何かあったっけ?
2008 → 2008 SP1 では C# に変更ないはずだが。
常識的に考えると
>>712 の言っていることの方が変に聞こえるんだよな
事情により大量のWebアクセスをするプログラムをC#でつくったのですが プライオリティを下げてもFormの描画も止まり、他のプログラムもCPUをもって かれてしまいます。 Webアクセスを別スレッドにして、プライオリティを下げれば解決できるのでしょうか? C#でのやり方もよく分からないので、ご教授お願いします。
>>714 >>717 プロジェクトの設定でProperties.Settings.Defaultの設定をする部分。
ここで以前はソースコード中のenumの値が設定できたと思うんだけど、
アセンブリ参照しないとユーザー定義の型が設定できない。
前は出来たと思う、って言うかそのままだとコンパイル通らない
>>717 プライオリティ下げてもメインスレッドのループ部分でApplication.Doeventsを発行しないまま
処理してるとFormの描画とかは行われないですよ。
で、Formとは別のスレッドでループ部分を処理させて、Form部分はそれの監視と状況報告として
再描画などを行う感じで分けるか面倒ならループの中にApplication.Doeventsをいれるか。
721 :
717 :2008/08/15(金) 16:13:33
みなさん、ありがとうございます。 とりあえずDoeventsやってみます。 あと、実はプロセスの優先度をC#だけでやる方法も分かってなかったりします。 API使って…もっとスマートな方法あると思うのですが、いろいろ調べでも分かりませんでした。 たびたびすいませんが、ヒントを教えてもらえないでしょうか?
UIスレッドでデータ処理をするなよ。 通信なんてもってのほか。
723 :
717 :2008/08/15(金) 16:27:56
僕もそう思います。 最初はそんなつもりじゃなかったんだけど、初めてのC#で ユーザーからの要望が「通信処理入れてくれ」ってので徐々に 肥大化して参ってます。 そのうち1からC++かC#で書き直します。
725 :
500 :2008/08/15(金) 16:30:38
ツールの中にBackgroundWorkerってあるからこれを使えばUIスレッドと分けれるんで。
ググってみるとサンプルもでてくるよ。
ちなみに
>>500 だからw俺w
726 :
デフォルトの名無しさん :2008/08/15(金) 16:35:18
>>721 スレッドの優先度いじくって何とか仕様とするのをやめれ。
無駄だから。
UIを固まらせたくないなら、webclientのDownloadAsync系のメソッド使って
非同期で通信してProgressChangedイベントでUIスレッドに通知し、
適宜Control.Refresh()なりを呼ぶのが一番単純だと思う。
727 :
717 :2008/08/15(金) 16:35:23
ありがとうございます。試してみます。 しかし、このスレ凄い親切ですね。
728 :
デフォルトの名無しさん :2008/08/15(金) 16:54:41
自分からテスト専門です、って宣言してる派遣テスターって何なの? 将来プログラマとかSEになりたい、とかならわかるけど。 向上心ないよね、頑固だし。 そういう派遣テスターって、仕様書は読めない、 テスト仕様書も作れない、テストプログラムも作れない やれることは「テキトーにプログラムを触る」ことだけ。 俺は派遣プだけどさ、こういう派遣テスターがいると 派遣全体がバカにされるんだよ。 テスト専門派遣なんて氏んで欲しいよ、まったく。 今日も正社員の人が派遣テスターに仕様書を読んで テスト仕様書を作ってください、って説教してたよ。 その派遣は頑固に「何故、仕様書が必要なんですか?」って 反論してたから、きっとテスト専門派遣テスターだな。 仕様書も読まず、テスト仕様書も作らず、ただテキトーに プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの? あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、 仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。 そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。 うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか! テスト仕様書もなしにテキトーにテストして納品か。 中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。 派遣専門テスターさんよ、少しは向上心持てよ! 頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
729 :
デフォルトの名無しさん :2008/08/15(金) 16:58:02
C#と何か関係あるのか?
コピp(ry
コピペだな
732 :
デフォルトの名無しさん :2008/08/15(金) 17:02:06
そうだったのか! だまされたぁぁあぁ
>やれることは「テキトーにプログラムを触る」ことだけ。 それは仕事じゃないだろw
基本クラスライブラリのならMSDNライブラリにもヘルプにもあるし それ以外ならそれを作った奴に聞け
737 :
735 :2008/08/15(金) 20:49:57
ふぅ。MSDNライブラリで発見しました。 .NET開発の下位にあるとは思いませんでした。 お騒がせしました。
質問です。 開発環境:VisualStudio2008 外部のdllを参照しているのですが,出力されるEXEにDLLを組み込むことは可能でしょうか?
>>738 EXEに組み込んだらそれはダイナミックリンクとはいわない。
ILMerge
>>738 まぁ普通組み込む意味ねーよなとしか個人的に思えないけど
質問に答えてみると、それだけの情報じゃわかんない
答えるには、DLL が .NET なのかそして Pure IL なのかライセ
ンス大丈夫なのかとか細かい条件が必要
>>738 アセンブリーキャッシュのDLLの静的リンクはできないはず
自前のDLLとEXEならフリーソフトを使って一つのファイルにできる
名前忘れたが
>>742 アセンブリを2個読み込むより1個読み込むほうが早いしメモリも喰わないから意味はある
ネイティブDLLならしらね
署名してあったらダメだけどね。
HDDが遅かったりメモリが少なかったりじゃあるまいし、この時代にそんな事やっても意味ねえよ
>>744 そういや baseaddress きちんと指定したらどうなんだろう。いつの間にか
オプションに追加されてたから意味ある気がするが・・・
ネイティブ重いのはその辺だった気がするけど CLR のロードはなんか
色々ありそうだし・・・
>>746 .NETはアセンブリを読み込んだ後ハッシュをチャックしたり、コンパイルの準備をしたりしなきゃならないんだから
読み込むDLLが少ないほうがいいに決まってるだろ
ただ実行すればいいネイティブDLLとはわけが違う
なるほど、君は気が狂ってるんだね
750 :
hebolio :2008/08/16(土) 03:01:48
私はへぼwebプログラマーなんですけども。 仕事中にこっそり自分のサーバと通信するアプリケーションを作りたいと思い、 windowsアプリケーションを作成したくここにたどりつきました。 (ブラウザだとばればれなんですよ。) C#でサンプルつくるような見本はwebにちらばってるのですが、 .exeファイルにして実行できるようにするにはどうすればいいのですかね。 アプリつくって実行ファイルにして配布するところまでいきたいです。 .csとか言うファイルを変換したりするのですかね。 いい書籍があれば教えてくだ
Windowsアプリならばれないという根拠はなに?
もうコテハンという時点で・・・ あ、こぴp
処理系って何ですか? よく「あなたが言っているのは処理系の話で、○○とは違う」 と言われます
>>750 F5を押したあとに、プロジェクトのフォルダを探し回ればexeが見つかるだろ。
Httpwebrequest.Timeoutってどれくらいに設定するのが通例ですか?
RFC嫁。
クライアント側の話だからアプリの都合で決めたらいいんじゃね?
フォームが最大化したこと、また、元のサイズに戻されたことを知るにはどんなイベントを捕まえればよいのでしょうか。
お前はその程度の事をいちいち質問しに来るのか?馬鹿なの?
今サウンドファイル再生にWMPlib.DLLを使っています。 URL与えて、WindowsMediaPlayer.start()を呼び出しても再生までに500millisec程ラグがあります。 このラグを短く、せめて半分にしたいのですがMCIやDirectXを使えばもう少し早くなるのでしょうか?
>>760 SizeChangedイベントとWindowStateプロパティかな
765 :
デフォルトの名無しさん :2008/08/16(土) 19:04:40
>>761 ここはふらっとスレなんだから そう言うなよ。
>>764 SizeChangedとWindowStateですかー、気づきませんでした。
ありがとうございました。
お前らのテンプレートをzipでくれ
>>767 金無いんなら頭使え。
使う頭無いなら氏ね。
煽りに反応しないよう心がけましょう
771 :
デフォルトの名無しさん :2008/08/16(土) 21:51:50
↑よかったら俺のウンコ食べてくれないか?
食べる
常駐型のアプリを作っているのですが、 エンターをを押したらメッセージボックスを出す といったようなプログラムを作るには、どうしたらいいのでしょうか。 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { MessageBox.Show("test"); } } これだとフォームがアクティブになってないと反応してくれません。 どうしたらいいでしょうか?
フックしないと駄目なんじゃね?
つかEnter押すたびにメッセージボックス出てたらそのPC使いもんにならんだろJK
776 :
デフォルトの名無しさん :2008/08/17(日) 00:51:17
>>775 すいません、これは例えです。
何かキーを押したときに特定の動作をさせたいんです。
下げ忘れた('A`)
「C# ホットキー」でググるんだ。
779 :
デフォルトの名無しさん :2008/08/17(日) 01:14:19
また下げ忘れた('A`)
うぜえ氏ねよ
別に下げなくたっていいだろ
ホットキーも知らずにC#か。
ホットケー
キ
786 :
デフォルトの名無しさん :2008/08/17(日) 08:08:58
ホットキーって何?飛べるの?
C#でプログラムの開発を行っています。 felicaのカードのIDをbyte型で取得した数値をStringに変換したのですがどのようにすればいいでしょうか? また、byte型の数値が1桁の場合0を追加して2桁にして出力したいと考えています。 byte[0] =1 byte[1] =1 byte[2] =6 byte[3] =1 byte[4] =136 byte[5] =11 byte[6] =162 byte[7] =24 の場合、String型で010106011361116224 と出力したいということです。 for(int i=0;i<IDm_No.Length;i++) //IDm_Noにbyte型で上記の数字が入ってます { 〜 } 私の書き方が悪いんだと思うのですが、System.Text.Encoding.GetEncodingを使用してもうまくできませんでした。 わかる方いましたら教えていただけないでしょうか? よろしくお願いします。
StringBulder b = new StringBulder();
for(int i=0;i<IDm_No.Length;i++)
{
s.Append(IDm_no[i].ToString());
}
string id = b.ToString();
これで、その出力結果とおなじのがidに入ると思う。
felicaのことはまったく知らんけど、
>>786 はなにか仕様を勘違いしてるような気がするが・・・
まちがえてた。 ToString()のところはToString("D02")だな。
>>788 それ
s.Append(IDm_no[i].ToString("D2"));
ってしないとダメでしょ。
っていうかせっかくStringBuilder使うならAppendFormat使わなきゃ。
そうすればforループが不要になるよ。
つづりも間違えてたから、書き直した。 StringBuilder b = new StringBuilder(); for(int i=0;i<IDm_No.Length;i++) { b.Append(IDm_no[i].ToString("D02")); } string id = b.ToString();
StringBuilder使う必要がなくなるじゃん。 ってか仕様おかしいよね…
>>790 byte型の配列が8バイトって決まってないと、使えないジャン。
まあ、見た感じ8バイトっぽいけど。
そして戻せないというw
795 :
デフォルトの名無しさん :2008/08/17(日) 14:20:11
byte[]とstring間で相互に変換できなくていいのか
16進変換かね。 本当の仕様は。
(;ω;)ブワッ 実行途中の過程を見たらなぜか10進で表示されていたので気にしないでいました。。。 ちゃんと見たら16進で出力されていたので、10進に直して出力したい。の間違いです。 ごめんなさい orz
799 :
787 :2008/08/17(日) 14:54:30
自己解決しました。 お騒がせしてすいませんでしたorz
いいえ
TextboxでNotepad.exeのクローンみたいなのを作っているのですが、 ひらがなをタイプして変換しようとしてもカタカナにする事しかできません。 これは仕様なのでしょうか?
仕様じゃない。君の使い方がおかしいのだろ。 フォントとかIMEの設定とかどうなってる?
803 :
デフォルトの名無しさん :2008/08/17(日) 21:38:33
C#でwmvとかaviの動画の切り出し(1秒目から4秒目を切り出す)ってどうやるんですか?
805 :
デフォルトの名無しさん :2008/08/17(日) 23:46:36
匿名メソッドはどういう場面で使うのでしょうか? 使わないと困るような事ってあるんでしょうか?
いちいち定義するのが面倒だとか クロージャっぽくしたいときとか
807 :
デフォルトの名無しさん :2008/08/18(月) 02:13:24
if文でワイルドカード使えないの?
は?
>>807 具体的に何がしたいんだ?
ファイルでも検索したいの?
if (old* > 18)
配列やリストやループをお勉強しましょうね
813 :
デフォルトの名無しさん :2008/08/18(月) 07:40:32
>>805 2,3行までのメソッドをデリゲートで呼び出すなら、わざわざdelegateやメソッドを
定義するより 楽ちんだって言うことだとおもうよ。
あと、匿名メソッドの場合は 匿名メソッドの属するスコープのローカル変数を
参照できるというメリットがある。
List<int> il = ......; というList<int>があるとして このうち5以下の数字のみ
取り出したリストを取得するには
List<int> il2 = il.FindAll(delegate(int x) { return x <= 5; });
または List<int> lf = il.FindAll(delegate((x) => x<5);
とできるけど 匿名メソッドの場合、
さらにこのスコープのローカル変数で int maxNumというのがあるとして
List<int> il2 = il.FindAll(delegate(int x) { return x <= maxNum; });
List<int> il2 = il.FindAll((x) => x < maxNum);
という風に匿名メソッド(またはラムダ式)の中から ローカル変数maxNumを参照できる。
これは名前付きメソッドとdelegateでは単純な方法では実現できない。
814 :
デフォルトの名無しさん :2008/08/18(月) 07:42:44
>>813 >または List<int> lf = il.FindAll(delegate((x) => x<5);
は、
または List<int> lf = il.FindAll((x) => x<5); のまちがいです。
ソースが読みにくくなるだけじゃん
816 :
デフォルトの名無しさん :2008/08/18(月) 07:46:22
>>815 おれも可読性は落ちると思うよ。
原則1行のメソッドにしか使わない。
でも一回覚えてしまうと 楽ちんなんだよね。
可読性考えて使える人間なら問題ないだろうけど・・・ ラムダのテストってどうすんの?
>>817 それだけでテストの対象になるような区切りだったら、
ラムダ式使わないでちゃんとしたメソッドにする。
メソッドをわざわざ書くのもばかばかしいような細かさのものにだけ使う。
819 :
デフォルトの名無しさん :2008/08/18(月) 10:08:53
コマンドラインで、引数がないときとあるときで処理をわけたいです。 引数がないとき ヘルプを表示 引数があるとき 実行。 static void Main(string[] args) if (args[0] == ""){ // ヘルプを表示 Console.WriteLine("Usage: tmp filename"); } else{ // 実行 Console.WriteLine("execute"); } だと、ifの条件の行で「ハンドルされていない例外。インデックスが配列の境界外です」が出ます。 ifの条件をどう書けばいいでしょう? if (args[0] == NULL) とかは試したけどだめでした。
オレもコンソールあんまやらんけど、、 if (args.Length == 0) でどう?
821 :
デフォルトの名無しさん :2008/08/18(月) 10:25:04
>>819 たぶん 引数がないときは argsは長さ0の配列として初期化されているんじゃ
ないの?
だから、 if(args.Length > 0)…(引数有り) 、else…(引数無し)で場合分けすればよいかと。
配列の初期化しないと
823 :
デフォルトの名無しさん :2008/08/18(月) 10:39:26
マイネットワークのftpフォルダを開く処理を教えてください。 System.Diagnostics.Process.Start(@"NetHood\ftp.server.com");
824 :
デフォルトの名無しさん :2008/08/18(月) 10:50:34
>822 初期化なんてしたらせっかくもらった引数がきえちまうだろ
825 :
デフォルトの名無しさん :2008/08/18(月) 14:52:37
でもさぁ、 普通に書いて、エラーが出たらヘルプ表示の方がよくない? try catch だっけか?
お前は何を言っているんだ
「でもさぁ、 普通に書いて、エラーが出たらヘルプ表示の方がよくない? try catch だっけか?」 と言ってる
829 :
デフォルトの名無しさん :2008/08/18(月) 15:06:14
>>826 かならず引数を必要とするプログラムなら、
単独で起動することはないので、
単独で起動するときに、かんたんなusageを出し、
helpで詳しいヘルプを出す、というのはありじゃないですか?
ちなみに作ってるのはファイルアップローダーなので、
入力待ちになっても困る。
ごめん、ごめん 826です。 えっと、要はエラーになる要因を最初に探すより、やってみてエラーになったら考えるのはどう?って事です。 以下、Delphiでごめん。 if( a <> 0 )then b := c / a else b := 0; よりも try b := c / a except b := 0; end; の方が可読性がいいんじゃないかなと・・・
そういうことに例外を使うな、というのが一応のガイドラインになってる。
何でもかんでもtry/catchで処理するのは感心しないな。 特に初心者は、味をしめて手軽な逃げ道として乱用しがちになる。 深く考えずに例外処理使うから、後々困るし、全然理解が深まらない。
833 :
デフォルトの名無しさん :2008/08/18(月) 15:33:34
>>826 C#初心者なので、Delphiは未見だし、
すぐにはまだ使えそうにないですが、
なるほど。とりあえず引き出しに入れときます。
アドバイスには感謝します。
現時点では、可読性というほど複雑なことはできずにいます。
なにしろ、コメント行とシステムが書いてくれた行を抜くと、
12〜3行しかないプログラムです。
Delphi使いが答えてても荒れない質問スレ 素晴らしい
835 :
デフォルトの名無しさん :2008/08/18(月) 15:37:52
>>830 可読性といいつつも、なんでC#スレでデルファイなわけ?
そのコードだけど、ゼロで割ることについての例外だけど、なんか哲学的だと思う。
836 :
デフォルトの名無しさん :2008/08/18(月) 15:39:11
質問です。 ファイルを読み、表示しています。 これで任意の行(たとえば3行目だけ)を取り出すには、 なにをどこに書けばいいんでしょうか。 3行目だから、lines[3]かと考え、 Console.WriteLine(lines[3]); だと3文字目を取り出してしまうのです。 ついでに文字列が一致した行を出力するには? StreamReader readContents = new StreamReader(filename); while ((lines = readContents.ReadLine()) != null) { Console.WriteLine(lines); } readContents.Close();
変数名の付け方間違ってる。linesじゃなくてline。 ReadLineは一行読むメソッドなんだから何行読んだか数えればいい。 一致したかどうかなんてそれこそ行ごとにチェックしてけばいいだろ。 ……while文は理解できてる?
while で各行ごとにループしている。linesは1行分しか入ってなくて、毎回使いまわし。 つまり、3回目のループの時が3行目。 一致というのがどの意味での一致かわからないが、String.IndexOfを使うか正規表現Regexあたりで。
839 :
デフォルトの名無しさん :2008/08/18(月) 16:08:47
>>837 whileで使い回しているのはわかってきた感じです。
毎回line(旧lines)の内容を書き換えているので、3行目で処理しないと消えてしまうわけです。
>>838 カウントですね!
while ((line = readContents.ReadLine()) != null)
{
}
for (int i = 1; 1 < i ; i++) { //1から数えてるつもり。
Console.WriteLine(line[3]);
}
で近づいてきました?
うん、あさってくらいに行ってるね。
StreamReader readContents = new StreamReader(filename); int i = 0; while ((line = readContents.ReadLine()) != null) { i++; if(i == 3) Console.WriteLine(line); } readContents.Close(); こうかな
わざとやってんなら死ねよ
843 :
デフォルトの名無しさん :2008/08/18(月) 16:57:31
>>841 ありがと〜。ぜんぜん違ってました。…。
なるほど。こういう風に行を指定するんですね。
自分は List<T> と Collection は似たようなものという認識なのですが、 これでいいでしょうか? そうだとすると、List<T>の方が Conatins() メソッドなどが在る分便利なので Collectionは無駄にように感じるのですが、絶対にCollectionを使わないといけない ようなケースがあるとしたらどんな場合でしょうか。
845 :
デフォルトの名無しさん :2008/08/18(月) 17:03:51
VBだともっと簡単なんだよ!
Collectionと言われても標準ライブラリにはVB互換用コレクションぐらいしかないので この場合一般的な意味でのコレクションと言うことになるのだろうか だがそれにしてはメソッドの有無など具体的な話になっているな
昔のやつとジェネリックについての話とか?
ICollectionのことだと思うけど ICollectionはListもDictionaryも含んでる ICollectionはListにもDictionaryにも使える共通の処理を書くときに使える まあまず使わないけど
849 :
844 :2008/08/18(月) 17:24:57
>>846 >Collectionと言われても標準ライブラリにはVB互換用コレクションぐらいしかない
それです、その>Collectionでした。
>>848 >ICollectionはListにもDictionaryにも使える共通の処理を書くときに使える
>まあまず使わないけど
やはり List<T> でいつも決めうちで使うという感じで特に問題ないですか?
なんだほんとにMicrosoft.VisualBasic.Collectionのことだったのか そんなのの存在は忘れていい
Microsoft.CSharpがVB並に充実するのはいつですか?
TCPClientを使ってFileStreamで読み込んだファイルを送信したいのですが、 大きなファイルを読み込むとbyte型配列に代入する時にOutOfMemoryになってしまいます。 巨大ファイルを送るいい方法ってありませんか?
>>851 C#が欲しい機能はSystem.***に入ってくれるので
>>852 一部読み込んで書き込んで一部読み込んで書き込んでを繰り返す
854 :
デフォルトの名無しさん :2008/08/18(月) 18:03:10
結局VB使っとけばいいんじゃね?MSの手厚いサポートがあるしw
Microsoft.VisualBasicはC#からでも殆ど使えるし、どうしてもって言うなら使えばいいよね
Microsoft.VisualBasicを使うのはかまわんが、 Microsoft.VisualBasic.Compatibility.dllを使うのは辞めてくれ。 それもC#から
DirListBoxとか使いたくなるときはある
>>836 何をやりたいのかよくわからんけど
string[] lines = ReadAllText(filename);
で全行を読み込んでから好きな行を取り出すのが簡単
string s = null;
if (lines.Length > 3)
{
s = lines[2];
}
3行目だけ欲しくて残りはいらない場合は、
using (StreamReader sr = new StreamReader(filename))
{
string line = null;
int i = 0;
do
{
line = sr.ReadLine();
if (i == 2)
{
Console.WriteLine(s);
break;
}
i++;
} while (line != null);
}
using 構文を使っていない人は初心者だからあまり信用しないように
>>853 byte[] buffer = new byte[1024];
while (true)
{
int readSize = ふぁいるすとりーむ.Read(buffer, 0, buffer.Length);
if (readSize == 0)
break;
}
こう言うことですか?
862 :
836 :2008/08/18(月) 19:39:03
>>858 ありがとうございます。いろいろ方法あるんですね。
全文を読み込む方法も知りたいと思っていました。
ちなみになにをするかというと、
いまはWebから情報をダウンロードしてきて、
必要な行だけ抜き出す、という処理を書いてます。
ほかにもこの処理は基本的なテクニックなので、
テキストファイルから抜き出すとか、
けっこうひんぱんに必要だと思っているのですが、
できなくてこの1カ月くらいトライ&エラーをくり返してました。
基本的なテクニックなので、いろいろな方法を学べて、
応用していきたいと思ってます。
863 :
デフォルトの名無しさん :2008/08/18(月) 20:37:23
その基本的なテクニックは、もっと初歩の基本的なテクニックをやってからじゃないか?
入門書を読んでサンプルコードを書いて動かして理解するところからだな ifは書けてるけどforはなんのこっちゃ分かってないようだし stringも配列も分かってない
プログラムを作っているとif文の入れ子構造が深くなったり ifやswitchだらけで非常に見辛くなってくるのですが これをもっと減らし、上手く書く為には何を覚えていけばいいのでしょうか。 ある程度のプログラムになってくると、そういう物なんでしょうか…。。
>>865 if文の深いネストに対抗する手段はただ一つ。
複数の関数に分割せよ。
それはオブジェクト指向を実践できていない証左。
usingが深くなる事はよくあるけどif文が深くなった事はないなあ
Firefoxのダウンロードマネージャーみたいに動的にパネルを追加していくのってどうしたらいいんだろ・・・
お前の日記帳じゃないんだ
StackとかDictionaryは.ForEach()を持ってないの?
872 :
デフォルトの名無しさん :2008/08/18(月) 23:00:27
やっぱりJavaはダサダサ言語なんじゃん。なんか硬いっつーかw
873 :
デフォルトの名無しさん :2008/08/18(月) 23:57:25
何をいっておる。 Javaこそきれいなオブジェクト指向言語ではないか。 C#で開発しているが、JAVA派である。
874 :
836 :2008/08/18(月) 23:59:19
3行目を出力するを応用して、 引数の文字列を含む行を出力しようとしています。 if(lineNumber == 3 ) Console.WriteLine(line); Console.WriteLine(line.IndexOf(args[0])); で見ると、args[0]を含む行は+の数字で、それ以外は-だったので、 if (line.IndexOf(args[0]) > 1) としてみました。 が、これがうまくヒットせず空振りしてます。 どのあたりがまずいでしょう?
それだと2文字目以降に含む行がヒットするはずだ
>>865 例えば、frg1がtrueのときにfuncに処理させる場合、
void Func ( ) {
if ( frg1 ) { hoge( ) ; ・・・ }
}
を、
void Func( ) {
if( ! frg1 ) { return; }
hoge( ) ; ・・・
}
とすればネストを一つ減らせる。
メソッドの最後まで効く if ブロックにしか使えんが、探すと結構使えるとこがあるはず。
>>874 演算子の使い方がわかってなさそうなのが一番まずい。
それとC#のIndexはすべて0から。つまりIndexOfが返す数値は・・・。
あと、正直>874の間違いを理解してから使うべきだと思うが、StringクラスにはContains(string)っていう便利なメソッドがある。
if ( line.Contains( args[0] ) ) { ・・・ でおk。
>>873 たしかに綺麗だが、そのせいで不便。
ちょっと汚いくらいがちょうどいい。
>>830 おいらもDel厨でC#に移行中だけど感動したけどDelphiでもそれはやっちゃ駄目だと思う
880 :
836 :2008/08/19(火) 12:22:30
演算子勉強中です。一度もtrueがでなかったらテストを実行する、と書きたいです。 int lineNumber = 0; while ((line = readContents.ReadLine()) != null) { lineNumber++; if (line.Contains(args[0])) Console.WriteLine(line); else Console.WriteLine("not一致"); } 現状の結果 19.08.2008 09:53 test not一致 19.08.2008 09:54 test not一致 19.08.2008 10:51 test not一致 求める結果(1)1回でもヒットした場合 テストずみ Console.WriteLine("テストずみ");を1回だけ。 求める結果(2)1回もヒットしなかった場合 not一致 Console.WriteLine("not一致"); を1回だけ。
見つかったフラグをfalseにしておいて、 みつかったら、見つかったフラグ=trueにしてbreak ループ抜けたあとに、見つかったフラグを調べればいい
つーかC#じゃなくて、アルゴリズム全般の初心者スレにいくべきじゃねえの
883 :
デフォルトの名無しさん :2008/08/19(火) 14:05:20
どこ
int lineNumber = 0; bool hit = false; while ((line = readContents.ReadLine()) != null) { lineNumber++; if (line.Contains(args[0])) { hit = true; Console.WriteLine(line); } } if(hit) ... else ...
ふらっと的にはLinq使って初心者を惑わすのがセオリーだろ public static IEnumerable<string> TextFile(string filename) { using (var sr = new StreamReader(filename)) { string s; while ( ( s = sr.ReadLine() ) != null ) yield return s; } } static void Main(string [] args) { if (args.Length < 2) return; Console.WriteLine(TextFile(args[0]).Any((s) => s.Contains(args[1]))?"済":"未"); }
>>830 を参考にしてみた
int lineNumber = 0;
try
{
while ((line = readContents.ReadLine()) != null)
{
lineNumber++;
if (line.Contains(args[0]))
throw new Exception();
}
Console.WriteLine("not一致");
}
catch
{
Console.WriteLine("テストずみ");
}
これじゃただのGOTOです><
>>885 using 幾つか追加してみたけど、
textfile.cs(7,15): error CS1518: クラス、デリゲート、列挙型、インターフェイス
または構造体が必要です。
textfile.cs(8,23): error CS1518: クラス、デリゲート、列挙型、インターフェイス
または構造体が必要です。
textfile.cs(11,1): error CS1022:
型、名前空間の定義、またはファイルの終わりが必要です。
とか出てうごかないの。csc.exe textfile.cs で実行しますた
>>885 File.ReadAllLines()使えよ。
>>887 VS2008かな?
2008で、対象のフレームワークを3.5にして
using System.IO;
using System.Linq;
でいけるかと。
>>889 どう見てもコマンドラインコンパイル
そして明らかにclassを未定義
using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; namespace EasySample { class Program { static void Main(string [] args) { if (args.Length < 2) return; Console.WriteLine(TextFile(args[0]).Any((s) => s.Contains(args[1]))?"済":"未"); } public static IEnumerable<string> (string filename) { using (var sr = new StreamReader(filename)) { string s; while ( ( s = sr.ReadLine() ) != null ) yield return s; } } } } 見よう見まねでクラスで包んで診た所、やはりコンパイルが通らない…(謎
>>891 プロジェクトのプロパティ出して、アプリケーションのとこの対象のフレームワークを3.5に
>>893 csc.exe textfile.cs と打ち込んで
DOS窓からコンパイルしたいです…むりぽですか?
悪いことは言わんからVisual C# Expressでも使っとけ
該当バージョンのcsc.exeを選んで、引数を指定すればいい
>>896 >csc.exe textfile.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30428.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
エラーメッセージが以下に続く…
ttp://d.hatena.ne.jp/bellbind/20070802/1186020328 ここのサンプルは動かすことできたのですが、
同じ3.5なので動くはず…
1. バージョンが
>>891 では異なるので失敗する
2. 名前空間とクラスの部分の記述が間違えている
書き換える箇所は、そんなに多くはないと思うのですが
エラー出力からどう直してよいか…難しい…
>>897 メソッド名(TextFile)が欠けている。
>public static IEnumerable<string> (string filename) { コピペ失敗してるだけではないかい。関数名がないぞ。
このレベルでIDE使わないんだから放置しろよ・・・
Javaみたいに各クラスにmain置きたいんですけどどうすればいいですか?
csc /main:Program3
903 :
891 :2008/08/19(火) 17:02:51
>>897-899 >textfile linq1.cs using
済
>textfile linq1.cs TextFile
未
できました…! 簡単にgrep実装できてて驚きますた
あとお騒がせして申し訳ありませんでした…orz
なんでエラーの内容を書かないんだろうね?
あたまわるいから
906 :
891 :2008/08/19(火) 17:09:29
>>904 30行くらいエラーが出力されて、よくよく読んでみたら
構文エラーですよね > 無効なトークン
textfile.cs(9,37): error CS1519: 無効なトークン '(' が
クラス、構造体またはインターフェイスのメンバ宣言で使用されています。
textfile.cs(9,53): error CS1002: ; が必要です。
textfile.cs(10,47): error CS1002: ; が必要です。
textfile.cs(12,7): error CS1519: 無効なトークン 'while' が
つかじぶん入門書嫁orz コマンドライン叩けorz
コマンドラインを叩くな IDE使え
漢はだまってMsBuild、とまた初心者を惑わすようなことを言ってみる
VS2008にSP1当てたら、構文エラーもリアルタイムでチェックしてくれるようになった。 正直ちょっとうざい。
構文エラーはもともとリアルタイムちゃうんかい
いや、なんか頻度が上がった
メソッド作った直後に 「値を返さない場合がある」 と言われるようになった気がする。
質問させてください。 ピクチャーボックスにある画像aを表示させ、その画像Aをクリックすると別の画像Bに切り替わり、もう一度クリックすると元の画像Aに戻るという処理をしたいと思っています。 画像の種類によって条件分岐する処理をしたいのですが、以下のように書いたところ、必ず条件式がfalseと判定されてしまいます。 正しい書き方を教えていただけないでしょうか。 private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (pictureBox1.Image == practiceproject.Properties.Resources.PicA) { pictureBox1.Image = practiceproject.Properties.Resources.PicB; } else { pictureBox1.Image = practiceproject.Properties.Resources.PicA; } } よろしくお願いします。
直接Image比較するのも微妙だけどあえてそうするなら PicAとPicBを一旦staticな変数に保存して全てそれを使う
916 :
913 :2008/08/19(火) 18:13:18
>>915 ありがとうございます。
以下のようにしてみましたが、やはりfalseと判定されるようです。
直接imageと比較しない方法というのは、どのように現在表示されている画像の情報を持ってくるのでしょうか。
もし一般的な方法があれば教えていただきたいです。
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Bitmap pic1 = practiceproject.Properties.Resources.PicA;
Bitmap pic2 = practiceproject.Properties.Resources.PicB;
if (pictureBox1.Image == pic1)
{
pictureBox1.Image = pic2;
}
else
{
pictureBox1.Image = pic1;
}
}
PictureBoxのTagあたりに、どちらの画像を表示しているかをセットしておくとか。 if (pictureBox1.Tag is string && (string)pictureBox1.Tag == "pic2") { pictureBox1.Image = pic1; pictureBox1.Tag = "pic1"; } else { pictureBox1.Image = pic2; pictureBox1.Tag = "pic2"; }
>>916 フラグ用に変数を用意し、その変数がfalseならpic1を表示してフラグをtrueに。
trueだったらpic2を表示してフラグをfalseに。
919 :
913 :2008/08/19(火) 18:39:19
>>917-918 ありがとうございます。無事できました。
画像の変更の際にその状態を示す変数を変えるのが
普通の方法ということも分かり、非常に参考になりました。
できれば後学のために教えていただきたいのですが、
if (pictureBox1.Image == pic1)という判定がうまくいかない原因はどこにあるのでしょうか?
参照型の == 演算子は、特別に定義しない限り、両辺が同じインスタンスか否かを判定する。 Resourcesクラスは、プロパティが参照されるたびに新しいインスタンスを返すので、 if (pictureBox1.Image == pic1) では、毎回別のインスタンスを比較していることになる。 メソッドの外に、 static Bitmap pic1 = practiceproject.Properties.Resources.PicA; static Bitmap pic2 = practiceproject.Properties.Resources.PicB; と書いておいて、FormのLoadイベントあたりで pictureBox1.Image = pic1; として画像を設定するようにすれば、Resourcesクラスのプロパティを参照するのは1回だけ になるので、画像を直接比較しても大丈夫なんじゃないのかなあ。 検証してないけど。 別に、画像を直接比較する方法が、必ずしも間違っているわけじゃないよ。
Bitmap pic1 = practiceproject.Properties.Resources.PicA; Bitmap pic2 = practiceproject.Properties.Resources.PicA; if (pic1 == pic2) これやってみるといい。
922 :
920 :2008/08/19(火) 18:58:35
言いっぱなしも無責任なので検証してみた。これでちゃんと画像が切り替わったよ。 static Bitmap pic1 = Properties.Resources.PicA; static Bitmap pic2 = Properties.Resources.PicB; private void Form1_Load(object sender, EventArgs e) { pictureBox1.Image = pic1; } private void pictureBox1_Click(object sender, EventArgs e) { if (pictureBox1.Image == pic1) { pictureBox1.Image = pic2; } else { pictureBox1.Image = pic1; } }
924 :
913 :2008/08/19(火) 19:11:52
>>920-922 ありがとうございます。
試してから書き込もうと思ったのですが、先にやられてしまいました。。
こちらでもうまくできました。
Resourcesクラスが参照されるたびに新しいインスタンスを返すというのが
目から鱗でした。
親切に答えていただきありがとうございました。
>>923 > 1. refと[Out]を同時に指定するとエラーになります。この場合はC#のoutでいいのでしょうか、それとも他の指定がいいのでしょうか?
out このとき属性は不要
> 2. ExHtmlHistory.EnumEntriesの中で、TLEntry.Nextの第三引数(ByRef Integer)にNothingを渡していますが、これにあわせてnullを渡すと怒られます。
> この場合何を渡すのが適切でしょうか。
Nothing渡してるの間違いな気がするが
IntPtrで宣言してIntPtr.Zero渡しとく
ネットワークプログラミングに関する質問ですが、複数のクライアントを起動して、データをリレーしたい(マルチホップさせたい)と思っています。 このような場合、どのような手法をとるのが一番簡単に実現できるでしょうか。 今のところ、Socketのselect()関数が最初の候補として上がっているのですが、もし他に何か賢い方法があればうれしいです。 # NetworkStream単位で管理できるとかなりうれしいのですが、select()はNetworkStreamには適用できないですし…。
それならjavaの方がいいんじゃないの?
internal な interface って何で作れないの? 一体みんなどうしてるんだ??
internalなinterfaceは作れるよ
それを実装すると面罵が internal じゃなくて public になるんだよね 意味ねえ
メンバーがinternalって意味わからないけど。。
933 :
デフォルトの名無しさん :2008/08/19(火) 21:03:06
メンバ以外にinternalいつ使うんだよ。。
>>933 いや、インターフェイスってそもそも何か分かってる?
モジュール内だけでインターフェース使って何が悪い
型がinternalならメンバーはpublicであっても実質internalになるからそれで間に合う。 内部向けと外部向けを使い分けたいならpublicとinternalのinterfaceをそれぞれ用意すべき。 唯一考えられるのは、publicなクラスがあって、 本来はinternalとして扱いたいメンバーをinternalなinterfaceを通して、 アセンブリ内だけにメンバーを公開したい場合かな。 実装はpublicにする必要があるからクラス経由の場合publicにそのメンバーがアクセスできてしまう。 もっともC#にはこの問題に対応する手段はある。
ポリモフィズムしたいけど、publicにはしたくない とかあるじゃない?
明示的実装にしろってか? それは許せないな
publicとかinternalとかそういうことにこだわるのは無益だしキモイ オブジェクト指向の暗黒面に落ちてる
>唯一考えられるのは、publicなクラスがあって、 >本来はinternalとして扱いたいメンバーをinternalなinterfaceを通して、 >アセンブリ内だけにメンバーを公開したい場合かな。 こういう状況、普通にあるよね?
ないけどそうしたいなら明示的実装したらええが さらにinternalに同名のメソッド作ったっていいし
>939 他の人は使ってもしょうがないもの、 使ってほしくないものは、隠したほうが みんなにとっていいじゃないか。
どうやって隠そうかと頭をひねる時間があるならpublicで実装したほうがええが
クラスをinternalで作って外部からはpublic interfaceからだけで扱わせるのが普通だな。 別にファクトリクラスが必要になるがそれはご愛嬌。
internalアクセスってそもそも使ったことないし
その必要性を感じたことがないなあ。
まあそれはともかく、
>>931 の言ってることからズレてないか?
931は単にインターフェイスの意味がわかってないだけだと思うんだけど。
C# は高速なんだよ。dllに固めてAPIを公開できるんだ -> public seal とか partial とか private とか internal とか namespace とか 色々あるけど、わかり易く解説キボン。
>internalアクセスってそもそも使ったことないし 常に1プロジェクトで完結してんの?
設計がしっかりしていれば、internalのような例外的プロテクションはほとんど必要ない
>>948 その理屈だとモジュールという概念も必要ないという極論に行き着く
interfaceやpublicさえしっかりしていれば、内部は適当でというオブジェクト指向言語は多い。
何でもprivateで隠したがるのはC++で蔓延した悪い習慣。
javaはデフォルトをパッケージスコープ(internal)にしたのに誰も使ってくれなくてさびしい思いをしている。
C#はjavaの状況を観察しつつ現状に合わせてprivateをデフォルトにしたそうだ。
>>945 最初の質問は居酒屋で最初に出てくるアテみたいなもので(汗
951 :
デフォルトの名無しさん :2008/08/19(火) 22:28:36
C#って覚えることいっぱいで複雑すぎないか?やっぱjavaか素直にVBなのかな・・・
そうでもない
>何でもprivateで隠したがるのはC++で蔓延した悪い習慣。 さすがに釣りだよね? 客が厨房に入って料理人に注文出せる料理屋の方がいいんだ、っていうのは 想像力が欠如している発想なんであってさあ。 そんな料理屋、誰に注文だしたらいいのかわかりゃしないってことになりがちでしょ? だからたいていの料理屋は注文取りのお姉さんとだけコミュニケーションすれば済む システムを採用してるんだけどなあ。
>>951 Java はむしろ、今 C# が先にとりいれた機能をパクリまくってる。
C# が複雑で Java が簡単なんてのはもう元もいいとこ。
VB に至っては C# とやれることほぼ一緒。
文法が C ベースが BASIC ベースかの違いしかない。
オブジェクト指向の暗黒面に落ちれば落ちるほど たとえ話がうまくなる
956 :
デフォルトの名無しさん :2008/08/19(火) 22:36:40
じゃ、C++はどうなの?
何でもpublicで公開したがるのはどこで蔓延した悪い習慣?
>>951 VBはC#で出来こることは全部でいるように拡張されてるから見たことも無いようなキーワードがわんさか出てくる。
Public Delegate Sub ActChangeOkHandler(ByVal sender As Object, ByVal act As Boolean, ByRef rt As Boolean)
Public Custom Event ActChangeOkHandler As ActChangeOkHandler Implements IHello.ActChangeOk
AddHandler(ByVal actChangeOkHandler As ActChangeOkHandler)
End AddHandler
RemoveHandler(ByVal actChangeOkHandler As ActChangeOkHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal act As Boolean, ByRef rt As Boolean)
End RaiseEvent
End Event
こんなの俺の知ってるVBじゃないや〜〜
>>953 俺のいきつけの飯屋は厨房の暖簾めくっておっちゃんに注文しないと飯出てこないよ…
internal class Program { public Program(); private static void Main(string[] args); } 実行ファイルで、internal 使ってるとこハッケソ あとは、メソッドはpublic, フィールドはprivate クラスはpublicみたいなかんじだった。 珠にstaticが付いたメソッドがあるくらい。 public sealed class <- 外部向けAPIクラスでハッケソ internal class => sealed と internal はどうやらクラスに付ける物らしい…
961 :
デフォルトの名無しさん :2008/08/19(火) 22:40:41
C++はJavaのパクリだろ。
ageる程おもしろくはないよ
とにかく、C#ではinterfaceのメンバはpublicなのだから、 文句を垂れる前に、明示的実装あたりでお茶を濁せばいいんじゃないか? もっともMSDNによれば、 > 明示的な実装について理解するには、高度な専門知識が必要です。 らしいけど。
interface のアクセスレベルと同じアクセスレベルか それよりもゆるいレベルで実装してればいいじゃんか なんでわざわざ public を必須にせにゃならん
>>962 おまえ、流れを切るなよ。使えない奴だな・・・
↑何?悔しかったの?w
967 :
デフォルトの名無しさん :2008/08/20(水) 00:06:59
はなくそ
>客が厨房に入って料理人に注文出せる料理屋の方がいいんだ、っていうのは >想像力が欠如している発想なんであってさあ。 > >そんな料理屋、誰に注文だしたらいいのかわかりゃしないってことになりがちでしょ? > >だからたいていの料理屋は注文取りのお姉さんとだけコミュニケーションすれば済む >システムを採用してるんだけどなあ。 あほだろ。 注文取りのお姉さんは厨房に入って料理人と直接細かい話してもいいじゃんって話だろ。
↑何?悔しかったの?w
↑何?悔しかったの?w
↑何?悔しかったの?w
↑何?梅しかったの?w
↑何?梅しかったの?w
これは質問してもいい流れ?
どうぞ
WebClientやWebRequestとかで、IEのキャッシュは利用できないの? 一通り見たんだが設定項目が見つからないんだ・・・。
977 :
デフォルトの名無しさん :2008/08/20(水) 10:39:50
public static int f(int a, int b) { if (a == b) { return 1; } else { if (a > b) return 2; if (a < b) return 3; } } 値を返さないコードパスがあります。 ってエラーが出るけど網羅してない?
980 :
978 :2008/08/20(水) 10:58:41
>>979 書くとしたら
public static int f(int a, int b)
{
if (a == b) return 1;
if (a > b) return 2;
if (a < b) return 3;
return -1;
}
みたいに書きますか?
だろ? if (a == b) return 1; else if (a > b) return 2; else return 3;
982 :
デフォルトの名無しさん :2008/08/20(水) 11:02:03
次スレ?
>>981 あーまぁそうですね。
書いてる自分としても条件の見落としが無いように明確に書いたつもりで、
条件の見落としがあった場合にコンパイルエラーを出させようとしたら、
>>978 のような結果になる事を知ったわけです。
何がまあそうですねだよ
985 :
デフォルトの名無しさん :2008/08/20(水) 12:14:59
人間にとって明確でもコンパイラには不明確
aとbにconstを指定してみるといいと思うよ
ToolStripにボタンを3つ並べて、RadioButtonのように1つチェックされると、 ほかのボタンのチェックが外れるようにしたいんだけど、 それらしきプロパティがありません。 自前で処理するしかないのでしょうか?
>>987 そんなん自前で実装したとしても、せいぜい3分あれば書けるじゃねえか
ラジオボタンを貼り付けてAppearanceをButtonにしたほうが早そう。
テキストボックスを持つフォームでフォームが非アクティブでも キーボードからの入力をテキストボックスに渡したい場合 グローバルフックを仕掛けるような方法以外に無いでしょうか。 キーボードフォーカスを非アクティブウィンドウに渡せれば一番良いのですが…。
ってtoolstripか。状態保持しとけばいいんじゃない
>>990 フォーカスが変わってくれないと使う人が非常に困るから、普通のやり方じゃ無理じゃない?
アクティブウィンドウ以外にキーボードフォーカスって…
>>990 キーロガーでも作りたいのかw
つか普通に考えればフック以外には無理だろう
995 :
デフォルトの名無しさん :2008/08/20(水) 15:48:54
textbox上下に並べてそれぞれに あああああいいいいいうううううえええええ かかかかかきききききくくくくくけけけけけ と入れたら文字間隔が等間隔になってくれずガタガタになってしまいます 入力した文字を等間隔にするにはどのようにすれば良いのでしょうか? textboxのプロパティのFontをMSPゴシックにしてみましたが駄目でした。
そうなるフォントを探せ
MSPゴシックじゃなくてMSゴシックにすればいい。 Pの意味わかってるかw
998 :
995 :2008/08/20(水) 16:01:17
>>997 横レスだがググってみた。
ひとつお利口さんになれたわ、サンクス。
プロポーショナルフォントなんて聞いたこと無かったよw
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。