4 catch
乙です。
いきなり初歩的な事項で申し訳ないですが… explicit, implicit ユーザー定義変換についての質問です。 あるサイトに 「変換メソッドは、引数を受け取り、それを元に変換後の型を返します ただし、受け取る型と変換後の型に継承関係があってはいけません 例えば、ユーザー定義変換は System.Object を受け取ることはできないのです」 との説明があったのですが、つまりはどういう事なのでしょうか? string は System.String で、int は System.Int32 System.Object だけなんで駄目なんでしょう (゚゚)? ある種継承関係にあるとか考えているのですが…頭がこんがらがってしまいます
継承関係にあるのなら普通にキャストすればいいだけじゃん
>>7 すみません。プログラムで書くとどういう事なんでしょうか?
CS0556 のエラーが英語でよくわからなかったけど、
どうやらユーザー定義変換では自クラスを含めなきゃいけないと言う事だそうです。
class Test {
int num;
public static implicit operator int (string str) {
num = int.Parse(str);
return num;
}
public int Pub {
get { return num; }
set { num = value; }
}
static void Main() {
Test a = "10";
System.Console.WriteLine(a.Pub);
}
}
うぅ…これのコンパイルが通らないのはなぜなの…orz
>>8 operator int→operator Testか?
>>9 accesser.cs(4,3): error CS0120: 静的でないフィールド、メソッド、またはプロパティ
'Test.num' で、オブジェクト参照が必要です。
accesser.cs(5,10): error CS0029: 型 'int' を型 'Test' に暗黙的に変換できません。
と出ました。この CS0120 のエラーはググってもMSDNのやつがひっかからず
訳わかめ状態っす ;;
>>8 > Test a = "10";
そりゃstringからTestへの型変換が定義されてないから……
public static implicit operator Test (string str) {
ちなみに
>>10 は3行目をこう変えた場合のコンパイルエラーです
>>10 Testにint型の値を1つ引数にとるコンストラクタをつけろ。
その上でreturn new Test(num);
OK、順番に行こう。 まずユーザ型変換は何かの型から自身の型に変換するか、自身の型から何かの型に変換するかしか定義できない。 つまりstringをintに変換するような型変換のオーバーロードは書けない。 なぜならstringもintもすでに定義済みで、「自身の型」にしようが無いから。 Test型の中での型変換はTestに変換するかTestから変換されるかしかない。 二番目に、演算子オーバーロードはstaticだ。 型変換は一般に新しいオブジェクトを作ってそれを返すって動作になる(或いはフィールドの値なんかをコピーする)。 オブジェクトが無いのに非staticメンバをいじるのは当然できない。
おぉ!!
>>8 の一部、皆さんのご指摘どおり
static int num = 10;
public static implicit operator Test (string/*Test*/ str) {
num = int.Parse(str);
return new Test(num);
}
Test(int a) {
}
と変えたら、コンパイルが通り理想的な動作になりました。
>オブジェクトが無いのに非staticメンバをいじるのは当然できない。
は、特にすごくわかりやすかったです。
ついでの質問ですみません。面倒でしたらスルーしておいて下さい。
オブジェクト=インスタンス…で良いでしょうか?
なにはともあれ、ありがとうございました! 助かったです。
>>16 15の文の中で出てくる「オブジェクト」はインスタンスの意味で使われている。
18 :
デフォルトの名無しさん :2005/12/15(木) 00:31:50
axWebBrowserを利用してブラウザを作っているのですが、 Internet Explorerスクリプトエラー ダイアログの表示を強制的にオフにする方法ってないでしょうか?
>>18 ScriptErrorsSuppressed
axWebBrowserならSilentをtrueに。
Managed WebBrowserなら
>>19
C#版のSourceNavigator見たいのあったらいる?
Microsoft .NET Framework 1.0a SDK (フリーで手に入るやつ)では コンパイルが通り、期待した通りの結果が返ってくるのですが、 統合環境の(?) .NET 2003 ではコンパイルがとおりません。以下のプログラムです。 class Output { public static Output operator << (Output cout , System.Object obj) { System.Console.WriteLine(obj.ToString()); return cout; } } class Test { static void Main() { Output cout = new Output(); cout <<= "ほげ"; } } <<エラーメッセージ>> オーバーロードされた shift 演算子では、最初のオペランドは それを含む型で、二番目のオペランドの型は int でなければなりません。 なぜに、このような制約が生まれたのでしょうか? 同じ動作のプログラムを .NET 2003 では実現するのは不可能なのですか?
>>22 そもそも<<はそうやって使うものじゃないと思うけど。
うわ気持ち悪 なにそのC++脳に汚染されたコード
おれもそこを思い出した、お世話になったなぁ
28 :
デフォルトの名無しさん :2005/12/15(木) 23:47:10
vs2005でXmlシリアライズ可能な自己定義オブジェクトを Settingsクラス内で定義して保存することはできますか? //XmlSerializable public class MySettingObj{ private string name; public string Name {get{return name;}set{name=value;} } こんなクラスをプロジェクトのプロパティ、設定タブでのエディッタでSettings.csに保存することは無理でしょうか? このようなオブジェクトは別ファイルに保存するのが常套手段ですか?
クラスの実行時定義のこと? Microsoft.CSharp System.CodeDom.Compiler とか。自分で解放したい時は System.AppDomain を使う。 違ったらスマソ
すいません、普通にローカルマシンにオブジェクトを保存する手段のことです。 ファイルパスとか考えるの面倒なのでデフォルトで用意されている機構である アプリケーション設定(Settings)で保存できたらいいなぁ、と あとResources.resxエディタで文字列を保存するときにセクション分けって無理なんですかね? 同一サテライトアセンブリ中で 文字列の保存をカテゴライズするにはKeyにPrefixをつけて、ずらーっと並べる位なのでしょうか?
31 :
デフォルトの名無しさん :2005/12/17(土) 01:42:18
SELECT email FROM table のSQLコマンドで呼び出されたemailのリストをArray, ArrayList,等の配列として得ることの出来るSystem.Data.SqlClient.SqlCommand関数(またはそれに代わる関数)は何かありますか?
DataReader型は自分でArrayにするので問題ないかと
33 :
デフォルトの名無しさん :2005/12/17(土) 02:43:35
早速回答ありがとうございます。試してみます。
34 :
デフォルトの名無しさん :2005/12/17(土) 09:51:15
今までデータベース非依存なDataSet(Read/WriteXml)で保持していたデータを mdbに書き出したいのですが DataSetからmdbファイルを作成することはできるのでしょうか? (対象は素のWindows2000 Accessとかはインストールされていない) mdbじゃなくてもお手軽DBならなんでもいいのですが、何かよいものってありますでしょうか?
xml
相談なんですが・・・ クラスに設定したい機能がいっぱいあるんですが、 一回設定したらもう二度と変更したくない機能ばっかりなんです 一回設定したらもう二度と変更したくない機能ってコンストラクタの引数で設定するべきだとは思うんですが これやるとコンストラクタの引数が10個とか20個とかになってしまいます。 かといって、インスタンス生成後にプロパティで1つずつ設定するのも変・・・ これってそもそもクラスの設計が不味いんですかねえ
不味いだろうな
SQL Server 2005のXML対応って、 XmlファイルをXPathやらXmlWriter/Readerで操作するのと 同じイメージで使えるってことなのかな。
>>36 引数に独自クラスを当てればすっきりするんじゃないの?構造体でもなんでもいいんだけど。
40 :
デフォルトの名無しさん :2005/12/17(土) 13:53:11
>>36 ProcessStartInfoクラスとか参考にしてみれば?
Object型の変数に値型を格納するとボクシングが起きて効率がよくないと 何かで見ました。効率など気にせず実際に利用されていますか? また、列挙型ではボクシングは発生するのでしょうか?
>>41 列挙型は値型なのでボクシングは起きる
実行効率が必要かいなかも不明な状態で
実行効率を気にするのは馬鹿のすること
43 :
デフォルトの名無しさん :2005/12/17(土) 22:17:25
privateなコンストラクタをもつクラスHoge(既存でいじれない)は Hoge hoge = new Hoge(); ってできないですよね? ここで Hogeを返すtool.hogeってメソッドがある場合、 Hoge hoge = tool.hoge(); は通りますよね? なんとかして、Hogeを継承するクラスって作れないでしょうか? toolはpublic classでどっからでも呼べます。 やりたいことはHogeにプロパティ、メソッドをいくつか増やしたいだけなのですが。
44 :
43 :2005/12/17(土) 22:27:11
キャストまたはas演算子でHogeとみなせればどんな方法でもかまいません。 よろしくお願いします。
Hogeのインスタンスをフィールドとしてもつクラスを作り ユーザ定義のキャストで Hoge にキャストできるようにする
あんたむちゃいうな。
もうちょっと言っとくと、 ユーザ定義のキャストを実施した時点でMyHogeはHogeそのものに変えてしまうしかなく、 もはや追加のプロパティなどは存在できない。
いや、ひょっとしてそれでいいのかな。 だったらすまん。
プロパティやメソッドを追加するだけらしいから オーバーライドがないってことでいいんじゃね
50 :
43 :2005/12/17(土) 23:55:39
public static implicit operator で試してみます。 ありがとうございました。
Microsoft Visual C# 2005 Express Editionの制限ってどんなものがありますか?
ひょっとしてExpress EditionてUserControl作れない?
Expressはβ2でしか弄くってないが作れた記憶があるぞ
つくれないのはインストーラ
話を総合すると、数Mbyte程度のWinアプリを作っている人なら Express Editionで十分って事ですか。 Standard Edition買おうかと思っていたけどタダのExpress Editionと比べると お金払ってまで必要なのか?と思ってしまいます。
Standardとの大きな違いは、対応言語、CompactFrameworkでの開発の有無、クラスデザイナ、辺りかな。 詳しくはMSとかに。 //日本語のじゃ全製品の詳細比較が見つからないんだが……。 製品版はどうせ2月発売なんだから、それまではExpressEdition使って様子を見ればいい。
Javaしか知らないんですがC#の案件をやることになりました。 文法はよく似てるんですが何か決定的な違いとかこれは気をつけろみたいなのありますか?
>>57 確かに現状Express Editionしかないんだしね。
様子を見るしかありませんね。
案件によるが、一番Javaの人が引っかかるのはやはりデリゲートかね?
P/Invokeと構造体
Express Edition には System.Runtime 空間がない。 →P/Invoke とか、Marshal が使えない。 1.1でクラスライブラリ作れってことかな。
64 :
デフォルトの名無しさん :2005/12/18(日) 14:53:48
webページを取得するのにHttpWebRequestクラスとか TcpClientクラスとかWebClientクラスがありますが どれが一番早く処理できますか?
なんと、Express EditionはSDKにも劣るのか。 馬鹿なこと言うな。大体標準ライブラリの名前空間が無いってどういう意味だ。
>>64 コーディングの手間ならWebClientが一番小さいな
67 :
デフォルトの名無しさん :2005/12/18(日) 14:57:32
>>63 ヘルプ?のリファレンスには無いけど、普通に使えた。
インテリセンスにも表示されたし。
ん〜? 普通にあるぞ? ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/cpref11/html/N_System_Runtime_InteropServices.htm
Expressだとリファクタリングの機能が大幅に少ない? フィールドのカプセル化の機能は期待してたんだが、メニューにないorz
70 :
63 :2005/12/18(日) 15:11:03
ありゃ、ほんとだ。 ヘルプの Visual Studio 2005 Express Edition 対応 MSDN ライブラリ - NET Framewrok SDK ドキュメント - クラスライブラリ の中に見つからないから誤解してた。
結構ドキュメントにないの多いね。いちいちwebに探しに行ってうざい。 Microsoft.Win32.Registoryとかもない
いやあるよ? ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/cpref1/html/T_Microsoft_Win32_Registry.htm なんだ、私のドキュメントとほかの人のは別物なのか? SDK入れた後でExpress入れたんだけど。
73 :
67 :2005/12/18(日) 15:53:08
えーーー 第一cpref1.hxsがない expressと同時にいれたやつだと少ないのかな? とりあえず間違えて落としたSDK解凍して漁ってみる
俺もないな。 何でだろ。
76 :
デフォルトの名無しさん :2005/12/18(日) 18:09:09
ArrayListの中のPointをPoint[]としてとりだすにはどうしたらいいでしょうか? (Point[])arrayPoints.ToArray(); は通りませんでした。
もうひとつのオーバーロード
(Point[])arrayPoints.ToArray(Type.GetType("Point[]")) ってことですか? 無事いけたみたいです。 ありがとうございました。 #なんで気づかなかったんだろう…orz
Typeを静的に取得するにはtypeof使えー。
文字列で型情報を取り出さずに typeof を使えよ
81 :
78 :2005/12/18(日) 18:28:34
(Point[])arrayPoints.ToArray(typeof(Point));
でいけました。
>>78 でかいたのはコンパイル通ったもののエラーでした
×(Point[])arrayPoints.ToArray(Type.GetType("Point[]"))
×(Point[])arrayPoints.ToArray(Type.GetType("Point"))
○(Point[])arrayPoints.ToArray(typeof(Point));
レスありがとうございまいsた。
82 :
デフォルトの名無しさん :2005/12/18(日) 19:24:30
>>66 ありがとうございます。
webページをゲットするスピードは
どれもあまり変わらないのでしょうか?
また他にアクセスできるクラスとかあったり
しますか?
83 :
75 :2005/12/18(日) 19:40:49
>>67 ,
>>70 ,
>>71 ,
>>74 見つけた。.NET Framework 2.0 SDKのドキュメントに含まれてた。
一旦MSDN Express Libraryをアンインストールして、
SDKを入れてからもう一回MSDNライブラリ入れたら見れるようになった。
普通にインストールするだけでもいけたのかもしれん。
84 :
デフォルトの名無しさん :2005/12/18(日) 21:24:24
using (FileStream fs = File.OpenRead(@"70M位の実在するファイル.txt")) using (StreamReader reader = new StreamReader(fs, Encoding.Default)) { do { line = reader.ReadLine(); Console.WriteLine(line);//なぜかlineが nullなんですけど なぜでしょう } while (line != null); }
なんか変態。 streamreaderでファイル開いちゃだめなの?
うん変だね
StreamとStreamReaderの関係とかProcessとThreadとか、.NETのクラスライブラリの中で野クラスの相互関係、のドキュメントどっかない? それあれば大雑把に仕様把握するのが早くなるのに。
>>83 あとからSDKのドキュメント部分だけインストールでもいけた。
//SDKインストールだけじゃドキュメントに出てくれなかったんだよな……。
89 :
デフォルトの名無しさん :2005/12/18(日) 21:49:04
class Vector{ int key; int value; } というクラスがあって、その配列 Vector v = new Vector[n]; を作った後に、要素keyだけを配列として取り出すことは できますでしょうか? 例えば、SortedListの、Keysプロパティのように、 とりだした配列なりコレクションなりを foreach構文にかけることがしたいのですが・・・ よろしくお願いいたします。
レスありがとうございます。
ファイルを開いて>一行ずつ読み込んで・・
と日本語をそのままコードにしていったときにそうなってしまったのですが。
StreamReaderをそのまま使うと問題ないです。
でも、なぜFileStreamを開いて、StreamReaderに渡して実行できないのかわからないのです。
(Streamを渡して〜〜するという処理をやる予定があるので勉強のため)
↓でも同じようなコードがあるのですが 知ってる人いませんか?
「C#で作るWindowsアプリ −ファイルを読み込む− 」
http://www.divakk.co.jp/aoyagi/csharp_winexe_04.html // ファイルを読み込む
Stream stm = opendlg.OpenFile();
if (stm != null) {
StreamReader reader = new StreamReader(stm);
mTextBox.Text = reader.ReadToEnd();
stm.Close();
}
一回り拾っていってArrayListに突っ込んでいく
ないのでforeach(Vector v in vectors){ v.key....}とVectorでまわすべし #elementの名前がVectorなのがちょっと引っかかるが。。
93 :
89 :2005/12/18(日) 21:59:03
>>91 やっぱそれしかないのですかね・・・
今はそうしているのですが、
O(n)になっちゃうので、毎回参照されるとつらいですよね・・・
Vectorクラスか、外側のクラス(Vectorをコンポジションするクラス)
に細工をしてどうにかならないでしょうか?
>>93 配列で何がしたいんだ?
たぶん、配列でまわすのもVectorのまままわすのも同じようにできると思うよ。
95 :
89 :2005/12/18(日) 22:05:26
>>94 外側に
class Container{
Vector[] data;
public int[] Keys{
get{
:
:
}
}
}
SortedListみたいなコンテナクラスを作っていまして、
として、Vector[] dataのkey要素だけを返すような
プロパティが作りたいのです。
Keysプロパティを参照されるたびに「・・・・」の部分で
コピーして返す、ってのはイヤですよね・・・?
そもそもKeysを頻繁に使う必要あるの? あるなら、内部データとして喪ってもいいかもしれないけど、ソートなどにあわして更新しなおすオーバーヘッドかかる。
97 :
89 :2005/12/18(日) 22:20:30
>>96 内部のアルゴリズムで使われていたりします。
積極的な理由としては、将来、複数のコンテナクラスを、
interfaceをimplementしたクラスとしてまとめたときに、
統一性がはかれるように、というのが目的なのですが。
なお、Vector[] dataの要素数は10000ぐらいです。
おっしゃるとおり、別にkeys[]という参照の配列を持とうとも
考えたのですが、他のメソッドも書き直す必要があって、やめました。
10000ぐらいならコピーのオーバーヘッドを黙殺するというのも
手ではあるのですが・・・
内部アルゴリズムはvector.keyでまわして、外部にはコピーしてまわすとかもありでは?そういう仕様だから使うときはKyes[2]と化するなといっておいて。 両方ともどれぐらいのパフォかによるけど。
99 :
デフォルトの名無しさん :2005/12/18(日) 22:34:10
keys が vector じゃなくてもいいなら IEnumeratorとインデクサを実装した KeyCollection とか定義してkeysで、 それを返せばいいんじゃない?
内部でキーと値別々に持てば良いんじゃね
こんなのもあり? class VectorKeyEnumerator : IEnumerator{ private Vector[] vectors; ・・・ } class VectorKeys : IEnumerable{ private Vector[] vectors; ・・・ } class Container{ Vector[] data; public IEnumerable Keys{ get{return new VectorKeys(this.data);} } }
102 :
89 :2005/12/18(日) 22:36:22
>>98 そうですね。
任意の位置の要素へのアクセスはO(1)でできるので、
GetKey(int index);
なども公開して、そちらの使用を推奨する形で逃げれば
いいですかね。
GetKey(0)〜GetKey(n)までが返す全ての要素を
集合としてもつクラスを定義できればいいのになぁ。
かぶったorz
104 :
89 :2005/12/18(日) 22:43:20
>>100 本当はそうしたいのですが、Vectorそのものを返すメソッドや、
内部データとしてかなり使い回しているので、
全部直すのは大変そうです。
下手にいじるとバグも入れちゃいそうで・・・
>>99 >>101 なんかそれ凄くよさそうですね。
それなら、GetKey()を生かせますね。
IEnumerableって、次に返す位置を覚えておけましたっけ?
だったら、万事解決です。
つyield
106 :
89 :2005/12/18(日) 23:01:50
>>105 2.0からそんな便利なのが追加されたのですか・・・
本当にありがとうございます。一発で解決しました。
参考までに
public IEnumerable Keys{
get{
for(int i=0; i<data.Count; i++)
yield return data[i].key;
}
}
107 :
89 :2005/12/18(日) 23:07:01
でも、コピーするときに比べてちょっとパフォーマンスが 落ちた気がしますね。(0.5%ぐらい実行時間増) コピーする手間が省けたのに、何でだろ。 0.5%ぐらい時間がかかるぐらい、無視してもいいんだけど・・・
108 :
89 :2005/12/18(日) 23:09:22
あーそうか。 いままでコピーしてた部分は、時間測定外だったからかな。 内部ではyieldを使った場合、ちょっとした変なことを やってるんだろうな・・・
109 :
デフォルトの名無しさん :2005/12/18(日) 23:34:16
GeckoをC#から使いたいんですが、どうすれば良いのでしょうか? とりあえずMozzilaのActiveXコントロールを埋め込んでみましたが、Navigateは普通にできるものの、 Documentなどの肝心な値がobject型(GetType().Nameは__ComObject)で使い物になりません。 DotNETEmbedというものも見つけましたが、ビルドできる環境がありません。 DotNETEmbedのビルド済みDLLがある場所か、他に使用できるGeckoの.Netラッパーをご存知の方、教えて頂けないでしょうか?
>>109 Microsoft HTML Object Libraryを参照設定
Documentが__ComObjectなのはIEコントロールでも同じだから妥当なインターフェイスにキャスト汁
VC# Express Editionを入れた後
.Net Framework 2.0 SDK Beta2 日本語版を入れたのですが
>>72 の
ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/cpref1/html/T_Microsoft_Win32_Registry.htm
が出てきません。VC#のヘルプに出てくるURL欄に直打ち→Enterで良いんですよね?
>>111 とりあえず
SDKβアンインストール
↓
VC#Expressと一緒に入ったMSDNアンインストール
↓
SDKリリースバージョンインストール
でいけるとおも
なんで今更ベータ入れてるんだよ……
要するにリアルタイムでログ会話監視してその内容からアプリ走らせるって事で合ってるか? むかーしIRCだったかにそういうのあったな
116 :
115 :2005/12/19(月) 12:04:05
すまん誤爆った、しかもageちまった しかもどうでもいいような内容だ、吊ってくる
>>116 / ̄ ̄^ヽ /::.__ .::::::::::::: __ ヽ_
l l / / ヽ_ヽv /: / ヽ ヽ
_ /,--、l ノ /  ̄ ̄ √___丶 ̄ ̄ |
,--、_ノ:: `ー':: 、ミー---‐,,l | // tーーー|ヽ |
,/ ::: i ̄ ̄ | | ..: | |ヽ |
/ l::: l::: l | | |⊂ニヽ| | |
l . l !:: |::: l | | | |:::T::::| ! |
| l l |:: l: l \: ト--^^^^^┤ 丿
| l . } l:::::,r----- l \::  ̄ ̄^ヽ 丿
ヽ :l:::: ト:;;;;;;;/-/__........... / __o
| 二|二゛ ___
ノ | ヤ
119 :
デフォルトの名無しさん :2005/12/19(月) 14:46:23
同じフォームを ふつうにウィンドウズアプリケーションで動かしたらフォームが開くのに、 ウィンドウズサービスで動かすとフォームが開かない。 エラーにもならない。 なんでや?
サービスは独自のデスクトップを持っててそこで開いてる。 UIを持たせたいならUI用の別アプリを作ってサービスとプロセス間通信させる。
面倒だけど、管理ツールから該当サービスの プロパティ開いて、対話を許可してもできたはず。
122 :
デフォルトの名無しさん :2005/12/19(月) 16:06:57
1.1SDKと2.0SDKって同居させてもなんの問題もない?
1.0も同居させてるぜ
125 :
119 :2005/12/19(月) 16:58:10
>>111 ,112
う〜んヘルプを開こうとすると
[パッケージ 'Visual Studio Common IDE Package' を読み込めませんでした]
とダイアログが出るようになった
MS MSDN Express再インストール
VC# Express Editionの修復をしても変わらず・・・
とりあえず害は無さそうなんだけど、同じ人居る?
127 :
109 :2005/12/19(月) 22:32:38
>>114 ランタイムならMicrosoft Updateで入るし、SDKならVS Express Edition落とした方が便利だと思うが。
>>110 えっ マジですか>mshtml
最終的にはFirefoxの「選択した部分のソースを表示」機能と同等のものを作りたいんですが…
WebBrowserコントロールではできない(ElementからInnerHTMLとかを取るとmshtml解析後のHTMLになってしまう)ので
Geckoにしようと思ったのに、もしや同じ結末・・・?
マンドクサイけどWebBrowser使っても実装できないことはないと思う。
129 :
114 :2005/12/20(火) 02:46:52
>>127 あぁ、SDK2.0ね。
ちなみに114=63です。そこら辺から読んでくれれば、探しまくった理由がわかると思う。
.NET SDK2.0を入れたんだが、これSystem32の下のDLLいくつか上書きしちゃうんだな・・・ clを起動しようとしたら(SHELL32.DLLがリンクしてる)APPHELP.DLLがないと言われるし、 なんだか90年代の不安定でいい加減な作りのWindowsを思い出した。
side-by-side とか言ってるそばからコレか
132 :
130 :2005/12/20(火) 05:57:56
ごめん起動しないのは、MSPDB80.DLLのあるディレクトリにパス通してなかった・・・すまんこ APPHELP.DLLはDelay-load Modulesだからなくてもとりあえず動いた・・・すまんこ
えーと、おしえてください。 あるDLLのエクスポートしてる関数にstructを渡すときに、 その関数の仕様でゼロクリアして渡さないといけないんですけど C#だとどうやって記述すればいいんでしょう? Cだと、memset (&obj, 0, sizeof(hoge)); の作業です。 とりあえず、今は byte[] buf = new byte[Marshal.SizeOf(type(hoge))]; Array.Clear(buf); hoge temp; unsafe{ fixed(byte* p = &buf[0]){ temp = (hoge)Marshal.PtrToStructure((IntPtr)p, typeof(hoge)); } } dest = temp; てなコードでお茶を濁してるのですけど、もっとスマートな書き方があるような気がするし、第一仕様を満たしているのか自信がありません。
135 :
134 :2005/12/20(火) 10:10:47
ちなみに、 unsafe{ fixed(hoge* p = &dest){ for(int i = 0; i < Marshal.SizeOf(dest); i++){ Marshal.WriteByte((IntPtr)p, 0); //←うろおぼえ } } } こんなコードを書いてみましたけど、hoge* p = &destのところでコンパイラに マネージド/アンマネージドがどうのこうのとエラーをはかれました。
エラーメッセージを略すな。 新しく構造体作るとか。デフォルトコンストラクタでnewされた直後の構造体は自動的に全て0。 byte[]にしたってArray.Clear呼ぶ必要もなく自動的に全ての要素が0。これの場合はMarshal.Copy。 Win32APIのZeroMemoryをP/Invokeするとか。
>>136 > byte[]にしたってArray.Clear呼ぶ必要もなく自動的に全ての要素が0。これの場合はMarshal.Copy。
おっとこいつの場合はスマートにはいかないな。
構造体ならば初期化時にフィールドは全部0だよ
139 :
134 :2005/12/20(火) 10:38:20
>>136 :エラーメッセージ
あ、ごめんなさい。引っ越したばっかりで自宅がまだネットにつなげてないんで
ネカフェで記憶に頼って書き込んでるのです。
ふむふむ。んじゃたとえば、
struct hoge{
private static hoge Zero = new hoge();
public int i;
public void ZeroClear() { this = Zero; }
}
みたいなことができそうですね。
構造体のメソッドで自身のフィールドを変更するのはやめれ。 Zeroをpublic static readonlyなフィールドにした方がなんぼかましだ。
適切な名前がついてればいいんじゃね?
「this=」に誰も突っ込まないのは仕様? >140 それ134の希望には全く沿わないだろ。
C#のオススメの書籍・参考書を教えてください
このスレ(とその
>>1 )を参考にしたけれど、C#についてはほとんど触れらていないので。
145 :
デフォルトの名無しさん :2005/12/20(火) 23:15:48
すいません、DataGridViewのコンボボックスの使い方で質問お願いします。 DataGridViewでDataGridViewComboBoxColumnを使った列で ComboBoxのItemsにRegexのインスタンスをいくつか入れて選択できるようにしたのですが 行を加えた後、ドロップダウンでその列を変更すると エラー(そのデータ型はサポートされません。のような)が出てしまいます。 ※データグリッドは非バインドで使用しています。 //コード例 btn1_Clicked(object o, EventArgs e){ dataGridView1.Rows.Add(new object[]{comboBox1.SelectedItem});} comboBox1.ItemsとdataGridViewComboBoxColumn.Itemsには同じオブジェクトを使用しています。 dataGridViewのコンボボックスで選択された後、Cellの値はStringになってしまうのでしょうか? Cellの値をDataGridViewComboBoxCellで選択された値にするためのプロパティとかどこかにありませんか?
むう、DataGridViewComboBoxColumnがさっぱりわからん。
とりあえずなんかCellのメンバに入れるのに基本型以外のは撥ねられるっぽいな。
つかDataGridViewComboBoxCellにSelectedIndexすらないってのはどういうことだ。
後からCellのItemsに追加してもドロップダウンされたのの表示が変わらん。
あと
>>145 のコードじゃ新しい行としてcomboBox1.SelectedItemを入れてるが、
新しいDataGridViewComboBoxCellにこれ渡すのは拙くないか?
> 「this=」に誰も突っ込まないのは仕様? どう突っ込めばいいんだ?
SDKのドキュメント、ClickOnceの解説部分で肝心の「方法 : ClickOnce アプリケーションを発行する」のページがない件について
いやあるな VSでの配置ってジャンルになってるからVS Expressが必要かも
150 :
デフォルトの名無しさん :2005/12/21(水) 19:12:46
CSVファイルを正確に読み込む方法ってどうしてます? 一行読み込んでカンマで区切るのが基本と思いますが、 これだとデータ内にカンマがあったりすると正確に読み込めなんですよね。
正確なCSVファイルの定義は? で、その定義に従って解釈
問題はCSV側がRFCを守ってるかどうかだよな……。
いつも思うけどCSVから逃げてタブ区切りにしたい。
いやXMLに池よw
ああ、それも選択肢だけどさ
XMLかわいいよXML
でもデータ取るのめんどくさいよ。 まあ仕事ならやるけどさあ
そうでもないよ。
160 :
145 :2005/12/21(水) 23:14:20
>>146 どうも。
選択肢として用意するItems内のオブジェクトRegexの他、
ToString()をオーバライドして、Immutableなものとして使っているので大丈夫かと・・
表示用と実データを分けたかったので。
DataGridViewComboBoxColumnのItemsは一応何でもいけそうです
データグリッドのGUI上で変更したらCell内は一度Stringになってしまうようですが・・
ついでに蛇足ながら
DataGridViewCheckBoxColumnを使っていて
dataGridView1.Row.Add(new object[]{true, ...});とやると
一行目だけなぜかチェックボックスが反転しないという現象があったのですが
VS2005の製品版にしたら直ってました・・
DataGridViewComboBoxの方も試してみないと
161 :
デフォルトの名無しさん :2005/12/21(水) 23:38:56
C#で開発しています。OleDbでデータベースに接続し、 社員Mから、社員名と、最終更新日を取得し、データグリッドに表示させています 取得した、最終更新日の表示が2005/12/21なんですが、2005年12月21日と、データグリッドに表示させようと思っていますが、分かりません。 よろしくお願いします。 DataSet ds = new DataSet("社員M"); DataView dv; da = new System.Data.OleDb.OleDbDataAdapter( "SELECT 社員名,最終更新日 FROM 社員M", cn); da.Fill(ds, "社員M"); dv = new DataView(ds.Tables["社員M"] ," ","", DataViewRowState.CurrentRows); dataGrid1.DataSource = dv;
"2005/12/21"を"2005年12月21日"に変換表示したいだけ? だったら DateTime.ParseExact 使えばいいんじゃないの。
163 :
156 :2005/12/22(木) 00:00:53
>>162 すみませんがもっと詳しく教えてください。
ほんとに、これが精一杯です。
DataGridTextBoxColumn.Formatをいじる。 実装例はMSDNのサンプルにある。 FormatプロパティのだけじゃなくてDataGridTextBoxColumnとかDataGridTableStyleとかの解説も読めよ。
166 :
156 :2005/12/22(木) 00:14:04
マルチかよ氏ね
168 :
デフォルトの名無しさん :2005/12/22(木) 00:47:19
2重起動されたことを感知し、最初に起動された奴にコマンドラインを渡す方法は VBだと イベントを取れるようなのですが、C#ではそれと同等な方法はあるでしょうか? アプリケーションプロジェクトのみをVBにする価値ってありますか? なんかちょっと怖いんですけど
二重起動の感知ならMutex使うなりで可能。 コマンドラインを渡すのは、簡単にやるならSendMessageでWM_COPYDATAかな。
UNIX系では、名前付きパイプを作成できた奴だけが起動って方法をよく見かけるけど。
Windowsでも可能だが、.NETの標準ライブラリじゃ名前つきパイプをサポートしてないからP/Invokeということになるな
レジストリを使う方法はやめた方がよさげだね。 MSOutlookは時々多重起動してるし、立ち上がらなくなることもあるwwww
173 :
デフォルトの名無しさん :2005/12/22(木) 07:23:16
CrystalReportで表形式の伝票を作っていて ページをまたがったとき下記のように 1ページ目の一番下の線が切れるんですが __________ |hoge|foo|bar| ページ終了 大見出し 二ページ目 ______________________ |hogee|fooo|barrr|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ どう線を割り込ませればよいか教えてください
NDoc 以外にもドキュメント作ってくれるツールないかな。 C#2.0対応のやつが欲しいのだけど。
System.Windows.Forms.StatusBarPanelのAutoSizeをContentsにすると、 EnableVisualStyled()していても、StatusBarの視覚スタイルが無効になってしまいます。 これってバグ? 1.1です。
マニフェスト使ったらどうなる?
176です。直後ですみません。 もしやと思って、デザイン時はNoneでForm_LoadでContentsにしたら 視覚スタイル有効で表示されました。 全般に、Loadの前にウィンドウハンドルを作るようなことをすると 視覚スタイルが無効になるような気がします。AutoSizeをいじると ハンドルが出来るんでしょうか?
1.1なんてどうでもいい
private void button1_Click(object sender, System.EventArgs e) { Console.WriteLine("こんそーる"); System.Diagnostics.Debug.WriteLine("でばっぐ"); } て書いたら、出力ウインドウに でばっぐ こんそーる と表示されます。 順番が逆なのはなぜなんですか? よろしくお願いします。
デバッグのほうが先に読み込まれるからに決まってるだろヴォケ。
>>180 ConsoleをFlushしてみれば?
>>177 マニフェストを置いたらちゃんと視覚スタイルで表示されました。なんなんだ。
>>182 ありがとうございます。でもFlushのやり方がわからないです。。
Console.WriteLine("こんそーる"); Console.Out.Flush() ; System.Diagnostics.Debug.WriteLine("でばっぐ"); 順番変わんない。 ConsoleとDebugは別々のストリームで 出力ウインドウはそれらを適当なタイミングかなにかで読み込んでくるだけで ストリーム単位での順番は保障できないんじゃないか? ちなみにボタンにフォーカスをあわせてリターンを押しっぱなしにすると >でばっぐ >でばっぐ >でばっぐ >こんそーる >こんそーる >こんそーる >こんそーる とか出る。
>>185 なるほど。よくわかりました。
ありがとうございます。
出力順が保証されないとイヤンと言うのなら、 Debug.Listeners.Clear(); Debug.Listeners.Add(new TextWriterTraceListener(Console.Out)); なんて微妙に変態ちっくなこともできるが。
shdocvw.dllからエクスプローラのフォルダウインドウ取得して FolderItemsに対して処理をしています。 //FolderViewはShell32.IShellFolderViewDual //FolderView.SelectedItems()はShell32.FolderItems、IEnumerable object oItem; foreach( FolderItem folitem in FolderView.SelectedItems() ) { oItem = folitem; if(なにか条件) FileList.SelectItem( ref oItem, 25 ); else FileList.SelectItem( ref oItem, 0 ); } なにかの条件で選択するものを変えたいんです。 これだとFolderView.SelectedItems()の要素がループの度に変わると思うんですが (実際Countプロパティをとると1ループごとに変化してます) これで動いてしまうんです。 なんで動くか教えてくれません?(;´Д`) 怖いんで今は一旦FolderItemをArrayListなりに格納してからSelectItemしてるんですが
ん? FolderView.SelectedItems() は foreach の初めに1度だけ実行されるような気がするが。
>>187 変態ちっくなコーディングしたら、期待通りに動きました。
ためになりました。(もっと勉強しなきゃなぁ。。)
ありがとうございます。
191 :
188 :2005/12/23(金) 00:04:51
IEnumerator と IEnumerable を区別しろよ
>>191 IEnumerable e = FolderView.SelectedItems();
foreach(FolderItem folitem in e) {
....
と変わらないはず。多分。
あ、やば。気付かなかった。すまぬ。
>>188 エナミュレータ・インタフェースの勉強するといいよ。
最も、結局MSがどういう実装してるかによるわけだが。
IEnumerable/IEnumeratorの実装とは関係なく、SelectedItems()の実装次第じゃね?
197 :
188 :2005/12/23(金) 00:43:24
>>189 >>192 >>193 >>195 >>196 レスありがとう
コード間違えた
foreach( FolderItem folitem in FolderView.SelectedItems() )
{
oItem = folitem;
if(なにか条件)
FolderView.SelectItem( ref oItem, 25 );
else
FolderView.SelectItem( ref oItem, 0 );
}
>>195 勉強します。とりあえず内部でIEnumeratorにMoveNextしたとき
ループの中で選択してるオブジェクトの数が減ったりしてるはずなのに
エラーも出さず動いてるんですが、仕組みが分からない以上使えないなと思いました。
動くってことはSelectedItems()で取得したFolderItemsは不変ってことなのかな?
でもプロパティとると変わってる。
結局
>>196 に行き着くんですかね?
こういうコードは止めた方がいいですか?
>>196 MSDN見てみた。ディスパッチ・インタフェースか。
確かに .Net と言うよりVBの 'for each' 文化だな。
このインタフェース clsid 付いてるのか。
>>197 灰皿があるんなら、吸ってもいいんでね?
俺だけかもしれんがMouseWorksインストールするとVS2005でコンパイルできなくなるみたいだ Kensington製品使う人は気をつけたほうがいいかもしれんな…
2005Expressでユーザーコントロールの作り方が分からない… 新規作成に出てこないんだけど作れないってこと?
[プロジェクト]→[ユーザーコントロールの追加]
203 :
デフォルトの名無しさん :2005/12/23(金) 20:19:32
2005 Expressのデバッグでの実行速度が遅くて悩んでます。 例えば、下のプログラムを実行すると、 デバックなし(CTRL+F5)で実行 --> 2.8秒 デバッグ開始(F5)で実行すると --> 9.5秒 で、3倍以上も遅いです。 ちなみに、コマンドラインでコンパイルすると、 csc /optimize+ program.cs --> 2.8秒 csc /debug+ /checked+ program.cs --> 3.5秒 です。 2003 Proだとコマンドラインの結果と同等です。 2005 Expressのデバッグ実行はどうしてこんなに遅いのですか? using System; class Program { static void Main(string[] args) { int w = 1000; int h = 100000; DateTime dt = DateTime.Now; Random r = new Random(); double d = 0.0; for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) d += r.NextDouble(); TimeSpan ts = DateTime.Now - dt; Console.WriteLine(ts.ToString()); } }
>>203 そりゃデバッグは実行速度ではなくあくまでデバッグが目的なんだから
そのためにより多くの情報を集めるようになった2005で遅くなるのは割りと自然だろう。
205 :
デフォルトの名無しさん :2005/12/23(金) 20:33:09
>>204 今デバッグしている実際のプログラムだと、
デバッグなしだと3秒ぐらいなのに、デバッグありだと1分以上かかるんです。
ブレークポイントを使いたいだけなので・・・
多くの情報を集めなくて良いから、オプション設定とかで速くなる方法はないですかね?
206 :
デフォルトの名無しさん :2005/12/23(金) 22:36:17
データベースから取得したパスワードと、テキストに入力した文字を比較し ようと、if文を作ったんですけどエラーがでて実行できませんでした。 if文の書き方は合っていますか? if(dr["パスワード"]=="パスワード.text") { 処理 }
>>206 メッセージボックスなりDebugなりで二つを出力させてみたらいいんじゃね
エラーが出るのならばエラーメッセージくらい読めばいいのに
209 :
デフォルトの名無しさん :2005/12/23(金) 23:18:44
2005 Expressは、IDEからデバッグ実行すると、 実行速度が数分の1にスローダウンするようだ。 エクスプローラで直接DebugフォルダにあるEXEを 実行すると普通のスピードで動作する。 スローダウンする仕掛けが入っているのだろうか。 誰かExpress版とPro版の両方で試せる人はいない ですか?
>>209 だからIDE側にデバッグ時情報を渡すからだろうと
>>209 ウォッチ式とか付けてない?
数分の1は大きいなぁ。
212 :
デフォルトの名無しさん :2005/12/23(金) 23:51:22
>>210 ,211
ウォッチ式はつけていない。
リリースビルドした実行形式をDebugフォルダにコピーしてもだめだった。
絶対にわざと遅くしていると思う。
そもそも、 デバッグ情報がついたプログラムを通常実行するのと、 デバッグ情報がついたプログラムをデバッグ実行するのは違うぞ。 ちなみにブレークポイントの数は? まあこれは2003での話しなので関係ないかもしれんが、 ブレークポイントの数が多くなるとデバッグ実行の速度が大きく落ちた。 ※でも遅かったのは止めてステップ実行などしたときだけだったかもしれん。
>>205 3秒が1分てのは極端だな…
何の処理で時間がかかってるのか調べられないかい?
たとえば通常処理で例外を起こしてキャッチを大量に繰り返してたりとか。
215 :
デフォルトの名無しさん :2005/12/24(土) 00:50:38
>>214 Visual Studio 2005スレ Part6 の
827に実験結果をおいてます
>>216 すまねえ、VS2005すれPart6に逝きます。
218 :
デフォルトの名無しさん :2005/12/24(土) 02:51:53
メソッドにnewってどんなときに必要なります? いまいち分からないのですが、教えてください。
あー、隠蔽の話か。分かりづらい。 いらない。 と考えて良いよ。
220 :
デフォルトの名無しさん :2005/12/24(土) 03:01:07
age で答えられない程度なら、知ったかぶって回答すんなよw
はいはいワロ
何を聞きたいのかよくわからんが、 引数が同じで戻り値が違う時と答えておこう。
class Base { public Base Optimize(); } class Sub : Base { public new Sub Optimize(); } 元がvirtualでなかったり、戻り値の型変更する時にどうぞ
224 :
デフォルトの名無しさん :2005/12/24(土) 03:40:14
GenericのList<>,Dictionary<>と ArrayList,Hashtableを互いに変換することはできないのでしょうか?
Regex.Replace()使ってごまかした事なら歩けどな。。。
>>225 List<T>からArrayList、Dictionary<TKey, TValue>からHashtableにはコンストラクタに当てれば良い。
逆はちょっと面倒だな。素直にforeachで入れなおした方が良いかもしれない。
IEquatable<T> があるのに ICloneable<T> がないのはなぜなんだよ おかげで ICloneable を implicit に実装したことねえぞ
どう使えるのか書いてみてくれよ。
って思ったけど、まあ場面によっては使えるか。 でもこっちは自分で作ったらいいんじゃね?
ICloneable の戻り値が object であるせいで 呼び出し元でキャストするのが面倒
でもICloneableである必要ってよく分からないんだよな
各クラスが独自に実装してしまってもそう困るもんでないような気が
>>231 object ICloneable.Clone() {...}
public Hoge Clone() {...}
じゃ駄目?
今までの傾向からして public interface ICloneable<T> : ICloneable になりそうな予感。
そしてそれをどう使うのか… あんまり有効な使い方は思い付かん。
236 :
デフォルトの名無しさん :2005/12/24(土) 13:28:03
質問させて下さい。VC#2005Expressで、 using System.Web.UI.HtmlControls; を使うと エラー 型または名前空間名 'UI' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。 と出て、UIに青い波線が入ります。 オブジェクトブラウザをみるとちゃんと存在します。 どこがいけないのでしょうか?ヘルプをみても問題ない気がします。 昔VBの経験があり、OSはXP2、PCは自作です。お願いします。
add reference
239 :
デフォルトの名無しさん :2005/12/24(土) 13:42:52
>>237 >>238 おお、早速の返答ありがとうございます。
しかし悲しいかな、いまひとつ理解できず苦しんでおります。
もう少し詳しい説明をお願いできないでしょうか。
>>239 ソリューションエクスプローラのプロジェクトのところに参照ってない?
右クリックしてみ
しまった、俺まだ2003だった
241 :
デフォルトの名無しさん :2005/12/24(土) 13:52:22
>>240 おお、これか!
動いた!
ありがとうございました!!!
p/invoke した関数から NullReferenceException 飛んでくるんだけど、 呼び出し先の関数が null 返した時にもこの例外は出るんだっけ?
定義やら宣言やらが間違ってると思われ
244 :
236 :2005/12/24(土) 15:47:18
度々で恐縮です。 C#でHPに自動ログインさせようとしてるのですが、うまくいきません。 HtmlDocumentを使うのは分かったのですが、Itemプロパティが何故か使えません。 仕方ないの調べたらSetAttributeが使えそうなのですがこれも何故かうまく使えません。 Helpファイルの使用例も変です。恐れ入りますがよろしくお願いします。
245 :
236 :2005/12/24(土) 15:54:01
あ、IDは事前に分かっています。
System.Windows.Forms.HtmlDocument? Itemなんてプロパティは見当たらないが。HtmlElementにも。 うまく使えないってなにがどううまく使えないんだ。 ……ってSystem.Web? その名前空間は基本的にASP.NET用の名前空間であってWinFormアプリには使わないぞ?
247 :
242 :2005/12/24(土) 16:00:53
>>243 ん〜。NULL 以外の値が帰ってくる時には正常に動作するらしい。
NULL を返す時に限って例外出てくるんだけど……。それとも内部でこけてるだけかな……?
ちなみに宣言は
[DllImport("dxwrap.dll")] private extern static IntPtr DXMusic_New_FromFile(IntPtr hWnd, string filename);
248 :
236 :2005/12/24(土) 16:11:22
つまりAxWebBrowser/IHTMLDocument/IHTMLElement他の仕様と System.Windows.Forms名前空間のWebBrowser/HtmlDocument/HtmlElementの仕様の差がわからないと。 ヘルプ嫁としか言いようが無いな。 //しかしそのサンプルもずいぶん無造作にCOMオブジェクトを使ってるねー。
250 :
242 :2005/12/24(土) 16:47:01
>>243 悪い。自己解決。p/invoke 先にバグがあった orz
251 :
236 :2005/12/24(土) 17:00:50
>>249 要は自動ログインしたいだけなんです。
WebBrowser.Document プロパティのヘルプに
「HTML ドキュメント オブジェクト モデル (DOM: Document Object Model) によって、
WebBrowser コントロールに表示されている Web ページのコンテンツにアクセスするには、このプロパティを使用します。」
とあるのですが、うまくログインできないんです。
他に参考になるページは
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=18348 ですが、
ここもやり方が古い(?)ようです。
お付き合いくださってありがとうございました。頑張って試行錯誤を続けます。
> とあるのですが、うまくログインできないんです。 なにやら果てしない飛躍だな。
253 :
236 :2005/12/24(土) 17:15:37
え?方向性間違ってますか・・・orz
254 :
デフォルトの名無しさん :2005/12/24(土) 17:25:50
エクスプローラーのファイルリストのように、 列の入れ替えができるリストビュ−ってどうやれば実装できるのでしょうか? コンポーネントの名前とかも分らないので教えてもらえないでしょうか〜。m(_ _)m
別に間違っては無いが、過程がすっぽ抜けてるから。 質問するときは具体的に、なにをどうやってどうなったかをはっきりと。
>>254 AllowColumnReorder?
アイテムの管理が大変だけど。
>>253 2005で付いたブラウザコンポーネントは、
フレーム超えられないみたいだから注意してね。
まぁ、ネイティブのインタフェースも実装してるから
そっち使えばいいだけだけどね。
そんじゃ、これからデートで体力限界までハッスルしてきまつ!
259 :
236 :2005/12/24(土) 18:00:55
すみません。説明不足でしたか・・・orz Form1にwebBrowse1を貼り付けて以下のように記入しました。
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("
http://login.yahoo.co.jp/config/login?.src=www&.done= http://www.yahoo.co.jp ");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserNavigatedEventArgs e)
{
HtmlDocument doc = this.webBrowser1.Document;
doc.All.Item("login",0).value = "名前"; //axwebBrowserの例からこれでいけると思ったがダメ。itemの定義がないとエラー
}
この後SetAttributeを使ったり、書き方を変えてみたりしたが全滅でした。
現在もググってますが良い例が見つかっていません。
<input type=text size=23 id=txbx name="login">
HtmlDocumentにSetAttributeなんてないが。 つかVS2005使ってないの? まずHtmlDocument.Allを調べる。するとHtmlElementCollection型のインスタンスが返ってくると言うことが分かる。 HtmlElementCollectionのItemプロパティを調べる。 で、ここでC#の一般常識:Itemって名前の"引数をとるプロパティ"は、普通C#ではインデクサで表現する。 インデクサの使い方を調べる。 改めてHtmlElementCollection.Itemプロパティを見てみる。 と言う風に順番に解決してけ。
262 :
236 :2005/12/24(土) 18:51:09
>>261 VS2005使ってますがhelpでクリックして辿ってる内に変なところにたどり着いていたようです。
半ばヤケになっていろいろ試していました。もう一度最初から調べてみます。
ありがとうございました。
ライブラリモジュールに namespace Lib{ class ClassA{ } } というのがあるんだが、ほかのプロジェクトで使うときLib.ClassAじゃあかんのですか? リファレンス参照追加しても見つけてくれない・・・orz
Libプロジェクトを追加したの? ならLibはビルドしてる?
class は internal class じゃけえの public class にせいや
レスありがとうございます。 ビルドはしてます。 現状: ライブラリプロジェクトを同じソリューションに追加。 ライブラリのDLLは作成されている。 リフレクターで見ると対象のクラスなどは存在する。 ライブラリを参照したいプロジェクトにはDLLは存在しない←これがおかしい?
267 :
263 :2005/12/24(土) 22:24:47
DLLをソリューションに直接追加したらコンパイル通りました。 でもライブラリいじっても古いDLLのままなので手動でコピーしないといけないですね。
ほかの掲示板にも書き込んで見ます。 理由わかったら結果報告します。
クロスポストなら許そう
文字列通信を行うコンポーネントが読み込んだ文字列を string で返してくるのですが、 文字列の文字コードは UTF-8, UTF-16, ASCII, SHIFT-JIS, EUC-JP などさまざまです。 そこで、文字コードと string の関係がすごく気になります。 EUC-JP とか SHIFT-JIS の文字列を string に代入したら、内容は破壊されるんでしょうか。 もし破壊されないのなら、string で渡された文字列を byte[] に変換して、 それから正しい文字コードを指定して表示するなり変換するなりできますが、 場合によって破壊されてしまうのなら、そもそもそのコンポーネントの仕様に 問題があることになるので…。
stringはstringだ。CLIでの内部表現はUTF16だな。 内容が破壊とか意味不明。 EUC-JPなりShift_jisなりで表現されるのは所詮バイト列。stringとは関係無い。
要は、 ・そのコンポーネントは文字列を string として返してくる。 ・しかし、その内容は UTF-8, Shift_JIS, EUC-JP などさまざま。 という点が問題なのです。 おっしゃるとおり string の内部表現は UTC-16 です。 しかし、実際にコンポーネントが EUC-JP の文字列を string に 入れて返してきたものを、そのまま UTF-16 のつもりで表示すると、 化け化けでまったく表示できないんです。 ですので。 コンポーネントが string に入れてきた文字列は、 UTF-16 のように みせているが byte[] としてとりだすと元のエンコーディングの 文字列のバイト列のままで、バイト列から正しいエンコーディングに 変換することができるのか。 それとも、そもそも string に入れて返されてきた(もともと UTF で はない EUC-JP などだった)文字列は、UTF-16 と思って表示すると 化け化けなことから、既に破壊されていて、そこから変換して正しい 文字列を EUC-JP なり UTF-8 なりとして取り出すなんてことは、 不可能なのか。 そのどちらなのかが、わからないのです。
書き込んでからしばらく考えて思ったのですが、この場合、 コンポーネント内部の処理の時点で既におかしくなっている 気がしてきました。 string で値を渡してくるわけだから、string として表示 なりなんなりしたときに化ける時点で値をセットした側の 処理に問題がある気がします。
○○の考え休むに似たり。 普通にデコードためしてみりゃ良かろうに
>>272 勿論stringはstringなのだから、stringで返してきた文字列が化けているのならそれはコンポーネントのデコードミスだ。
コンポーネントがバイト列からstringに変換するときに正しいエンコーディングを使わなかったんだろう
> 化け化けなことから、既に破壊されていて、そこから変換して正しい
> 文字列を EUC-JP なり UTF-8 なりとして取り出すなんてことは、
> 不可能なのか。
例えば「あいうえお」という文字列をUTF-8で表現すると
E3 81 82 E3 81 84 E3 81 86 E3 81 88 E3 81 8A
ってバイトの列になる。
これをShift_jisでデコードするとまあ当然化けるわけだが、
その化けた文字列を再びShift_jisとしてバイト列にしてみると、
E3 81 82 E3 81 84 E3 81 81 45 81 88 E3 81 81 45
って感じになる。
何故かと言うと、途中変換できない文字は?または・に強制的に変更してしまうから。
だから
>>272 が言う「既に破壊」はある意味では正しい。
あーなるほど。 実際に byte[] に変換して元データのエンコーディングを使って 再度 string にして確かめてみろということですね。 やってみます。ありがとう。
お舞らC#のパーサー(コンパイルまでしなくていいから、継承関係とかどこでどのメソッドが使われてるかがわかるレベル)作るとしたらどのぐらい時間かかると思います? なんかかなりまんどくせそうなんだが。
継承関係を調べるだけならリフレクションでやればすむだけじゃん 呼び出し関係を調べたいならコンパイルしてからILを読めばいいだけだし
プログラム中で使うんだよ。VSのエディタみたいなもんだと思ってくれ。
>>269 それはただのスレ違いレスとどう違うんだ?
>>277 かなり。
とりあえずC#の言語仕様を精査するところから開始。
気が遠くなるだろ?
>>277 どこで使われてるか調べるならObsolete付けてビルドするのが手っ取り早いと思う。
>>278 =282かわからないけど、そういう話じゃないから。
.NETで作るんならCodeDOMはどうよ?
>>284 よく調べてないんだけど、実質パーサー何もなくない?
>>277 まぁ、System.CodeDom名前空間のクラス郡か、ANTLRでも持ってくるかって感じだな。
>>276 System.Text.Encoding
>>263 DLLの直接参照をやめて、プロジェクト参照にしたら動きました・・・
デモなんかそれができなかったりしたんだよな・・・
290 :
236 :2005/12/25(日) 16:16:56
>>261 丸三日掛かりましたがようやく出来ました。
ありがとうございました。
291 :
デフォルトの名無しさん :2005/12/25(日) 16:52:47
テキストファイルから文字を読み込んでlistBoxに表示 させる時に、スペースやカンマだけは読み込まないように したいのですがどうすればいいのでしょうか? 誰か助けて!
読み込まないって意味をどう理解するのかが難しいな。 とりあえずReplaceで取り除くという簡単な手段を提示。
C#でツールバーって作れますか? エクスプローラでファイルの操作とかしたいんですが、できますかね? 具体的にはどうやったらいいんでしょう
BancObjectでも使え。
DNSのMXレコード引く方法は用意されてるの?
Socket使うことになるな
>>297 生で出し入れするのか…。
ありがとう。RFC文書探してみるよ。
勉強したいってんなら別だが、CodeProject辺り調べたらあるんじゃね?
何が面倒って、プロトコルの規格を調べることだよな・・・ Socket使って生からで作る事自体は大した手間ではなかったり
HttpWebRequest.Connection プロパティってどうやって設定するの?
ヘルプには「Connection HTTP ヘッダーの値を取得または設定します。 」って書いてあるけど、
ヘルプのサンプルを動かしたら、
HttpWebRequest myHttpWebRequest2 =
(HttpWebRequest)WebRequest.Create("
http://www.contoso.com ");
myHttpWebRequest2.Connection = "Close"; ←ここでエラーが起こる。
このプロパティを使用して、Keep-Alive および Close を設定することはできません。
パラメータ名: value
なんてエラーが出やがった。
KeepAliveのプロパティで良いんじゃね
KeepAlive = false; ってすればいいだけなのか。サンクス。
>>303 53番のネェちゃんがアナ開けて待ってるから
そこにナマで出し入れしてネタを聞き出すんだよ。
下品なネタよそうよ。 今年は2日で計8戦して、摩擦しすぎで腫れちゃって 風呂入っても凍みるんだから。 くだらない妄想なんてやめて、 世界がどうやったら平和になるか考えようよ。
順子4組+頭をそろえると平和
所詮この世は弱肉強食なんだよ 俺は真っ先に死にそうだがorz
IList<T> のソートってどうやればいいんでしょう? List<T>ならList<T>.Sortメソッドがあるし配列ならArray.Sortメソッドがあるんですが そのどちらかわからない場合はどうすれば・・・
インタフェースの明示的実装
313 :
311 :2005/12/26(月) 19:10:20
>>312 インターフェースってIList<T>のことですか?
ドキュメントによるとIList<T>にソートをするメソッドはないみたいです。
頑張ってSort<T>(IList<T>)とかSort<T>(IList<T>, IComparer<T>)とか自前で書くこったな。
315 :
311 :2005/12/26(月) 19:34:20
>>314 ほんとにそれしかないんですか・・・
なんか釈然としないですがとにかくやってみます。
どうもありがとうございました。
316 :
デフォルトの名無しさん :2005/12/26(月) 20:28:21
KeyEventについて質問させてください。 KeyEventArgsで KeyCodeとKeyDataってどう違うんですか? ただコンボボックスでEnterが押されたらコマンドを実行するようにしたいだけなんですが
KeyDataの解説に書いてるだろ。
前スレを読んだんですが、.NETでは(Win32APIを呼ばない限り) caretを直接扱えないってことでしょうか。 ドローソフトみたいに画面上の任意の位置に文字を入力できるようなのを 作りたいのですが……。
枠なしTextBox使うとかどうよ。
.NET は Win32API ありきだから
321 :
デフォルトの名無しさん :2005/12/27(火) 00:43:25
sgenってDLL中の特定の複数の型に対して使うのはむりぽ? /t Hogeって単体は指定できるのですが・・
デフォルトだと全部にならないっけ? sgenの情報が少ないな
323 :
311 :2005/12/27(火) 05:44:32
もう一度よく調べてみたら、 ArrayList.AdapterメソッドがIListをArrayListに変換するのに使えるようです。 内容のコピーはしないらしいのでIListのコピーに使えそうです。
324 :
311 :2005/12/27(火) 05:45:17
× IListのコピー ○ IListのソート
IList<T>はIListを実装しないけどな。
326 :
311 :2005/12/27(火) 12:19:29
>>325 そうでした・・・
List<T> と配列が両方 IList を継承していたからうまくいっただけでした。
IList<T> をソートする方法は依然として不明のままです。
IList<T>ってインターフェースだよね。 一体何を悩んでいるのか読めない。
328 :
311 :2005/12/27(火) 16:15:10
あ、自分の場合は List<T> と配列を共通の方法でソートしたかっただけなので
>>323 の方法で問題ないです。すみません。
ただ IList<T> を実装したコレクションを共通の方法でソートする場合はどうするのかなあと思っただけです。
いくつかの動画を同時に再生しようと思っているのですが MediaPlayerをウィンドウに配置してMDIとして再生するのと DirectShowを使ってウィンドウに直接描画し、MDIアプリとして再生するのでは どちらの方が処理が軽くなるでしょうか? 再生する動画の数は1〜4つを想定しています。 また、DirectShowを使う場合はマルチスレッドにする必要がありますか?
そんぐらいは自分で試せ。
332 :
327 :2005/12/28(水) 03:46:08
IEquatableだったかを指定して、コレクションから検索するようなメソッドて どっかにない? 別にIComparerとかその他でもいいんだけど。…
例えばList<T>にはFindメソッドがあるが。 IEquatable<T>.EqualsをPredicate<T>にできるし。
ありがとん でも、ICollectionでできるのがないかなって コレクションて書いたのが悪かった。 ところでIListにはFindなくない?
ごめん、Listて書いてあった…
List<T>.Findの実装は簡単なもんだから(forループでPredicate<T>をそれぞれ実行してるだけ)、 自前でメソッドを実装すれ。 ICollectionならforeachと、型不定だから独自のデリゲートかIComparerかなにか使うことになるな。
自作しました。 まあ作ることはたいしたことないんたけど 標準的なのがあるならそれにしたかったわけです。
C#2005でWebBrowserで開いているページのリンクで 右クリックしたときだけ特定のContextMenuを表示したいのですが マウスポインタがリンクの上にあるか判別するにはどうすればいいでしょうか? WebBrowserのContextMenuStripにContextMenuを設定して ContextMenuのOpeningイベントに実装しようと思っているので リンク上ではなかったときにContextMenuを開かないようにすることも 教えていただければ幸いです。
HtmlDocument.ContextMenuShowing どれで右クリックされたかはHtmlDocument.ActiveElement辺りかね。 //HtmlElementEventArgsにSrcElementがないのは何でだ。 多分明示的にContextMenuStrip.Showを呼び出さなきゃなんないけど。
>>340 いろいろいじってたところ WebBrowser.StatesText なるものを発見して
リンクの上にマウスポインタが載るとそこにアドレスが格納されるように
なってたのでContextMenuのOpeningイベントで想定したアドレス以外だと
e.Cancel = true; で開かないようにできました。
(WebBrowserコントロールがIEとほとんど同じ仕様だからできたようなものですが・・・)
MSDNのHtmlDocumetを見てましたがこれを使えば色々なことができそうですね・・・
(ActiveLinkColorとかは使うのか・・・?)
342 :
デフォルトの名無しさん :2005/12/29(木) 08:28:55
HtmlDocumetでラジオボタンがクリックできないのですが良い手ないですか? 現在OuterHtml使ってますがもっとスマートな方法があるとおもうのですが。
できるし。 どうしてクリックできないと結論付けたんだ。
344 :
342 :2005/12/29(木) 11:16:41
>>343 今こんなふうにしかやる方法が思いつかないのですが他にあります?
Doc.All["gender"].OuterHtml = @"<input type=""radio"" name=""gender"" value=""1"" checked>";
SetAttributeでもInvokeMemberでも。
346 :
342 :2005/12/29(木) 15:23:54
>>345 あ、InvokeMemberってclick使うのか。checkだと思っていましたw
ありがとうございます。
System.Windows.Forms.TabControlって、どうしてリサイズするときにあんなにチラつくんでしょうか・・・
ウィンドウにTabControlを貼り付けたのですが ウィンドウの大きさにタブコントロールの大きさを合わせるには どうしたら良いですか? AutoSizeみたいなプロパティはないようなので・・・
Dockプロパティでも使えば。
Dock プロパティを Fill に
何度も言うが、Windows Formsは腐ってる
353 :
デフォルトの名無しさん :2005/12/30(金) 01:08:18
カコイイボタンとかコンポーネント探してます どこかオススメありましたら教えてくだされ できればC#^^;
354 :
デフォルトの名無しさん :2005/12/30(金) 01:31:24
タスクトレイのアイコンをダブルクリックでFormをアクティブにしたい(他のアプリなどが存在しても上に表示したい) のですが うまくいきません。 NotifyIconのダブルクリックイベントでform.BringToFrontをしても 上に行かないし .Netは別のプロセスのFormをいじれないからダメかなと思い Win32APIのShowWindow,SetForegroundWindowを使用すると上にはなるのですが アプリ@.NETを最大化してから最小化し、タスクトレイをダブルクリックして復元しようとしても 通常状態のウィンドウで復元されてしまいます(最大化した状態で上にきてほしい) [DllImport("USER32.DLL", CharSet = CharSet.Auto)] private static extern int ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("USER32.DLL", CharSet = CharSet.Auto)] private static extern bool SetForegroundWindow( IntPtr hWnd); //処理 ShowWindow(form.Handle, SW_RESTORE);//SW_RESTORE=9 SetForegroundWindow(form.Handle); そもそもWin32APIを使わないで何とかしたいのですが・・ 何か良い方法はありませんでしょうか?
>>354 > アプリ@.NETを最大化してから最小化し、タスクトレイをダブルクリックして復元しようとしても
> 通常状態のウィンドウで復元されてしまいます(最大化した状態で上にきてほしい)
Minimizeした時点でMaximizeかどうかの情報が欠落するから。
Layoutイベント辺りでWindowStateを保存しとけば良いだろう。
> そもそもWin32APIを使わないで何とかしたいのですが・・
> 何か良い方法はありませんでしょうか?
無理。
やっぱ、MS製品はバージョン3にならないとダメなのね。
357 :
デフォルトの名無しさん :2005/12/30(金) 07:42:42
C#にインラインアセンブラを搭載します。
TextBoxのAutoCompleteCustomSourceで問題があるんですが・・・心当たりある方いますか? TextBox.TextChangedイベントでTextBox.AutoCompleteCustomSource.Clear() を呼んで その後別の候補をセットすると候補が表示されないか、例外が発生して落ちる場合があります。 普通に候補が表示される場合もあります。 TextBox.AutoCompleteCustomSource.Clear() を除去するとちゃんと候補が表示されます。 TextBoxはダイアログボックスの子としてデザイナで作ってます。 以下は例外の詳細です。 System.AccessViolationException : 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。 スタックトレース: 場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 場所 System.Windows.Forms.Form.ShowDialog(IWin32Window owner) 場所 System.Windows.Forms.Form.ShowDialog() :
359 :
デフォルトの名無しさん :2005/12/30(金) 18:07:23
.net2で走らせるとき、 .net1で書いた非ジェネリックなStackと .net2で書いたジェネリックなStackだと 実行速度に差は出ますか?
>>359 スタックの中身が構造体の場合は速度の向上が存分にあるらしい
> .net1で書いた非ジェネリックなStack > .net1で書いた この解釈はどうすれば
>>358 フレームワークのバグっぽいねぇ。
Clearする代わりに、
新しくAutoCompleteStringCollectionを作成>
それに対してアイテム追加>
それをAutoCompleteCustomSourceに代入>
protectedであるRecreateHandleメソッドを呼び出し
でとりあえず回避できそう。
しかしまあTextChangedでAutoCompleteCustomSourceをいじるなんてトリッキーなことしないのが自然な気がする。
363 :
358 :2005/12/31(土) 00:03:26
>>362 レスどうもありがとうございます。
落ちる確率はぐっと減ったのですが、まだごく稀に落ちるようです。
階層的な構造をもつ文字列を入力させるのに便利かなと思ったんですが・・・
バグが直るまでとりあえずあきらめようと思います。
>>363 直ってほしいのなら、ただ待ってるだけじゃなくてMSに報告しろよー。
366 :
354 :2005/12/31(土) 08:18:11
>>355 無理ですか。 レスありがとうございました。
367 :
デフォルトの名無しさん :2005/12/31(土) 15:14:19
結局、C#で中国と戦えるのかと。そういうことですよ。結論は。 日本国内の不正アクセスの95%が中国ハッカー団。 残りの5%が韓国。 これ常識。
368 :
デフォルトの名無しさん :2005/12/31(土) 15:15:28
はいはい、ハッカーじゃなくてクラッカーですよ。
>>367 おまいは中国と戦争をしようというのか!!!
370 :
デフォルトの名無しさん :2005/12/31(土) 15:45:11
IT戦争のことですよ。 中国には人民のインターネット通信を管理する公の組織があります。 そいつらは日本にスパイウェアやらウイルスやら攻撃を仕掛けてきているんですよ。
>>370 日本語に慣れてないのか?省略して悪かったな。
おまいは中国とIT戦争をしようというのか!!!
>>372 そうでしたか。こちらこそ誤解してすみません。
戦争しなくてもやつらは仕掛けてくるのです。
これのことか? --------------------- SSHD Begin ------------------------ Failed logins from these: 211.121.160.90 (211.121.160.90) : 128 Time(s)
こっちのほうがよかったか… 210.118.170.41 (210.118.170.41) : 863 Time(s)
Windows Form でアプリを作ってますが、フォーム上のテキストボックスとプロパティを DataBinding.Add しても、双方向連結が出来ていないようで困っとります。 テキストボックスとオブジェクトのプロパティを連結しても、テキストボックスの値を変えて フォーカスが外れた瞬間、値が元に戻ってしまいます。 前は問題なかったのにどうしてでしょう?
378 :
デフォルトの名無しさん :2005/12/31(土) 19:27:07
ネイティブの吐ける自分専用のインタプリタを作りました。 これをC#と同期させれば、ほとんど何でも出来てしまいます。 なんていうか負ける気がしない? なんか今年の千葉ロッテみたいな、そんな気分です。 そんなわけで、どうやら中国との決戦も近いようです。 みなさん、強力お願いします。OTL
がんばってね
がんばれよ中国 とくにマイナーな山口県とか、ここポイントだから。
>>378 >ネイティブの吐ける自分専用のインタプリタを作りました。
おじさんには時代の進歩について行けない。
最近はこういうの普通なの?
C#使ったら2chに自動書込みツールとか簡単に作れますか?
専ブラを作るよりか楽チンでしょ
>>383 すっげぇ簡単。
2.0からはライブラリにzlib対応ストリーム入ってるっぽいし。
一番早く作れるのは WebBrowser で書き込ませることじゃね? 人大杉だと使えないけど
簡単に作れるんだったら荒らしとかに悪用されるんじゃないの?
書き込むだけなら簡単。 規制されないようにあちこちから書き込むのはちょっと面倒。 人に書き込ませるゾンビ系はかなり面倒。 でも結局はプログラムの技術ではなくて、 ネットワークそのものの知識とかの方が重要。C#かどうかは関係ない。
質問なんだけど、PCにあるネットワークインターフェースを指定して 通信することは可能なのかな? 条件によって通信を行うNICを切り替えたいのだけど。
C#のネットワークインタフェースは知らないが、一般的にいって、 発アドレスはbindするときに指定できるが、どのNICを使うかなんて ルーティングが決めることであってプログラマが指定しても意味ないぞ。
392 :
デフォルトの名無しさん :2006/01/02(月) 00:31:09
ToolTipをownerdraw かつ IsBalloonって出来ないんですかね。 バルーンのなかにシステムアイコン以外のアイコンを表示したいんですが
ジェネリクスの型引数から条件分岐をさせることはできませんか。
ジェネリクスの意味が失われそうだな、 if (typeof(T).Equals(typeof(string))) {...} とか。
395 :
デフォルトの名無しさん :2006/01/02(月) 11:20:42
まずC#を極める。 それからCをやる。 まずはそれから。 チャイナとの戦争は少数精鋭でいく!
超どうでも良い発見。 public struct Hoge { public int Value; public void Add(int value) { this.Value += value; } public Hoge(int value) { this.Value = value; } public override string ToString() { return this.Value.ToString(); } public static void Main() { //ボクシング。 object obj = new Hoge(3); //(Hoge)objの時点で値のコピーになるので、 ((Hoge)obj).Add(4); //objには影響が無い。 Console.WriteLine(obj); //リフレクションでobjのメソッドを直接呼ぶと、 typeof(Hoge).InvokeMember("Add", BindingFlags.InvokeMethod, null, obj, new object[] {4}); //値のコピーが発生しないのでobjに影響する。 Console.WriteLine(obj); } }
そういうキャストがコピーになるネタ、別のところで別の言語についても 読んだ記憶があるんだが、なんだったかなあ。
398 :
デフォルトの名無しさん :2006/01/02(月) 13:05:31
VBAいらないからC#を搭載しなさいといいたい。
399 :
デフォルトの名無しさん :2006/01/02(月) 13:13:11
C#を普及させるためにC#専用の擬似インラインアセンブラを開発しました。 私はこれを「AssenblerForC#」と命名しました。 それはC言語で書かれています。 また構文はまんまCASLです。
フォームのテキストボックスとあるオブジェクトのプロパティを DataBinding.Add でバインドしたのですが、 オブジェクトのプロパティを変更すると、テキストボックスに値が更新されません。 DataBinding.Clear してから Add すれば更新されます。 テキストボックスの値を変更すれば、オブジェクトのプロパティの値は変わります。 どうすればプロパティの値を変更したときにフォームの値も変更できるのでしょうか? よろしくお願いいたします。
CurrencyManager の Refresh
>>401 どもども。
でも DataBinding してるのが ILIST を実装していないオブジェクトのプロパティなので
CurrencyManager ではなく PropertyManager が返ってくる。
PropertyManager には Refresh が実装されていない。
どうすれば??
>>396 C#って、"->"演算子使えるんだっけ?
unsafe内でなら使えるが、参照とポインタは別物だぞ。
>>400 DataBindingsは単純データ連結だからそんなもんだ。
「あるオブジェクト」にHogeChangedイベントでも実装させて、
そのイベントでテキストボックスの値を直接書き換えるとか。
>>405 なるほど。単純だとそうなのですね。
DataGrid だかをつかってデータベースと連携するときなどは便利そうですね。
ご指摘の方法で実装します。
ありがとうございました。
.NET 2.0 の SslStream を証明書無しで使いたいんだが、やり方わかる椰子いる? 漏れのやり方じゃ、証明書作成しないとダメっぽ。。。orz
408 :
デフォルトの名無しさん :2006/01/03(火) 00:40:55
C#でHTMLの内容取得をやりたいのですが、どうするのが正道でしょうか? できるかどうかは分かりませんが現在次の方法を考えています。 1.HTMLDocumentからタグで辿って取得。 2.XMLに変換して構造的に取得。 3.Streamで取得して強引に検索する。
ある程度しっかりしたHTMLなら3. どんなHTMLがくるか未知数なら1. well-formedなXHTMLしか来ないことが分かってるときだけ2.
410 :
デフォルトの名無しさん :2006/01/03(火) 09:08:17
>>396 値型のインスタンスってnew した時点ではどっちもHeapに取られるんだっけ?
で、値型のキャストはスタックにコピーを作る?
なんかこのへんの理解についてあやふやなんだよなあ、あってる?
Reflection 経由で呼ぶとHeap 上のフィールドを直接編集できるって理解で
OKでしょうか?
411 :
408 :2006/01/03(火) 12:24:11
>>409 レスありがとです。
参考になりました。
>>410 メソッド内でnewしたらスタックに、メンバとしてnewしたらヒープにとられる(配列要素なんかもヒープ)。
//ちなみに参照型はメソッド内でnewしたら「参照が」スタックに、インスタンスがヒープにとられる。
ボクシングした場合、値がヒープにコピーされて、その参照(object型)がスタックにとられる(ローカルなら)。
アンボクシングでは、ヒープに入ってる値がスタックにコピーされる。
アンボクシングしない限り値のコピーは発生しないので同一インスタンスとして扱える。
ま、そんな複雑なことを値型に要求するのが間違ってるが。
413 :
プログラミング初心者 :2006/01/03(火) 17:01:35
VS.NETやWORDでは、テキストをD&Dで別の場所に移動できますよね? あの機能をリッチテキストボックスで実現したいのですが、どのようにすれば良いですか? (ドラッグオーバーイベントとかでやってみたのですがうまくいきませんでした) なにか参考になるようなサイトがあれば教えてください。
MouseDown/MouseMoveで自前でDoDragDropを呼ばないと巧くいかないようだよ。 デフォルトでもドラッグ動作が動くように見えるんだが、どうにも微妙。 簡単には、 ・MouseDownでマウス位置保存 ・MouseMoveで、MouseDownからの移動量がSystemInformation.DragSize以上になったらDoDragDrop呼び出し。 データ形式に独自の形式を使うと便利。 ・DragDropで、自分からのドロップの場合、元々選択していた文字列を削除して、新しく張り付け。
>>413 同じ所に嵌った人がいてウレシイ
でもここじゃなくふらっとあたりで聞いたほうが
enable auto... を true でどう?
Win32APIのPathRelativePathToを使わずに相対パスを、得る方法が あれば、教えてくださいm(_ _)m
System.IO.Path のメンバ関数を全部見てみろ
>>418 ないということですね。ありがとうございました。
まあSystem.Uriクラスを使い倒せば可能なんだが。 .NET 1.0/1.1の場合はSystem.Web.HttpUtilityも必要だけど。
422 :
デフォルトの名無しさん :2006/01/04(水) 04:41:06
423 :
デフォルトの名無しさん :2006/01/04(水) 12:26:27
>>370 公でやっててあの程度ならどうでも良い。
Form1_Load時にResizeイベントを発行したいのですが、Loadになにを記述すればいいんでしょか? 本当に初心者の質問なんですけどよろしくお願いします。
OnResize
BOMを付けたUTF-16のファイルを作るには、自分でBOMをWriteする しかないのでしょうか?それともそこまで面倒を見てくれるクラスがある のでしょうか?探しましたが見つかりませんでした。ご存知でしたら教えて ください。
428 :
427 :2006/01/05(木) 04:11:52
自己レスです。GetPreamble()で取得して自分でWrite()するしか ないようです。失礼しました。
System.Text.UnicodeEncoding
DoDragDropよぶとすぐに抜けてしまうんだけれど何か前処理必要でしたでしょうか? 拾ってきたサンプルだとDoDragDropの次にトレースメッセージかくとドラッグが終わるまで表示されない。 自分で作ったものだとDoDragDropがすぐ抜けてきているようでマウスで引っ張ってる途中のつもりのときにすでにメッセージが表示されてしまっています。
普通はドロップされるまでブロックされるが。 コード見ないと何とも言えないな。
DataObject o = new DataObject( DataFormats.FileDrop, _nodeList[mindex].FullName()); Debug.WriteLine("begin DD"); DragDropEffects de=RootControl().DoDragDrop("Test", DragDropEffects.Copy);//RootControlはFormの派生オブオブジェクトを返す。 Debug.WriteLine(string.Format("end DD:{0}",de.ToString())); こんなんです。 言われるとおりサンプルだとマウスを放すまでDoDragDropをぬけてこないんだけど、自分のコードだとすぐに抜けてきてしまいます。
まあそのRootControlメソッドとやらが怪しいな。 どうでもいいが DataObject o がさびしそうだな。 あとちなみに root ━━ v. 根づく[かせる]; 定着する[させる]; 動けなくする, 立ちすくませる. ━━ v. (ブタが)鼻で掘る ((up)); 捜す.
434 :
432 :2006/01/05(木) 22:57:29
public partial class RootForm : Form { public RootForm() { MouseDown += new MouseEventHandler(RootForm_MouseDown); } void RootForm_MouseDown(object sender, MouseEventArgs e) { DoDragDrop("Test", DragDropEffects.Copy); Debug.WriteLine("end DD"); } RootControl()はこのRootFormをかえすんですが、今試しに作ったMouseDownイベントでも一緒・・・orz
本当に帰ってきてるかチェックしる! RootForm rf = RootControl(); if( rf == null ) MessageBox.show("ダメじゃん"); DragDropEffects de = rf.DoDragDrop("Test", DragDropEffects.Copy); まあRootControlがどこのインスタンス返してるか次第ではなにも起きない可能性もあるしな。 RootFormのコンストラクタでスタティックメンバにオブジェクトつっこんどいて一致するかも チェックしてみたら。
帰ってきてます・・・ どういうときに何も起きない可能性あるんでしょ?
ダイアログとして起動してないフォームとか。
ちょっとほかの掲示板にも出してみました。
結果わかったら報告します。
>>437 ダイアログとして起動することがなにか関係するんですか?
GDNJの書き込み見て気づいた。 MainメソッドにSTAThread属性つけてないんじゃないか?
>>439 Mainにはつけてます。ただこれ暮らすライブラリの中のクラスなんだけど、暮らすライブラリのほうにはCOM関連の属性指定なんかないのかいまみてるとこです。
暮らす暮らすって、そんぐらい直せよ。
442 :
デフォルトの名無しさん :2006/01/06(金) 13:33:29
.NETアプリでIME変換ウインドウをいじりたいのですが、 Win32APIを使うしかないのでしょうか。 具体的には変換ウインドウの位置を変更するというのと、 背景色・フォントを変更したいと考えています。
APIしかないね。 まあそもそもそんなもんいじるなと思うけど。
テキストエディタ用とかじゃない?
>>442 ATOK
WXG
Japanist
とかも忘れずにね!
446 :
442 :2006/01/06(金) 18:01:05
>>443 どうも。
>>444 ですです。
>>445 TextEditとかはコントロール側で対応してるんでしょうか。
IMとアプリの関係がよくわかってません・・・
447 :
デフォルトの名無しさん :2006/01/06(金) 18:16:10
VS.netでTabPageを継承したクラスを作ろうとしています。 具体的にはページ上に複数のコントロールを配置して、それをTabCotrolに登録して使う予定です。 複数のコントロールを並べるのはデザイナでやりたいのですが、 public class UserControl1 : System.Windows.Forms.TabPage; とするとデザイナでコントロールを並べられなくなります。 どうすればいいでしょうか?
448 :
447 :2006/01/06(金) 18:16:46
訂正 public class UserControl1 : System.Windows.Forms.TabPage の最後の;は誤植です。
C#っていうかオブジェクト指向的なことになるんですが staticにするべき関数の定義について教えてください。 ちなみにWebアプリで考えるとしてです。 例えばメール送信クラスを作ったとして、これはstaticにすべきでしょうか?しないほうがいいでしょうか? Webアプリなので、この関数自体は同時に呼び出される可能性はあります。 こういうのに限らず、一体どういったクラス内のメソッドをstaticにしていいかよくわかりません。 なにか基準があるんでしょうか? どこかでユーティリティっぽいのはstaticでつくっとけ みたいに書いていたんですが、その線引きもいまいちわからず。 何か明確な定義はあるでしょうか? 元々ASP(非.net)をしていて、最近.net(C#)にしたので オブジェクト指向というのがまだあまりよくわかっていないもので。 ASpなら関数なのでstaticもなにもないんですが・・・
450 :
デフォルトの名無しさん :2006/01/07(土) 00:34:59
>>449 メンバ変数をわないならstaticとか
staticが問題になるのはフィールドであってメソッドではない。 インスタンスの状態に関係なく処理でき副作用がないのなら、そのメソッドが静的かどうかは余り関係がない。 違うスレッドが同時に実行しようが何の問題もない。 「インスタンスの状態に関係なく処理できる」のが静的メソッドの必要条件。 「副作用がない」は必要条件ではないが、副作用があると極めて面倒なことになるだろう。特にWebアプリでは。 まあ要は静的フィールド(プロパティ)を作るなと言うことだが。 必要条件を満たしているとして、 そのオブジェクトインスタンスに意味的に関わるのなら非静的、そうでないのなら静的、とか。 インスタンスが必要でないのなら静的、とか。 自身の型のインスタンスを作る(WebRequest.Createみたいの)なら静的、とか。 ま、静的メソッドを作る機会は(オブジェクト指向に則ってれば)あんまりないけど。 > 例えばメール送信クラスを作ったとして、これはstaticにすべきでしょうか?しないほうがいいでしょうか? > Webアプリなので、この関数自体は同時に呼び出される可能性はあります。 メールクラスの送信メソッド? まさにインスタンスメンバにすべきものじゃね? メールクラス作って、本文プロパティやら件名プロパティやら埋めて送信メソッド実行。
メッセンジャーとかで誰かログインした時とかに 右下からにょーんと通知ウィンドウが出ますよね。 数年前会社にMSの人が.NETの宣伝に来たときに その通知ウィンドウに任意の文字列を表示するデモを見せてもらったんですが、 .NETで提供されているものなのでしょうか?
MSのサイトにVB.NETのが転がってた希ガス NotificationWindowだったっけ?
PowerToysみたいな名称で10個くらいのコンポーネントがあったはず
>>453 ありがとうございます!
「通知ウィンドウ」「NotifyWindow」「にょーん」「びろーん」「にょきっ」
とかで検索してたんですけどなかなか見つからなくて…
>>454 Visual Basic Power Packですね。
ってVBか…スレ違いすみませんでした。
> 「にょーん」「びろーん」「にょきっ」 > とかで検索してたんですけどなかなか見つからなくて… まあそりゃ……w
>>456 VBだけど、C#からも使えるからいいんじゃない?
C#でLineinやMicなどからの音声を取得したいんだけど、.NET Frameworkのライブラリにはそういうのはない? リアルタイムで処理するので、MCIを使うのは無理っぽい。waveIn〜系のwin32apiみたいに使えるやつがほしい。
ならwaveIn〜をDllImportして使えば。
461 :
デフォルトの名無しさん :2006/01/07(土) 17:01:40
AxWebBrowser で、 HTMLDocument から GIF 動画が、終了したか取得するにはどうすればいいの? 今の所、以下みたいにしたんだが、動画ダウンロード終了までしかとれん。 〜〜mDocument とるまでは、省略〜〜 HTMLImg mImg=null; IEnumerator ee; ee = mDocument.images.GetEnumerator(); while(ee.MoveNext()) { mImg=(HTMLImg)ee.Current; if( mImg.alt.IndexOf("テスト動画")>=0) { do{}while(! mImg.readyState.Equals("complete")) break; } Marshal.ReleaseComObject (mImg); } Marshal.ReleaseComObject(mDocument);
>>451 コードを出すと(一部簡略化しています)
----------------------------------------------
public class Mail
{
private static readonly string smtpserver = ConfigurationSettings.AppSettings["SMTPSERVER"];
public static bool SendMail(MailMessage mail)
{
try
{
System.Web.Mail.SmtpMail.SmtpServer = smtpserver;
SmtpMail.Send(mail);
}
catch (Exception e)
{
//ログ書き込み
return false;
}
return true;
}
}
----------------------------------------------
こんな感じなのですが。
もう一つオーバーライドで、引数増やして添付ファイルVerもあります。
改行が多いと言われたので上の続きです。 この場合、メッセージは引数としてわたってきますが もしこのクラス内にメンバ変数でメッセージ自体を持ち new時にそれを初期設定するような作り方の場合、staticでは不味く メンバ変数がないこの状態であれば、特に問題はない。 という解釈であっているでしょうか?
staticではまずいと言うかそもそもstaticメソッドじゃインスタンスフィールドには触れない。 つまりその場合staticメソッドじゃ実現できない。
質問です。 ConfigurationSectionを継承して配列やArrayListをシリアライズするにはどうすればいいのでしょう。 this["TestArray"] = new ArrayList(); などとすると、Configuration.Save() のタイミングで例外が発生します。 ApplicationSettingsBaseを継承する方法では普通にシリアライズできているんですが、 こちらはアプリケーションスコープの設定の書き込みができないようなので・・・
466 :
デフォルトの名無しさん :2006/01/07(土) 20:45:16
リモーティングについての質問です。 Remotingで 型RemotingObjectがサーバ側で登録されているかどうかを知るためにはどのようにしたら良いのでしょうか? サーバ側で登録されていない場合、 RemotingObject remoteObject = (RemotingObject)Activator.GetObject( typeof(RemotingObject), "ipc://IpcSample/SampleApp");//この時点ではプロキシが作られるだけなのでエラーが出ない string str = remotingObject.ToString();//←ここでエラーが出る (実はやりたいことはアプリケーションの2重起動時にコマンドラインを受け渡すだけなんですが
>>447 普通のUserControlの上にコントロール並べてDock=FillにしてTabPageにAddすればよくね?
O-Rマッピング関係のスレ知ってたら教えてください。
MDI子ウィンドウの中にWMPを貼り付けて再生すると サイズが変わるのは仕様ですか? (しかもWMPのDockをFillにしとくと落ちる)
File.SetAttributes( path, fileAttributes ) ではNTFSのフォルダ圧縮は設定できないようですが、 他に方法はありませんか?
デフォルトコンストラクタがない、こんな簡単なクラスAを自作したとして class A{ public A(int a, int b){ _a = a; _b = b; } private _a; private _b; protected virtual bool SomeMethod(){ return false; } } SomeMethodだけをoverrideしたクラスを作りたい場合でも、必ずコンストラクタを書かない方法ってないですか? 書かないとコンパイル時に「引数を '0' 個指定できる、メソッド 'A' のオーバーロードはありません。」となってしまいます。 自分が作ったクラスAに相当するものはコンストラクタのオーバーロードが8個あって、 派生クラスでもそのままそのコンストラクタを使いたいのですが、いちいち B(int a, int b):base(a,b) 見たいな感じで渡すのは大変だし、記述ミスを考えるとあんまり良いやり方には思えないのですが。。。
基底クラスが引数2つ要求してるのに、派生クラスがそれを守らなかったら整合性が木っ端微塵だ。 例えばその基底クラスコンストラクタで引数使ってOpenFileしてたらどうする?
Hashtable.comparerが参考になるかも
これからプログラムというのを始めようと思っています。 で、質問です。 あるサイトに行って、ある順番でページを進んで、複数のページのHTMLデータを取得するプログラムを作りたいのですが、 C#でもできますでしょうか。 C#というのは、初心者にも優しいと聞いて、是非C#でやりたいのですが、こういうのは作れますでしょうか?
可也
478 :
476 :2006/01/08(日) 17:17:04
>>477 即レスありがとうございます。
えーと、中国語?煤i; ̄□ ̄
たぶん、可能ということですね。
ありがとうございました。
すいません、後学のため追加質問させてください。 よそで聞いたところによると、C#よりC/C++とかのほうが難しいけど、C/C++の方ができることは多いと聞きました。 では、C#だとこういうのが作れないというのは、どういうプログラムでしょうか?
作りにくい(面倒くさい)ってのはあっても作れないってのはないよ 直接API(Windowsネイティブの命令)を扱うこともできるから
ハードウェアの制御はまず無理だな
CLR に依存しないプログラム
>>479 おまいがやりたいと思うようなことではなかなか遭遇しないだろうから
気にしないでおいたほうがいいよ。
そうですか。 ハードの制御なんてしませんし、サイト情報の取得加工ができるなら、問題なしです。 ではもう 心おきなくC#を勉強致します。 ありがとうございました。
>>473 そもそもアンダーバーで始まる名前を作るな
C/C++じゃないからいいじゃん
487 :
485 :2006/01/08(日) 19:31:37
スレ間違えたwww
488 :
342 :2006/01/08(日) 19:51:35
>>476 >あるサイトに行って、ある順番でページを進んで、複数のページのHTMLデータを取得するプログラムを作りたいのですが、
>C#でもできますでしょうか。
俺C#歴1ヶ月だけど楽勝。
>>476 「文字コードの自動判別で詰まる」に一票。
昔クローラを作ったときはMSHTMLを使った 文字コードの判別なんて気にせず使えていい
クローラってなに?
芋虫。
クロール、クローラ、クローレスト
南の島の
495 :
473 :2006/01/08(日) 21:36:57
IClonableを実装したいクラスがあるんですけど フィールドが全部値型とか読み取り専用の参照型(String、Uriなど)の場合ってMemberwiseCloneを返すだけでいい?
うん
別にICloneable.Cloneは必ず詳細コピーが要求されると言うわけでもないがな。
499 :
デフォルトの名無しさん :2006/01/08(日) 23:13:52
VB6から乗り換えるのにC#とC++どっちがいいですか? c#とc++って何が違うんでしょうか?
確実にC#だろうな
今からC++に乗り換える人って 絶対マゾだよね
502 :
500 :2006/01/08(日) 23:33:11
>>501 そういう意味で書いたわけではないんだけどな。ただVBからだったら
.netからではないにせよC#の方がとっつきやすいという意味で書いた
だけで。
>>499 ,501
個人的には、今からC++をやる人がマゾだとは思わないよ。スキルを
上げようと少しでも思っているのなら、多言語、特にC/C++あたりは
触っておいて損はないと思う。C#をメインで使うにしても、その経験は
色々と生きてくる。
いきなり C++/CLI から入るのはやめといた方がいいだろうけどな。
504 :
500 :2006/01/08(日) 23:58:28
505 :
デフォルトの名無しさん :2006/01/09(月) 00:10:53
車で言えばVB6は軽自動車、C#はカローラ、C++はフォーミュラマシン。 レーサーになるのでなければカローラで十分。 コンビニ行くのにフォーミュラマシンを乗りこなす必要はないw
なにがどう解決したんだろう
ハードをさわるようになって、ドライバを書いたり、 研究室でシミュレータいじるようになったらCやC++は必須だけどな。 わざわざGUI周りの苦労をC++で味わう必要はなし。
>>499 VS2001でVB6からC#に乗り換えた俺は、C#を強く推奨。
ポインタに触る気がなければVB9(VB2005)を推奨。
なんでVB9を無視してC#とC++の二択なのか理解に苦しむけど。
それと、C#とC++の比較論とは関係無いけど、C#(もしくはVB.NET)は、変数の寿命がVB6とは違う事に注意。
VB6では参照されなくなった途端に変数が削除されて、それがクラスインスタンスならば、即座にTerminateイベントが呼び出される。
でも、C#・VB.NETの場合は、変数が消滅するのはガベージコレクタの気分次第。
参照が無くなっても、いつ消えるか分からない。
ファイナライザやらデストラクタやらにいくら終了処理を記述しても、その実行を期待してはいけない。
最悪の場合、ファイナライザやらデストラクタが全く実行される事無くアプリが終了まで到る事もある。
>>505 良い例えだな。
でも、フォーミュラマシンでコンビニに行かされるならまだマシ。
業務の場合、軽でサーキットやら荒地を走れと言われるんだからたまったもんじゃないw
>いつ消えるか分からない。 VB.Netなら nothing のセットで消えるはず。 >最悪の場合、ファイナライザやらデストラクタが全く実行される事無く >アプリが終了まで到る事もある。 ありえへん。
C#がカローラというのはどうか。 カムリくらいじゃ?(たいしてかわらないか) それほどメジャーじゃないし かといってそれほど低性能でもない
>>510 >VB.Netなら nothing のセットで消えるはず。
セットしても実際に GC 動かないと消えないよ
カムリってまだ売ってんのか。
C#に元々存在してる機能ですが何か? インスタンスの消滅とは何の関係もないぞ。
516 :
509 :2006/01/09(月) 01:18:22
517 :
509 :2006/01/09(月) 01:19:40
コンストラクタじゃなくてデストラクタだったw
518 :
デフォルトの名無しさん :2006/01/09(月) 01:55:44
499ですが、 VB.NETはVB6と大きく変わってしまって、 address ofがデリケード型使えとかなんとかで訳わからず。 それならCにしようと。 順番としてCを覚えてからC++からc#になるのかと思ったのですが、 C++とばしてC#でも大丈夫でしょうか?
とばすとかそういうもんじゃない別言語だし。 なにが大丈夫か不安なのかよくわからん。
520 :
500 :2006/01/09(月) 02:02:24
>>518 C→C++なら分かるが、C#は全く別系列。手軽に使いたいんなら
最初からC#にした方が吉。
ただし、そのdelegateとかはC#でもやはり理解しないと無理。
CとC++は互換性があるけど、C#は似てるだけだから
522 :
デフォルトの名無しさん :2006/01/09(月) 10:53:36
C#を使うにもメモリ管理のことは常に頭に入れておいたほうがいいね。 前のスレにも出てたけど、ガベレージコレクタを意のままに操るのは実は結構難しい。 終了処理を書くにもタイミングがあるんだ。 ここって結構C#の穴なんじゃないかと思う。
GCぐらいC#じゃなくてもついてるだろ
そもそも「意のままに操る」必要性がどこにある
そういうことをやりたいのなら言語違うもんにすればいいんでは。 もしくはC++と混ぜて使うとか。
VB6やっててC/C++とC#迷うようなやつは 1年たってもC/C++は出来るようにならねーよ
>>510 お前の方がありえん
でたらめ教えんな、信じる馬鹿がでるだろ
アプリ終了のタイミングと同時にデストラクタやファイナライザが呼ばれるが それをどっちに含めるかだな。(笑) 絶対呼ばれるという理解を前提に話するのは危険だと思うが。相談スレだし。
そういうこといってんじゃない。 いやまあ普通は必ず実行されるという理解でいいが 実際は必ず実行されるとは限らない。 そういう話に対して、ありえないって反応だったから 書いたんだよ 念のため、普通にドキュメントに書かれてることだ
>>510 > VB.Netなら nothing のセットで消えるはず。
本当かよそれ。VBはrefcountGCでも使ってんのか?
GCの動作を理解してないと非マネージリソースの扱いでハマる。
後始末が必要なオブジェクトは明示的に後始末しとけってだけの話だが。
531 :
デフォルトの名無しさん :2006/01/09(月) 14:56:26
>業務の場合、軽でサーキットやら荒地を走れと言われるんだからたまったもんじゃないw ワロタ
>>530 nothing セットしても消えないよ。
それはC#と同じ。
ちなみに旧VBでも Nothing セットするのと
インスタンスの消滅は別問題。
参照がある限り消えない
.NETではアプリ終了時のファイナライザ呼び出しは時間制限があるんじゃなかったっけ
時間制限って何だい?
535 :
デフォルトの名無しさん :2006/01/09(月) 22:03:17
デストラクタであまりに重い処理をまわしてみると、その後の処理がカットされる場合があったような気が 時間制限の技術文書ってどこかにあったっけ? Remotingに関して質問させてください。 Remotingでの異常処理(サーバがダウンしたなど)ってどうやってトラップすべきなんでしょう? 透過的プロキシオブジェクトのメソッドを呼び出してる部分を片っ端からTryCatchするしか方法ないのかな OneWayAttributeっていまいち信用性に欠けるし たとえば、あるサーバがRomotingObjectをシングルトンでサーバアクティベーションしているとして //クライアント側 RemotingObject ro = new RemotingObject(); try{ ro.ExitApplication();//中身はこんなの--> public void ExitApplication(){Application.Exit();} }catch(RemotingException){}//サーバが終了するのでExceptionが起こる みたいに全部TryCatch書かないとダメなのかな。 こんなんだったら、透過的じゃないほうがわかりやすい気がするんだけど・・
VC#2005のビルドオプションで、CPUはどうしてる? Any CPU?
nullableって列挙型にもできるんだな。 かんがえてみりゃ当たり前なんだけど、気づかなかったw
ベータでは参照型にも使えたんだよな
>>535 やっぱ単純にはThreadExceptionとかでまとめてやる、とかかな?
誰か、自作のRealProxyからリモーティングの透過プロキシへの
メッセージの受け渡しの正しい方法を教えてくれ。
.NET v1のころの書籍には1Finalizeメソッド2秒、全部で40秒とかの ルールが載ってたように思うな。 MSDNとかの記述では、具体的な数字なんかは出てこない。 ほかに、finallyブロックでThreadAbortExceptionが発生した場合、 finallyの残りが実行されないとか、通常レベルで想定外な事象ってのは発生し得る。
エディタの色ってどこで直すの? オプション探しても、共通のウィンドウの色の変更しか見当たらない。
オプションの環境>フォントおよび色で テキストエディタにうんざりするほどたくさん項目があるが。
>>542 出てきますた・・・orz
再起動する前はセッティング対象に3種類しか出てこなかったんだよ・・・
544 :
デフォルトの名無しさん :2006/01/10(火) 16:22:17
Console.WriteLine の結果をデバッグウィンドウではなく Form 上に表示したいのですがどのようにすればいいのでしょうか?
TextWriterの派生クラスで表示させるコードを実装させて Console.SetOutでその派生クラスのインスタンスを設定する
確かにそうやりゃ出るとは思うが、 根本的に何か間違ってるんじゃね?
547 :
デフォルトの名無しさん :2006/01/10(火) 19:27:54
すいません。質問があるのですが、、、 web上のテーブルデータを取得して データグリッドを使って表示させることって可能ですか?
可也
おおよそ意味不明だが、まあ頑張ってテーブル要素解析汁
550 :
547 :2006/01/10(火) 19:56:08
Infoseekのマネーにある、株価の時系列データを取得したいのですが、 ソース取得まではわかるんですが・・・その後がわかりません。
わかりませんがわかりません!!
552 :
デフォルトの名無しさん :2006/01/10(火) 20:18:59
C#2005ExpressでWebにアクセスするアプリを作ってるんですが、 ラジオボタンのクリックでwebBrouserを使って (axWebBrouserではなく) Doc.All["gender"].InvokeMember("click", "1") は出来るのですが値を2にして Doc.All["gender"].InvokeMember("click", "2") にしても1をクリックしてしまいます。 何か間違ってますでしょうか?
・HtmlElementCollection.Itemは同名の要素が複数あった場合、先頭の要素を返す ・clickメソッドは引数を取らない Doc.All.GetElementsByNameで同じname属性持ってる要素のコレクション取り出してそれにItem(int)でアクセスする、とかしな
>何か間違ってますでしょうか とりあえずスペルが間違ってる
555 :
547 :2006/01/10(火) 20:35:31
その取得したソースをどうしたらデータグリッドに表示できるのかが わかりません・・・。 説明不足とは思いますが、わかるかた教えていただけないでしょうか。
>>555 ・HTMLを、正規表現System.Text.RegularExpressions.Regexクラスなどを用いて解析し、必要なデータを取得する
・データをSystem.Data.DataTableクラスなどに格納
・System.Windows.Forms.DataGridのDataSourceに設定する
これでいいか?
557 :
デフォルトの名無しさん :2006/01/10(火) 20:59:08
アプリケーション構成ファイルが 単体なら読めるのに ウィンドウズサービスに乗せると読めなくなる。
>>557 作業フォルダが違うだけで、読めねーわけではないと思うが。
559 :
547 :2006/01/10(火) 21:28:02
>>556 ありがとうございます。うまく書けるかわかりませんがやってみます。
アプリケーションベースに置いてやれば読めるんでね?
561 :
557 :2006/01/10(火) 21:48:14
もう少し詳しく言うと、 RPC (Remote Procedure Call) のサーバープログラムを作って、 そのときサーバーの構成を構成ファイルに定義するのだが、 単体のときはうまく読めてサーバープログラムとして機能するのだが、 それをそのままウィンドウズサービスに乗せると、 サービス開始時に、構成ファイルを読み込むところで ファイルが存在しないという例外になってしまう。 構成ファイルに記述せず、 直接ソースプログラムに書き込めば問題ないのだが。
そのときの作業フォルダはどうなってるんだ?
563 :
557 :2006/01/10(火) 22:03:48
Visual Studio 2003 でつくった状態では ¥プロジェクト¥app.conf ¥プロジェクト¥bin¥Release¥実行ファイル というかたち。 これを installutil というプログラムでサービスにインストールする。 ありゃ? どこへ? このとき、構成ファイルは無視されるのかな?
564 :
552 :2006/01/10(火) 22:06:20
ウィンドウズサービスに乗せるって?
>>563 そこで通常は実行ファイルと同じディレクトリに、実行ファイル.conf(だったっけ?)
が自動的に作成されるはず。
そいつを、 installutilで実行ファイルをインストールした先にもコピーすれば良いような気がする。
567 :
557 :2006/01/10(火) 22:23:28
Visual Studio 2003 で 新しいプロジェクトの開始でウィンドウズサービスを選択して そこへ元のプログラムを若干の改造をしたうえで組み込む。 構成ファイルを使わずソースプログラムに直接書き込んだ場合は ちゃんと動いてくれるのだが。
568 :
557 :2006/01/10(火) 22:24:40
> 566 ありがと。試してみる。
569 :
デフォルトの名無しさん :2006/01/10(火) 23:43:50
はじめまして!!c#について質問させてください。 私の家のパソコンにはC#のVisual Studio Net 2003がインストールされています。 ここで、プログラムを作って完成させたんですが・・・よく考えてみると大学では、 C#2005だったと思うんです。できたら、家だ作ったプログラムをコピーして大学 の授業でも使いたいと思っているんですが・・・この2つには互換性はあるのでしょうか? どなたか知っている方おられませんか??
2005が入ってる大学……早いな 一応上位互換性/下位互換性はある .NET 1.1が無くて.NET 2.0が入ってる環境では.NET 1.1のアセンブリも.NET 2.0で動く ただしそれは完全な互換性を保証するものではない ソースを使いまわす方向じゃ駄目なのか?
VS のソリューションとかの互換性の話?
2003 → 2005は OK。
逆は無理。
>>570 いまどき、MSDNAA 入れば割と VS 入れたい放題だからねぇ。
573 :
デフォルトの名無しさん :2006/01/11(水) 00:01:35
>570 情報ありがとうございます!! ソースを使い回す方向というのは・・・どういうことを意味するのですか? 私がやりたいと思っていることは、SDカードに完成したプログラミングを 保存して、大学のパソコンへ入れる。そして、そのソースプログラムをコピーし、 そのまま、c#2005のプロジェクトに貼り付けをして実行してみたいと思っているんです。 説明の仕方がわかりにくくてすいません。
プログラミングを完成させたのか……。そいつは驚きだ。
なんで? 俺それ.NET 2.0でコンパイルして使えたぞ? 何の問題?
作者は2002だから、配布されているのは1.0でコンパイルされたバイナリ。 1.0をインストールしてない人は、2.0をインストールすると2.0で動こうとするわけだが、 1.0でコンパイルされたtwintailは2.0では挙動がおかしいらしい。
twintail2使ってるが…作者さん大変だな
なるほそ
580 :
デフォルトの名無しさん :2006/01/11(水) 00:34:29
みなさん、c#について、質問させてください。 グラフィックなどのプログラムを作成するときすべて削除したいときには、 g.Clearという言語を用いますが・・・一つ前の作業だけを削除したいときなどは どんなプログラミング言語を使えば良いのでしょうか??
でも2005でビルドすればいいのでは? 2005ベータ2で試したときはたいした変更いらなかったぞ? まぁたいした機能も使ってなかったが。
だれか 580の ほんやく たのむ
むりだろ
やっぱり、明日大学の教授に質問します。 ここでは上手く説明できないので・・・。
>>580 最後の一行はノイズだ。削除して考える。
つまり『元に戻す』だろ? 今何描いているか、最後に何を追加したか憶えておけばいいよ。
スレタイの♯ってどうやって入力してるの? 自分がやると#か#になるんだけど・・・
しゃーぷ
できた、ありがとう。 じゃあ これは何? →#ぁ 3 あ
再変換してろこのピザ
なんばー
♯と#にそんな違いがあったのか知らんかったorz
>>589 フヒヒすみません
C#の#はナンバーだがナンバーは通常のキーボードでの入力は困難なため ナンバーと表記するがシャープと読むことになっている 2chの仕様でスレタイには#が使えないから全角シャープで代用しているんだろうけど 全角の場合でもナンバーで書いておいたほうが正しいような気がする 全半角一致検索では全角ナンバーは#で引っ掛からない不便さもあるし
いや、C♯は普通に「しーしゃーぷ」だぞ? 半角の♯が無いからshift+3で打てる#で代用してるだけで
今日はじめてRemoting触ってみた。 これすごいいいハァハァ。
複数のコントロールに関連付けされているContextMenuStripのイベントが、 どのコントロールから呼び出されているかを調べるにはどうすればいいのでしょうか?
sender
>>596 んースピードとかはかってないけど、プロセス間通信でオブジェクトの呼び出しや受け渡しがほぼ自分のイメージに近いまま、ライブラリ作るのと同じような感覚でできる。
SourceControl のが自然じゃね?
>>598 重ね重ねすいません、
ContextMenuStripの親を取得できる様なプロパティ・メソッドを教えて欲しいのです
うわごめんなさい、自分に対してだとは思わなかった
>>600 の方法で何とかなりそうです、ご迷惑おかけしました
全角使ってたのは 2ch のスレタイって # が使えない為だったのか…… 2ch検索で幾ら検索しても見付からなくて、 C# 初めて数ヶ月間、C# 系のスレに辿り付けずに VS のスレだけ見てた俺ガイル orz
.この話も散々既出だが、NET関係のMSのネーミングは Googleへの嫌がらせじゃねぇかというぐらい検索しづらいよな。
C や C++ と大差ないだろ
おまいら、愛してるぜ!!!!
デジカメ繋いだら自動で画像をコピーしたいんだけどなんかいい方法ありますか?
私のことどれぐらい好きか、金額で言ってみて!
C#と直接関係ないんだが、XPにしたらスレッドのスケジューリング変わってるのか複数プロセス立ち上げてデバッグしてるとプロセスが固まってく・・・ 反応なしとか多発。とりあえず視覚効果ほとんどきってみた。解消願う。
>>599 リモーティング普通に使ってる分にはいいけど、例外処理がちょっとつらくないですか?
ところで
Remotingで自分自身が一つのリモーティングオブジェクトを使ったリモーティングサーバかつ
クライアントな一つの構成ファイルって作れますか?
↓のように記述したんですがダメでした。
<configuration><system.runtime.remoting><application>
<service>
<wellknown mode="Singleton" type="RemotingObject,RemotingTest" objectUri="ServerObject"/>
</service>
<client>
<wellknown type="RemotingObject,RemotingTest" url="ipc://IpcServerXX/ServerObject" />
</client>
<channels>
<channel ref="ipc" portName="IpcServerXX"/>
</channels>
</application></system.runtime.remoting></configuration>
特定のマシンでしか実行出来ないソフトを遠隔地から実行したいのですが、 つまりリモートで別のマシン上でソフトを起動するプログラムを作成したいのですが、 なにかいい方法はないでしょうか? 可能で有れば情報をご教示下さい。
telnet でも使えばいいじゃん
>>613 今私はまさに、そういうプログラムを動かしました。
bbs.cgiという名のプログラムを。
クライアント用チャネルも要るとか
XPのリモートデスクトップ
618 :
デフォルトの名無しさん :2006/01/13(金) 00:21:15
スレ違いかも知れませんが、C#でJavaの「Effective Java」とかC++の「Effective C++」みたいな 中級者向け(?)のノウハウ本みたいな書籍ってありますか? 文法とか機能中心ではなく、C#ならではのテクニック集みたいな書籍が欲しいのですが・・・。
C#自体は文法ぐらいしか規定しとらんからのう
というか読んでないがEffective C#ってそもそもあるだろ。見た気がするぞ。
622 :
465 :2006/01/13(金) 09:31:15
>>465 ですが、どなたかわかる方いませんか?
現在 XmlSerializer でXMLファイルに保存しているんですが、
new XmlSerializer(typeof(Hoge)) がやたら時間がかかってしまいます。
というわけで ConfigurationSectionでシリアライズをしたいのですが・・・
こちらは
>>465 のようにコレクションをシリアライズする方法がわからなくて
困っています。
ConfigurationElementCollectionクラスの例に従って、サブクラスを定義してやればいいんじゃないかな。 ArrayListをそのまま保存なんてXmlSerialierでもそのままではできないので無理があるのでは・・ >ApplicationSettingsBaseを継承する方法では普通にシリアライズできているんですが、 普通にユーザスコープにArrayListなんて保存できたの? 自分は無理だったわけですが・・ new XmlSerializer(typeof(Hoge))は遅いけど、初回だけなのでとりあえず、我慢して使ってます。将来的にSgen使う予定 VSで自動的にsgenでシリアライズ用のアセンブリはいてくれればいいのに・・・ System.Configure.*空間の作法に従って実装したほうがいいのかなぁ
624 :
618 :2006/01/13(金) 23:44:39
>>621 情報ありがとうございます。
でも洋書なんすね・・・・・。
ヘタレ専門卒PGの俺には敷居が高いっす・・・。
和書でなんかいい本、知りません??
そもそも出てないのかなぁ。
AutoCompleteStringCollection をstatic classで持ったら COM例外ではまった…… なんでだろ?
626 :
465 :2006/01/14(土) 02:20:00
>>623 レスありがとうございます。
>ArrayListをそのまま保存なんてXmlSerialierでもそのままではできないので無理があるのでは・・
>>ApplicationSettingsBaseを継承する方法では普通にシリアライズできているんですが、
>普通にユーザスコープにArrayListなんて保存できたの?
>自分は無理だったわけですが・・
あれ、そうですか?
こっちではいずれの方法も特別なことをせずに保存できています。
>ConfigurationElementCollectionクラスの例に従って、サブクラスを定義してやればいいんじゃないかな。
情報どうもありがとうございます。
ちょっと勉強してみます。
628 :
初心者 :2006/01/14(土) 09:30:41
特定の文字列を基にパスワード文字列を作成するツールを作っております。 文字列からパスワード文字列を作成する手順としては、 テキストボックスにテキスト入力 ↓ そのテキストを System.Text.Encoding.Unicode.GetBytes でバイト列に変換 ↓ そのバイト列を MD5 の ComputeHash の引数にしてハッシュ ↓ ハッシュコードを int 型に収まるように加工する ↓ それをシードにして Random 型のインスタンスを生成 ↓ その擬似乱数を基に、指定された条件(大文字、小文字、数字、記号、文字数)に従って文字列作成 ↓ ウマー ってな感じです。 ここで問題となるのは、ハッシュコードを int 型に収まるように加工する部分です。 せっかく MD5 で 128bit もの一意な値を取得しているのに、 Random のシードにするために 32bit にサイズを落とさなければならない訳です。 32bit ってことは、最大でも約 43 億通りのシードしか用意できないことになります。 すると、文字数などの条件によってもある程度は変わってくると思いますが、 何百兆回とか何千兆回とか総当りすれば、あっさりと破られてしまうことになります。 そこで質問なんですが、Random と同じ効果の得られて、 long 型の値をシードにできるクラスとかメソッドとかってないですかね? シードが long 型になれば、最大通り数も天文学的な数値にまで跳ね上がります。 そうなれば、よほどのことがなければ破られない強固なパスワード文字列が生成できます。 すばらしいと思いませんか?
629 :
デフォルトの名無しさん :2006/01/14(土) 09:48:20
ある文字列がURLであるのか否かを判断するにはどうしたら良い?
>>628 確かにそれじゃ、MD5やらなにやらでシードにするまでが意味ないぽ
あんまりInput関係ないし
じゃ、32Bit*4で
ランダム4個作って何とかする
r1.Next() ^ r2.Next() ^ r3.Next() ^ r4.Next()みたいな
どういった目的で入力を基にしてるのかと
入力キーさえわかれば 総当りで可能なオーダでパスワードを作成してくれるとか?
>>629 つ正規表現 もしくは Uriクラス
Convert.ToBase64String
>>628 入力を基にすることにどういう意味があるわけ?
634 :
初心者 :2006/01/14(土) 11:02:58
レスありがとうございます。
参考になりました。
>>633 ヒント:パスワードを忘れても(ry
MD5は既に時代遅れです
で、MD5のなにがダメでいまどきは何なのよ?
MD5の強衝突耐性が破られたってニュースは最近のものだがチェックしてなかったのか。 この場合の用途なら余り関係はないだろうけど。 代替品はSHAの256ビット以上とかそんなの。
どういう用途なんだ? サーバアプリなら、キーつきのハッシュをそのまま乱数代わりに使えばよくない?
640 :
デフォルトの名無しさん :2006/01/14(土) 12:58:02
マシン単位で、そのマシンでしか有効でないような処理を行いたいのですが システムのSIDを取得する方法はどうすればよいでしょうか?
SIDはローカルでしか通用しないような
メルセンヌ・ツイスターの移植とかなかったっけ? あれってシードでかく指定できなかったかな?
MTはシードにintを4つ指定できたはず ちなみに移植は超簡単にできた Random から派生させてオーバーライドするのがおしゃれかな
>>624 Essential.NETとかどうなの?
ありゃC#の本じゃないだろ…
プライマーはどうなんかな? またちょっと系統が違うか…
647 :
デフォルトの名無しさん :2006/01/14(土) 22:22:46
ペンやブラシってPaintイベントが来る度に生成/破棄繰り返した方がいいんでしょうか。 それともプログラム開始時に作っておく方が効率いいんでしょうか。 ちなみにペン/ブラシの数は20個くらいです。
649 :
デフォルトの名無しさん :2006/01/14(土) 23:12:36
質問の仕方間違えました。 効率だけ考えたらプログラム開始時に作った方がいいと思います。 でもソースの見た目的には生成/破棄繰り返した方がメンバ変数が減っていいんですね。 それとGDIオブジェクトを一つのプログラムがたくさん保持ってるのって行儀悪いのかなとか。 その変のトレードオフ考えてどっちがいいんでしょうかってことです。
650 :
640 :2006/01/14(土) 23:31:20
>>641 ローカルでしか通用しなくていいんです。
インストールしたフォルダから特定のデータファイルを異なるマシンに移動したときに
そのまま簡単には使えないようにする。という目的なので
structでまとめちゃえば・・・
>>649 20個くらいならどっちでもいいんでね?
桁が1つ大きくなったら考えるけど
>>649 俺だったら楽なほうにする。その程度の高速化は誰の役にも立たない。
C#(1.1でも2.0でもいいです)で、JavaScriptの WScript.CreateObject("InternetExplorer.Application"); みたいな事がしたいです。 具体的には、JavaScriptであるURLにアクセスして、ボタン等を自動的に 押すという内容なのですが、CPU使用率が100%行ってしまい、重くて他の 事をするのが困難で(Athlon X2使えって話は無しの方向で)困っています。 IE.Document.forms を C#で書くとどのようになるのでしょうか。具体的な 例を示してある書籍やサイトがありましたら、ご紹介いただければ幸いです。
そのスクリプトがうんこなだけ。
なにで書こうが大して変わらんよ。 まあ言葉は悪いが855の言う通りなんだろう。
>>655 回線状態が悪い所で使う事もあり、ウェイトルーチンを入れてあるの
ですが、それがCPUを食っているのです。
JavaScriptにはSleepがないので (new Date()).getTime() を使って、
ループさせています。Win32のSleep()が呼び出せれば軽く出来るんですが・・・・
WSHならWScript.Sleepとかあるし。
う〜ん。 C#にAxWebBrowserというクラスがあるのを発見しましたので、 これをちょっといじくり回してみたいと思います。 WSHも調べてみます。ありがとうございました。
ToolStripDropDownで動的メニューを作ってるんですが、 menuitemのVisibleをfalseにしたりしてアイテムの数が減ると キーボードで操作したときにスクロールしてしまう現象に悩まされています。 具体的には一番上や、一番下まで行くと表示してないメニューを 表示しようとしてるみたいにスクロールしてしまい、 表示してるメニューが流れていってしまいます。 何か解決法はないでしょうか?
662 :
デフォルトの名無しさん :2006/01/15(日) 12:04:59
663 :
デフォルトの名無しさん :2006/01/15(日) 13:03:20
超初心者ですみません。 C#で入力した年月のカレンダーを表示させたいと思います。 どのように作成したらよいのか、さっぱり検討がつきません。 アドバイスお願いします。
カレンダー用のコントロールがあるじゃん
665 :
デフォルトの名無しさん :2006/01/15(日) 13:11:49
記入不足で、すみません。 Calendarコントロールを使わずに表示させたいのです。 いい方法があれば、宜しくお願いします。
そんじゃあ cal くらい自分で作れよ 折れんとこじゃ学部の演習でやったぞ
ラベル:年月 1234567 891011121314 15161718192021 22232425262728 293031 これでええやん
>折れんとこじゃ学部の演習でやったぞ よく分からんいきりっぷりだなw
669 :
660 :2006/01/15(日) 13:59:01
>>662 ありがとうございます。実はそれも見つけて、あの後格闘していました。
お陰で目覚めるとこんな時間に('A`)
で、INPUTにTEXTを代入する方法はわかりました(InnerText)が、
SELECT〜OPTIONタグに値を代入する方法がわからなくて四苦八苦
しています。
JavaScriptなら、INPUTと同じようにvalueを代入するだけで良かった
のですが、C#だとなぜか空白になってしまいます。
HtmlDocumentとFORM上の部品との関係を詳しく説明してある
サイトか書籍があればぜひ紹介してください。書籍は、まだまだC#2.0が
新しい事もあり、あまり出ていないようです・・・・・
「document.forms」でぐぐれ
C#で○○を継承したクラス型のリストが欲しいのですが、 どういった方法がありますか? 継承したクラスの静的コンストラクタで型を登録しようにも そのクラスをnewするなどしないと、コンストラクタ自身が呼ばれません。 リフレクションなどでうまく処理できますか?
基本的に無理。基底クラスは派生クラスを知らない。 AppDomain.GetAssembliesでGetTypesして一つずつチェックしていくにしても、 そのときまでにアセンブリが読み込まれていないものについては対処できないし。
>>672 ども〜。基本的には無理なのですかorz
無理矢理な解決方法を探すことにします。
参考資料が見つけられ無いのですが、
クラス情報がアセンブリに読み込まれるタイミングや条件は分かりますか?
>>673 > クラス情報がアセンブリに読み込まれるタイミングや条件は分かりますか?
これは意味不明だな。
AppDomain.GetAssembliesを呼び出せば、既に読み込まれているアセンブリを返す。
Assembly.GetTypesはそのアセンブリに含まれる型情報を全て返す。
つまりいつアセンブリが読み込まれるかが問題。
実際にいつ読み込まれるかと言うと、普通は
現在読み込まれて無いアセンブリに存在するものを操作するメソッドをJITコンパイルするとき。
>>674 ども〜。なるほど。
対象クラス群が同一アセンブリにある場合は動くけど、
たとえばDLL化なんかで外部に出すと動かなくなる可能性があると。
ということは、対象クラス群とそれらの型リストを操作するクラスを同一アセンブリに置けば、
問題は無いのですか?
例えば構成ファイルに対象のアセンブリのリストを設定出来るようにするとか、 特定のサブディレクトリにあるDLLは強制的にロードして調査対象にするとか、 とにかく、何らかのルールを決めてやるしかないと思う。
同一のアセンブリにしてしまうのが問題ないのなら それが楽だろうね。
>>672 >>674 >>676 >>677 実はAssembly.GetTypesの存在を知らなかったので、それだけでも大きな収穫でした。
操作リストと対象クラス群は確実に同一アセンブリ上にあるのでどうにかなりそうです。
ありがとうございました。
>>674 AppDomain.AssemblyLoadイベント
680 :
649 :2006/01/15(日) 22:58:52
681 :
デフォルトの名無しさん :2006/01/16(月) 00:44:56
3.0はいつから使えるようになるんだい?
2007か2008ってとこじゃね
684 :
660 :2006/01/16(月) 12:22:55
>>681 ありがとうございます。
早速見てみましたが、肝心のSELECT〜OPTIONへの値の代入方法が
書かれていませんでした。
INPUTは既にうまく行っているので、リストボックスの選択を自動にやらせる
方法が知りたいのですが・・・・
あちこちのサイトも必死に見ています。
ListView.Items.Clear()を間違えてListView.Clear()にしていて Columnまで消えてしまい、その原因が分からず2時間も無駄にしました。 明らかにListView.Clear()は地雷です。本当にありがとうございました。
その気持ちは分かる
687 :
デフォルトの名無しさん :2006/01/17(火) 01:00:18
VS2003で書いたHTMLをたたくコードを 開発環境(WinXP Pro SP2 office2003)では問題なく実行できたのですが、 別の環境(WinXP Pro SP2 officeなし)では System.IO.FileNotFoundException: File or assembly name Microsoft.mshtml, or one of its dependencies, was not found. File name: "Microsoft.mshtml" のエラーでとまってしまいます。 mshtmlってどこで追加すればいいんでしょうか?
参照を追加 COM
>>688 それって開発時の話ですよね?
それは追加してあるから、開発マシンではrelease buildの実行ファイル直接指定してもエラーは出ません。
他のマシンで"Microsoft.mshtml" が見つからなくて困ってるのですが。
InteropHoge.dllを持っていかないと駄目なんじゃ?
AxInterop.SHDocVw.dll
Interop.SHDocVw.dll
ってReleaseフォルダにあったのでフォルダごとコピーしたのですが、
>>687 のエラーメッセージで困ってます。
.net framework2入れてみたけど当然のようにエラーは変わらずでした。
GAC
C:\Program Files\Microsoft.NET\Primary Interop Assemblies\ あたりに転がってないか? 確かこれは「SDKが」GACに突っ込むから、SDK入れてない人は参照できないんだよね……いやそもそも無いんだったっけか .NET 2.0でもSDKオンリーなのかな
mshtml.dllは最初からは入ってない。 twintailをみてみろ。一緒に配布してる。 .NET 2.0ならManaged WebBrowserがあるからそっちを使え。
昔はMSHTMLを使ったらdllが吐き出されたけど 2005の製品版にしたら吐き出されなくなったな 同じプロジェクトファイルなのに意味不明
Webページ側にポートスキャンがあって 特定のポートを開けてないと開けないようなページがあって WebRequest.GetResponse().GetResponseStream()で取得しても 403エラーを返されるんですがどうすればいいでしょうか? WebBrowserで開くとちゃんと返してくれるので、別の取得の仕方をすればいけるとおもうのですが・・・
状況が分からん
やり取りの詳細を見ないと何とも言えないが、 素直にTcpClientとかSocketとか使ってきっちりブラウザでのやり取りをシミュレートすれば? ネットワーク絡みのはまずパケットキャプチャ使えば便利。
パケットキャプチャですか。 よく分かりませんが色々調べてみます。 それで分からなければまたよろしくお願いします。
FileInfo fi = new FileInfo(file); FileAttributes fa = fi.Attributes | FileAttributes.Compressed; fi.Attributes = fa; こんな感じのコードなんですが、ファイルが圧縮されません。 CompressedではなくReadOnlyだときちんと読み取り専用になります。 また、Explorer上でファイルのプロパティをいじれば圧縮されます。 なぜでしょうか? .NET Framework 2.0です。
701 :
700 :2006/01/17(火) 22:20:04
>>701 こんなおっかねーものいじくりたくねえだ
703 :
700 :2006/01/17(火) 23:56:47
>>702 自分だってやりたくないですよ・・・
でも圧縮できないとなると計画が全てパーなんで;;;
んでなんとか出来ました。.NETのクラスライブラリのリファレンスに、
「Compressedは読み取り専用です」なんてどこにも書いてないよなあ。
これはひどい。
704 :
696 :2006/01/17(火) 23:59:18
ブラウザのパケット見てヘッダーを加えていったら UserAgentにMozilla/4.0 () を設定してみたら返してくれるようになりました。 つかれた(;´Д`)
>>703 SetAttributesでCompress指定したら、圧縮属性は付くよ。圧縮されないだけで。
VS2005で、ビルドの構成のCPUについてなんですが ふつうに32bitOSで使うときAny CPU とx86ってどっち使ってます? なんか字面からするとx86のほうが最適化できるような気がするんですが
>>706 最適化には無関係なのでAnyCPUを使え。
CPU固定は、参照してるライブラリの制限とかその他の理由でCPUを限定したいときにだけ使う。
708 :
700 :2006/01/18(水) 09:07:31
>>705 string path = @"c:\適当なファイル.txt";
FileAttributes fa = File.GetAttributes(path);
Console.WriteLine(fa);
fa |= FileAttributes.Compressed;
File.SetAttributes(path, fa);
Console.WriteLine(fa);
Console.WriteLine(File.GetAttributes(path));
出力された文字列
Archive, NotContentIndexed
Archive, Compressed, NotContentIndexed
Archive, NotContentIndexed
付いてないようです。
今日VS2005インストールして、C#2.0使ったんだが、反復子便利だねえ
yield か? 俺に言わせりゃゴミ機能
実際のとこ、この機能は使うもんかな? 色々な面をひっくるめて考えて。 まあ、単純に機能としては便利かも知れんが。
yieldむっちゃ便利ですが?
今のところyield使う場面には遭遇してないが、なんとなく使ってみたい。
yieldは何よりMSがほしかったんでは? ライブラリ作るのめんどくせー とか
yieldないと確かにGetEnumratorとか実装する気にならんな。
Windows Forms のButtonに絵を出したいとき、2003だと視覚テーマを 無効にしないと出せませんが、(FlatStyleをSystemにすると絵が出ない) 2005だとどうなってますか? ちょっと手元に2005がないもので。
マイクロスレッド的に使つかえんかなと妄想中>yield
「あるテキストボックスがnullか空の時・・・」というif文を書くとき、 if ((this.txtTEST.TEXT == null) || (this.txtTEST.TEXT == "")){・・・} と書いたんですが、たとえばVB(VBA)ではnz関数というのがあるので if nz(Me.txtTEST,"") = "" Then と、nullの時も空文字列の時も判別出来たのですが、 このnz関数のようなものはありますか? また、上のように書くのはC#的には正しいのでしょうか?
2.0からあったはずだけど忘れたw ↓
string.IsNullOrEmpty
723 :
デフォルトの名無しさん :2006/01/18(水) 18:00:46
VS2003と.NetFramework1.1でWebアプリを作っています。 ユーザーが半角数字で生年月日を入力したものをDateTimeに入れるにはどうすれば良いんでしょうか? 現状ではテキストボックスを年(y)、月(m)、日(d)の3つを用意して int year=Convert.ToInt32(y); int month=Convert.ToInt32(m); int day=Convert.ToInt32(d); DateTime dt = new DateTime(year,month,day) int year = dt.Year; と言うような形で取得しているのですが、国が変わった時にもこのやり方でランタイムエラーを 出すことなく値を取得する事が出来るのでしょうか? リファレンスを読むんだのですがグローバリゼーションの所がイマイチ理解出来ずにいます。
>>723 大丈夫。
国(カルチャ)が関係するのって、 "2006年2月29日"みたいな文字列を
DateTime.Parseメソッドとかに渡す場合。
>>724 回答、ありがとうございます。
これで気兼ねなく次のコーディングに進めます。
.NET 2.0になってEventHandlerジェネリックデリゲートが出来たことで、 もしかして今まで○○EventHandlerってデリゲートが大量に存在するのはもう不必要?
今後は新たに 〜〜EventHandler を定義することはないだろうね
728 :
720 :2006/01/18(水) 23:50:30
>>721 ,722
ありがとうございました。
ちゃんとバージョンも書かないといけなかったですね。
まあ、それほど手間が掛かるってわけではないのですが、スマートな書き方
があればそっちの方がいいかなと思って質問しました。
729 :
デフォルトの名無しさん :2006/01/19(木) 00:31:29 BE:122468235-
C#でWEBアプリを作成しています。 親画面から子画面を呼び出して、検索を行い値(2つ)を親画面に 戻すんですが、親に値をどのようにして渡せばいいのか分からず困ってます。 んで条件もあって親画面は開いたままで、リロード処理を行わない方法で子より値を渡さないといけないんです。 それでいろいろ調べた結果javascriptの、window.opener.document.Form1.〜〜〜を 使えばいいのかと考え、無理やりopenerを2つ並べて試したりしたんですけど、 上手くできません。 どなたか解決策を教えてください。よろしくです。
質問です。 ユーザーコントロールで、フォームにコントロールを配置する時だけ 実行したい処理があるときはどうしたらいいのでしょうか? UserControlのForm_Load時に設定すると、実行時にも呼び出されてしまうので 困っています。 やりたいことは、スイッチのON・OFFを表現するプログラムで、 Flg = true ; //スイッチをオンにする をコントロール貼り付け時に呼び出し、 プロパティSwitchFlg = trueにするように作りたいのです。 環境は VS2003です。 どうか、よろしくお願いします。
>>730 プロパティ定義の頭に
[DefaultValueAttribute(true)]
流れを読まずに申し訳ないけど無いけど相談に乗っておくれ その間にこのスレだけはROMっとくので 今度の案件でC#+ASP.NETを使うらしいんだ んで、なにを覚えておけばいいやらわからないんで アドバイスや気をつけておくべきことは無いものだろうか まわりに環境無いんで触って見ようにも触れないんだわ 挫折しそうなポイントとかあれば先につぶしておきたい とりあえず本買って読むぐらいしかないかねぇ 前提: C#はこれまで触ったことがない、ASPも同様 VBは高校からWEBとヘルプだけでやってきた 趣味でVB使ってゲーム作ったりしてたときはCのような組み方だといわれた (多分VBなのにコントロールほとんど使わずモジュール内だけでWinAPI使って組んでたからだろうとおもう) 専門学校でCを1週間習った、Javaを半年習った(基礎+アプレット程度) 4月で社会人2年生になる。これまでの業務経験はVB・AccessVBAばっかり ロジック組むのは割りと自身があるがオリジナリティあふれるというか世間一般でどうやってるのか知らない
windows forms のカスタムコントロールを作成しています。 コントロールがのっているコンテナ(親フォーム)の、 コントロールがのっている部分の画像を取得するには どのようにしたらよいでしょうか? いびつな形のコントロールで、親フォームの背景画像を透過させて あげる必要があり四苦八苦しています。 コントロールがのっている画像を取得し、コントロール側の透過部分と 合成して描画してあげればいいかな、と思っています。 アドバイスよろしくお願いします。
734 :
デフォルトの名無しさん :2006/01/19(木) 11:16:32
悩んでいます。。 海外仕様のサーバーに.aspxのページをあげたんですが、アクセスすると403.1エラーが出ます。 cgiやisapiなんて使わず、Javaを二行(データベースのデータ削除の確認用)使っているだけで ほかは全てC#で組んでいます。 ですがそのページにアクセスするとcgiやisapiのエラーと言った旨のエラーメッセージが 表示されます。 同じような経験をされた方はいらっしゃいませんか?
>>734 asp.net 自体がisapiで実装されてるからね。実行が許可されていないだけでは。
そのサーバーというのはそもそもasp.netはサポートしてるの?
736 :
734 :2006/01/19(木) 14:06:58
>>735 .NET自体がisapiだっだんですか。知らなかったorz
サーバー自体はASPに対応してるはずです。
順を追って説明すると
暫定版WEBアプリをサーバーの仮想ディレクトリに載せる
↓
この時点での動作はIEで確認出来た
↓
細かい改良と追加プログラムを入れて修正版を載せる
↓
同じようにIEから確認する
↓
403.1エラーが発生
という感じです。
それは普通修正した部分のバグじゃないの?
738 :
734 :2006/01/19(木) 15:13:56
>>737 LOCALHOST上でVS2003でデバッグすると動作したんですが、サーバーにあげると
出るバグってあるんですかorz
捜してるんですが見つからない。。
MSDNにもそういった記述が無いようなのですがサーバー上で起こるバグを発見する
デバッグのテクニックと言うのはないんでしょうか?
>>738 ASPよくしらんがファイルに書き込めるんだったら、普通にファイルにどこまで進んだかとか書いてデバッグするがよろし。
ありがとうございます。無事動きました。
あ、↑は730です(汗)
>>738 そういう現象のときはたいてい権限周り。
744 :
734 :2006/01/19(木) 19:04:20
なんとか403.1エラーは消えました。 結果から言うと、仮想ディレクトリの権限の設定でした。 自分で修正したのではない為、理解できていませんがorz 貴重な時間をさいて知恵を貸してくださった方々ありがとうございます。
745 :
734 :2006/01/19(木) 19:17:03
やっと見えたので報告です。 仮想ディレクトリを最初に作成した時は実行アクセス許可をしていたのですが Webアプリを作成していく間に、いつの間にか実行アクセス許可が[なし]に切り替わっていた 事が原因でした。 仮想ディレクトリは全く触っていないのに設定が変わったのは謎ですが。。 403.1エラーが出たときは一番に実行アクセス許可を疑うと。 覚え書きもかねて書き込んでおきます。
2.0で新しく追加されたTextBox等のAutoCompleteなんですが、 これに別インスタンスからアクセスすると例外を出すかフリーズしてしまいます。 そういうものなのでしょうか?
747 :
デフォルトの名無しさん :2006/01/19(木) 23:01:24
>>732 とりあえずオブジェクト指向について猛勉強しろよっと
> 2.0で新しく追加されたTextBox等のAutoCompleteなんですが、 > これに別インスタンスからアクセスすると例外を出すかフリーズしてしまいます。 普通は別インスタンスからアクセスするものだと思うんだがよ?
つsealed
>>747 thx
そうだなぁ、確かにJavaでちょろっと習ったくらいで
概念は理解してても実装段階で何をしたらそこから外れてしまうだとか
どういう方法が推奨されてるだとかはまったく知らないからな・・・
OK、そっちから攻めてみることにするよ
>>746 別にハングも例外も出てないけどどんなケースで出てるんだ?
「別インスタンス」の言葉の使い方を間違ってる可能性が高いがエスパー伊藤で予想すると。
1.IDEのデザイナではなく実行時に設定している。
2.さらにTextBoxをpublicにしてフォームの外から設定している。
3.他のスレッドから設定している。
4.他のプロセスからPostMessegeで文字を送っている。
1と2は問題ない。3だったらハングする。4はしらん。
>>751 どうも。言葉の使い方間違っててすみません。
他スレッドからアクセスしてました。
それとは別に、アプリから別exeを起動した後のProcess.Exitedイベント
ハンドラでアクセスするとハングor例外。
これもやっぱり
>3.他のスレッドから設定している。
に該当するんですか?
InvokeRequired 見ろ
もしくはProcessクラスならSynchronizingObjectを設定
755 :
デフォルトの名無しさん :2006/01/20(金) 16:40:33
自動でウェブにアクセスして情報収集するアプリ作ってるのですが、 webBrowserで画像は読み込まないようにする方法ありませんか? ヘルプ読んでもググっても情報見当たらないのですが。
情報収集のオートメーションにWebBrowserコントロール使うのがまずどうかと思う
まあ普通はwebclient等で取ってきてregexで抜き出すわな
758 :
デフォルトの名無しさん :2006/01/20(金) 20:04:02
>>756 ,
>>758 レスありがとうございます。
やっぱり駄目ですか。
webBrowserだとログインとか楽なんでこれでいけないかと思ったんですが。
>>758 自分でいっといてなんだけど IInternetSecurityManager 使えばできるかもしれん
760 :
デフォルトの名無しさん :2006/01/20(金) 22:04:32
tcpChannelでリモート処理を使っているのですが、 リスニングするアドレスを127.0.0.1に限定することはできますか? 現在の設定は下記のとおりです。 <configuration> <system.runtime.remoting> <application> <service> <wellknown type="testpgm1.func1Service, testpgm1" objectUri="func1Service.rem" mode="SingleCall" /> </service> <channels> <channel ref="tcp" port="14481"/> </channels> </application> </system.runtime.remoting> </configuration>
今、それぞれの階層に別の意味を持つデータ構造のものを作ろうとしてます。 (DataSet→DataTable→DataRowみたいな感じ) またそれぞれの階層で変更があった場合にイベントで通知するつもりです。 この場合C# 2としてはどのように実装するのが美しいのでしょうか? 例)CollectionBase継承、IList実装+List<T>フィールド内蔵
Mutexって、using使って自動的にClose()が呼ばれるようにした場合、ReleaseMutex()は呼ばなくてもOK?
OK。
サンキュー 実験だとOKのように見えたけどいまいち自信を持てなかったんだ
.NET以外でC#って使われないのかなあ。 .NETに対していろいろ言う人はいるけど、C#は素晴らしいと思う。 C#でネイティブアプリを作れたりするようにならないのかな。
C#よりも普及度が高いであろうJavaですら ネイティブコンパイルすることなんてあんまりないのに
C#そのものは最低限しかないから素晴らしいってほどのもんでもないなぁ .NETのライブラリがバックグラウンドに存在するからこそだと思う
しかしCodeProjectはすごいな FontのSerializeで困って行ってみたらみごとにやり方があったし。
いや、それは割りとFAQ
>>768 どうやんの?フォント名とか持っとくだけじゃだめなの?
設定ダイアログを閉じたときに設定を本体の方へ反映したいのですが プログラムの再起動以外に方法はありますか?
>>772 public struct XmlFont{
public string FontFamily;
public GraphicsUnit GraphicsUnit;
public float Size;
public FontStyle Style;
public XmlFont(Font f){ ... }
public Font ToFont(){ ... }
}
776 :
デフォルトの名無しさん :2006/01/21(土) 22:50:48
到達するはずがないと思われるコードパスに 明示するために書いておくと適当と思われる例外はなんでしょうか。 if (a < b) return -1; else if (b < a) return 1; else if (a == b) return 0; という風に書くとエラーになるんで最後に例外投げることにしようと思うんですが。 # 最後のelse if節は敢えてelseにはしてません。
俺ルールだと a や b が引数ならば ArgumentException フィールドならば InvalidOperationException
Debug.Assert(false); も良いかも
みんな意外と色々知ってるな
780 :
776 :2006/01/21(土) 23:19:51
ありがとうございます。
>>777 ここを通ったら環境云々以前にまず例外発生場所のロジックを疑えというようなニュアンスが欲しいんですよ。
>>778 コードの主張としてはそういうことなんですが、
コンパイルエラー「値を返さないコードパスがあります。」
を通すという意図がありまして、単なる関数呼び出しではなく例外スローにしたいのです。
781 :
デフォルトの名無しさん :2006/01/21(土) 23:31:25
ApplicationException
InvalidProgramExceptionとか、WarningExceptionとかどうかな
普通に Exception でいいんじゃね デザイナでコントロールをダブルクリックして作成されるイベントハンドラは throw new Exception("This method is not implimented"); とかじゃなかったっけ
UnExpectedPathExceptionとか?
これって前からそう?
何かで、ユーザー独自の例外はApplicationExceptionを使えって習ったんだけど。。。
System.ApplicationException をスローしたり、System.ApplicationException から派生したりしないでください。
http://msdn2.microsoft.com/ja-jp/ms229007.aspx ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/dv_fxdesignguide/html/ab22ce03-78f9-4dca-8824-c7ed3bdccc27.htm
ApplicationException からカスタム例外を派生させることは推奨されていない
http://msdn2.microsoft.com/ja-jp/ms229064 (ja-jp,VS.80).aspx
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/dv_fxdesignguide/html/eede32ea-1fe9-4a9b-a70a-749840b92e26.htm
2.0で方針転換。 それまで例外に対する議論が結構あったから、それを反映したんだろね。
ControlのInvokeメソッドに渡すデリゲートを匿名メソッドにしたいんですが、うまくいきません。 this.Invoke(delegate() { MessageBox.Show("test"); }); コンパイルすると、 エラー 2 'System.Windows.Forms.Control.Invoke(System.Delegate)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 エラー 3 引数 '1': '匿名メソッド' から 'System.Delegate' に変換できません。 となってしまいます。 System.Delegateはdelegate型ではないのでダメってことですかね? これが出来ないとかなり面倒くさいなあ。
>>773 ダイアログのクラスをDisposeする前にメンバにアクセス
789 :
776 :2006/01/22(日) 00:08:53
んー、なんかしっくりくるのがないので、派生定義することにします。
アプリレベルでないものはできるだけ共通言語を使いたいんですけどね。
>>783 >>785 >System.Exception や System.SystemException はスローしないでください。
VSが非推奨コードを吐くのってどうなんでしょうね・・・
>>787 Delegateは抽象型だから、具体的にどんなデリゲートを作ればいいのかコンパイラが判断できない。
this.Invoke(new ThreadStart(delegate {
MessageBox.Show("test");
}));
とかいう風に明示すればよし。確かにちょっとコーディングは長くなるが。
俺も思った。 throw new Exception("This method is not implimented"); じゃなくて NotSupportedExceptionにしときゃいいのにねえ。
>>787 ThreadStartでもnewしてその引数にいれとけ
>>791 > NotSupportedException
NotImplemenetedExceptionの方が妥当だな
794 :
787 :2006/01/22(日) 00:19:11
>>790 >>792 キタ━━━━━━(゚∀゚)━━━━━━ !!
てか言われて見れば当たり前ですね。。。ありがとう。
>>785 俺なんて
try{
ほげほげ
}catch{
}
なんてコードが山ほどあるぜ
>>796 カスタマイズできればいいとかいう次元の問題ではなくて
何でデフォルトでそうなのかって言うのが問題だよな
>>797-798 まあ言いたいことはわからんでもない。
そういうのはMSにフィードバックしたほうがこの先いいと思う。
.netで最も手軽にwmvなどのメディアファイルをWindows.Forms.Form内で 再生する方法は?
まずどの段階での手軽かと言うところから定義が必要だな
なんでMethodInvokerつかわねーんだよ
なんでリフレクションでメソッドとか呼ぶと、 例外の扱いが違うんだ。 勝手にラップしてんじゃねぇ。 せめて情報を減らさずに元に戻せる方法を…
804 :
デフォルトの名無しさん :2006/01/22(日) 13:06:36
>>795 俺も良く使うわそれ・・・
もしくはエラーログだけ投げておくとかで
805 :
760 :2006/01/22(日) 13:14:27
TcpChannelでは見つけられなかったのですが、 .NET2.0でIpcChannelというのが追加になっていてこれがローカル専用のようです。 <channel ref="ipc" portName="xxxxx"/>
>>785 うげー、まじか
ApplicationExceptionを使えとCodeZineかどこかで見た覚えが・・
ショックだ
C#の質問かどうか微妙なんですが シーク不能なストリーム(標準入力とかNetworkStreamとか)から、 複数のデータが順番に流れてきて、大体10バイト程度の区切りがそれぞれのデータの間についている。 流れてくるデータの合計サイズは巨大で予測不能で、全てをいっぺんにメモリに読み込むことは不可能。 そして、例えば3つめのデータの塊だけをファイルに保存したい。 こういう状況の場合、1バイトずつ読み取って区切りかどうかを判断しなければならないですかね?
別に読み取るのは1バイトずつじゃなくても良いが、 判断はそりゃ1バイトずつ調べにゃならんだろう。
>>808 TextReaderのReadLineメソッドを逆コンパイルみそ。
TextReaderは1文字読み取ってCRか、そしたら次の文字はLFか、を調べてる。
内部にバッファがあるからStringReaderやStreamReaderはoverrideしてるけど
811 :
デフォルトの名無しさん :2006/01/22(日) 18:34:28
ん〜結局ApplicationExceptionの代わりにどうすりゃいいのさ? 適当なExceptionから派生しろってこと?
> System.Exception または他の一般的な基本例外のいずれかから例外を派生させます。 > 「標準の例外の種類のキャッチとスロー」のガイドラインに示されているように、 > ApplicationException からカスタム例外を派生させることは推奨されていない点に注意します。
エディタによくEOFとか改行マークって表示されますよね。 あれって標準で何かありますか? それともみんな画像用意してやってるんでしょうか。
もちろん手書き。
そですか。 とりあえずWingdings等の絵文字フォントでやればいいかな。
816 :
デフォルトの名無しさん :2006/01/23(月) 11:47:07
817 :
816 :2006/01/23(月) 11:53:06
具体的に言うと、これからUSBメモリが刺さるF:\からI:\までのドライブに対して USBメモリが挿して利用可能になったかを一覧で情報が取得したいのです。
818 :
861 :2006/01/23(月) 13:09:14
なんどもすいません。 DriveInfo[] allDrives = DriveInfo.GetDrives(); Console.WriteLine(allDrives[0]); とすると、C:\ と表示される。 そこで DriveInfo[] allDrives = DriveInfo.GetDrives(); allDrives[0] = "F:\\"; Console.WriteLine(allDrives[0]); なんてしてみると、「型 'string' を型 'System.IO.DriveInfo' に暗黙的に変換できません。」 と出てしまう・・。string を System.IO.DriveInfo に型変換すればいいのだろうか。。。 これを解決するヒントをください。
普通にDriveInfoのコンストラクタ DriveInfo di = new DriveInfo( driveName ); >Console.WriteLine(allDrives[0]); これは暗黙的にToStringしてるの。
820 :
816 :2006/01/23(月) 14:02:15
>>819 ありがとうございました。コンストラクタを調べてみます。
ListViewのカラムやアイテムをCSVとしてファイルに書き出したいのですが、 foreach (ListViewItem item in listView.Items) { string[] str = 【itemのSubItemsをstring配列にしたもの】; streamWriter.WriteLine(String.Join(",", str)); } としようと思っているのですが、itemをstring[]に変換する方法がわかりません。 うまい方法や、ListView⇔CSVの常套手段があったらご教授願います (ペコリ
SubItemsをforeachで見ていけばいいだろ
823 :
821 :2006/01/23(月) 17:31:48
>>822 やはり地道が一番ですかね。。。ありがとうございました (ペコリ
824 :
720 :2006/01/23(月) 17:46:10
DataGridでデータを入力して別の行に移動するとデータが確定しますが、 それをプログラムから確定させることはできませんか? DataGridColumnStyle dgc = dataGrid.TableStyles[0].GridColumnStyles[0]; grdMain.EndEdit(dgc, this.dataGrid.CurrentCell.RowNumber, false); などとやってみたのですがうまくいきませんでした。 何をしたいかというと、KeyDownイベントを取得して、 入力された文字一文字ごとに検索をしたいと思います。 "a"が入力されたら "〜 like 'a%'"で抽出 "ab"が入力されたら "〜 like 'ab%'"で抽出 として少しずつ条件を絞っていきたいと思います。
>>824 たしか、ProcessCmdKeyメソッドをオーバーライドしてやらなければ、
DataGrid上でのKeyDownイベントは拾えなかったはず。
#甘利ちゃんと調べずに書いたので、詳細は自分で確認してくれ
826 :
デフォルトの名無しさん :2006/01/24(火) 06:29:33
>>826 ですが、ソースを貼ります。以下をコンソールアプリケーションのMainに挿入するだけです。お願いします。
IPHostEntry lipa = Dns.Resolve("localhost");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);
Socket s = new Socket(lep.Address.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
byte[] msg = Encoding.ASCII.GetBytes("This is a test");
try
{
s.SendTo(msg, 0, msg.Length, SocketFlags.None, lep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tempRemoteEP = (EndPoint)sender;
byte[] buffer = new byte[1024];
s.ReceiveFrom(buffer, 0, 100, SocketFlags.None, ref tempRemoteEP);
Console.WriteLine(" I received the following message : " +
Encoding.ASCII.GetString(buffer));
}
catch(Exception e)
{
Console.WriteLine("Exception : " + e.ToString());
}
828 :
デフォルトの名無しさん :2006/01/24(火) 07:20:42
すみません。自己解決しました。 これは自分に送って自分で受けるサンプルではなかったのですね...orz お騒がせしました。
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
>>825 ありがとうございます。
なんとかキーボードイベントを取得できました。
KeyUpイベントでデータを拾えました。
831 :
デフォルトの名無しさん :2006/01/24(火) 18:47:08
C#で作ったクラスをVB.netで継承したり、 VB.netで作ったクラスをC#で継承したりすることって可能? 例えば、C#で Hoge というクラスを作ってコンパイルする で、出来上がった Hoge.dll をVB.netで参照して利用する これができるとかなり便利なんだが・・・
可能だよ。 そうでなきゃFormの派生クラスとか作れないじゃないか。
若干の注意や制限はあるけどね。
834 :
デフォルトの名無しさん :2006/01/24(火) 19:28:01
クラス設計について質問です。 渡されたオブジェクトに対し何らかの処理をする必要があり、その処理が幾通りもあるとします。 そして、それぞれの処理は、処理を施せるオブジェクトとできないオブジェクトがあるとします。 コードにすると、感覚的には下のような感じです。(もちろんコンパイルは通りません。) ここで問題になるのは、 ・static関数をinterfaceのメンバにできない ・「型の配列」(下のコードでのtypes)を作れない の2点です。 解決方法としては、 ・staticをはずし、「型の配列」を「インスタンスの配列」にする ・staticをはずし、「型の配列」を「Type型の配列」にし、リフレクションで呼び出す の二つを思いつきましたが、それぞれ ・「各クラスごとに、意味のないインスタンスを余分に用意する必要がある」 ・「リフレクションのオーバーヘッド」+「煩雑」 という短所があります。 このようなケースをスマートに記述する方法はないでしょうか?
// 以下コード interface IProcessor { static bool CanProcess(object target); void PrepareForProcess(object target); void DoProcess(); } class ProcessorA : IProcessor { ... } class ProcessorB : IProcessor { ... } class ProcessorC : IProcessor { ... } class ProcessorManager { IProcessor[] types = { ProcessorA, ProcessorB, ProcessorC }; IProcessor GetProcessor(object target) { foreach (T in types) { if (T.CanProcess(target)) { return new T(); } } return null; } } // 以上
シングルトン new IProcesser[]{new ProcessorA(), ....}
属性を使う手もあるがイマイチこの場合にはしっくりこないなぁ……。
Processorの数が膨大でなければ、インスタンス作っとく。 ちなみにTargetとProcessはどんなものを想定してるの?場合によっちゃその設計からしなおしたほうがいいかも。
やっぱり各Processor実装にシングルトンメンバを持たせて、 型配列の代わりにシングルトンフィールドをわたす、とかかな。 シングルトンフィールドに関するコントラクトが定義できないのがいやだが、 まあ、型配列作るときにお約束にしとくしかないかな。
まあ、Processorが状態を持つようだと、 これでも無駄なインスタンスを用意することにはなるが。
>>840 シングルトンフィールド渡してターゲットを処理できるかの判定はどうすんの?
843 :
835 :2006/01/25(水) 01:15:05
>>837-842 早速のレスどうもです。
>>837 ,840
説明が不足していましたが、
PrepareForProcess で情報をメンバに格納して、DoProcess でその情報に対して処理をするといった感じなので、シングルトンでは
できない気がします。また、複数のスレッドから呼び出されないとも限らないです。
>>839 上の例とはだいぶ違いますが、実際は DoProcessとして「複数の項目をリストアップする」処理をしようと思っています。
target は、場所を表す一意の文字列(ファイルシステムのパス、書庫内の相対パスを含むパスなど)です。
PrepareForProcess で項目の配列(やリストやツリー)を用意して、DoProcess(実際はGetItemのような名前になります)で項目を取得します。
ProcessorA : ファイルシステムのファイルをリストするクラス
ProcessorB : 書庫内のファイルをリストするクラス
ProcessorC : FTPファイルをリストするクラス
:
のような感じになるかと思います。(名前は違いますが)
たしかに、これが膨大な数になることはない(せいぜい増えて10以下?)ので、インスタンスを作っておくのも
手かも知れません。
>>842 シングルトンのフィールドにはインスタンスを入れとくんだから
インスタンスメソッドにして普通に判断できるっしょ。
ただ、
>>843 で出てきた内容で使えるかは別だが。
>>843 その各Processorが状態を持たない処理だけを行うのなら、
シングルトンで十分だろ。
>>845 と決め付けるのもどうかと思うんだ。
後で状態を持った処理を行うProcesserを作りたくなるかもよ?
あ、わり。 決めつけたわけじゃないんだ、書き方が悪かった。 もし状態がいらないなら、ってだけで。 処理内容から、なんとなくいらなさそう、と思った。
状態がいるなら、判定用と処理用でインターフェイスを分けて、 判定用クラスのインスタンスダだけシングルトンにすればいい。 Processor実装は、判定用と処理用をペアで実装する。 内部クラスにでもしとけばいい。
".NET Runtime Optimization Service"に関するドキュメントってないすかね
クラスや構造体のメンバを宣言順に取り出すことはできますか? VBで使用していたLSETみたいな関数を自作したいんですが。
リフレクションでメンバをまとめて読み取る時は宣言順に出てくるような気がする
852 :
835 :2006/01/26(木) 12:58:44
>>848 レスどうもです。
判定メソッドとインスタンス作成メソッドを別の判定用クラスに分け、そのクラスの配列をManagerクラスで持つことで
うまく実装できました。
どうもありがとうございました。
>>851 getfieldsメソッドで、メンバの情報を取得して
ループで回すと宣言順には出てくるようなんですが、
この順番は保証されているのかなあと。
StructLayout属性を読取るクラスに指定していれば
大丈夫なんでしょうか。
保証はされてないよ。実装依存。 .NET2.0までではとりあえず宣言順どおりに出てくるけど。 StructLayoutはこの場合には関係ないな。
855 :
850 :2006/01/26(木) 15:04:47
>>851 >>854 書き忘れていましたが、レス有難うございます。
では、宣言順に確実に取り出す方法は今のところないと
いうことでしょうか?
C#2.0でpartialクラスを使えるようになったけどさ、 ソースAとソースBでそれぞれ宣言したフィールド、この場合どっちが宣言順的に先になるの? って話。
857 :
デフォルトの名無しさん :2006/01/26(木) 19:08:18
C#.netというのを最近始めました。 質問です。 form.csというのをちくちくいじって、いじったら動かなくなった上に、元に戻せなくなったので やり直そうと、セーブせずにC#のアプリを終了させて、もう一度、起動しました。 しかし、なぜか、前の状態のままです。 セーブしてないのに、勝手にセーブされてるんでしょうか?
まずはパソコンに詳しくなることから始めよう
ビルドしたらセーブするんじゃねーの
面白そうだからコード晒してみそ
861 :
850 :2006/01/26(木) 22:33:18
>>856 遅レスですがありがとうございました。
VB6のソースで、LSETをあちこちで使用して、
違う型の構造体に代入しているものを
C♯に移植しているのですが、
LSETのようなものをC♯でつくれないかなと
考えてるのですが。
いい方法はないようですね。
そんな旧世代な型を無意味にさせる行為はさっさとやめろってことだな
Component.Eventsって線形リストでイベントが多いと効率悪いですと書かれているくせに Formとかイベントがかなり多くてパフォーマンス悪いのではないか?と考えてる漏れは考えすぎですか?
たかが50やそこらでは大して悪くなる効率も無いだろ 逆に少ないと今度はハッシュテーブルのほうが効率が悪かったりする品
>>863 イベントが多くては登録されてるイベントリスナーが多いのかイベントの種類が多いのかどっち?
イベントの種類が多くても実行効率にはなんら影響ないと思うが。
リスナーが多くても、削除時に効率悪いだけでイベント挙げるときに葉関係ないと思うが。
>>863 いや、考えたらなさすぎだろ。
言葉づらじゃなくて正しく意味を読み取らんと。
867 :
863 :2006/01/27(金) 08:23:54
>>864-866 レスサンクス
そうですね、普通リスナを10種類も登録しないし、問題なかったですね。
任意のクラスのpublicなeventに自動的にそれ用のdelegate生成してaddするお勉強アプリ作ったら
微妙にもっさりしてたので、気になったんです。
868 :
デフォルトの名無しさん :2006/01/27(金) 18:01:27
DDEって何
具体的にって掲示板ごときでDDEの実装書けってのか。無茶言うな。 DDEMLでも調べてみたらどうだ。
871 :
デフォルトの名無しさん :2006/01/27(金) 18:12:24
>>869 DDE(Dynamic Data Exchange)
Windows上でアプリケーションソフト同士がデータやコマンドを行なうための手順の一つ。
Windows 2.0から実装されているが、OLEなどに取って代わられ、現在ではあまり使われていない。
http://e-words.jp/w/DDE.html だそうです。
872 :
デフォルトの名無しさん :2006/01/27(金) 18:15:18
>>870 そうっすか。すいません。DDEMLググってみます。どうも。
873 :
デフォルトの名無しさん :2006/01/27(金) 18:37:40
nurupo.net
ラベルの位置をコードの方で指定したいのですが以下のやり方ではエラーが出ます。 label1.location.X = 10; どうやったらいいのでしょうか? label1.Height = 10; ならうまくいくのに何故でしょう・・。
label1.Left = 10;
>>875 ありがとうございます<(_ _)>
あとの3方向は類推します。
Ue Left Migi Shita
そのりくつは おかしい
Sky Left Right Sea
Heaven Left Right Hell
Head Left Right Tail
SaitamaTaiyou SaitamaHidari SaitamaMigi
883 :
デフォルトの名無しさん :2006/01/28(土) 12:45:30
あるフォルダ内のファイルの名前を全て取得するといった処理を行う場合、 その取得されるファイル名は昇順になっていますか?
>>883 Directory.GetFiles()あたりを使って取得してるなら、返ってくる内容のならびについてはなんら保証されていないので
仮に今、昇順で返ってくるようになっていても将来変更される可能性がある。
885 :
デフォルトの名無しさん :2006/01/28(土) 12:53:26
>>884 レスありがとうございます。
では自力でソートした方が無難ですね。
886 :
デフォルトの名無しさん :2006/01/28(土) 14:45:49
現在自分の端末にVS.NET2003 1.1 がインストールされているんですけど、 Visual C# 2005 Express Editionを試しに MSからダウンロードしてインストールしてみようと思いました。 ですが、心配事が一つ。 .NET Framework が2.0にアップデートされちゃうんですか? もしそうなら、その状態でVS2003(.NET Framework 1.1)を 起動したらどうなるんですか? 以上よろしくおながいします。
.NETはバージョンが違うのは別物。 別のところにインストールされて別々に動く。
ありがとうございました! 早速クリックワンスを試してみます。
インテリセンスで 文字補完で表示される時、その候補のヘルプを見る方法ありますでしょうか? 例えば、label1.t ってやった時にでてくる Text というコードのヘルプをその場で見たいのですが、無理でしょうか?
知らないけどそれはまたうざそうだな
>>890 そうですか・・・。
そういう機能はないのですね。
ありがとうございました。
テキストボックスでエンターが押されたら発動するイベントを組みたいのですが、 それっぽいイベントが見つかりません。 enter は違うみたいだし・・・。 なんて言うイベントでしょうか?教えてやって下さい<(_ _)>
AllowEnter で KeyDown とか
894 :
892 :2006/01/28(土) 22:49:20
>>893 さっそくレスありがとうございます。
ああ〜 キーダウンイベントつかって、エンターが押されたらってif文を作ればいいのですね。
わかりました。
ところで、AllowEnterというのはなんでしょうか?
ググったのですが、ヒットしません(´・ω・`)
フォー わけわからん状態になった メインマシンの WinXP Pro + .NET Framework 1.1 + SharpDevelop 1.1 でコンパイルすると サブマシンの Win2K + .NET Framework 1.1 で System.Reflection.TargetInvocationException、ImageList の詠み込みに失敗 イメージリストの部分を サブマシン Win2K で作り直したら動く メインマシンに .NET Framework 2.0 を入れて消したことが関係しているのだろうか? ぐぐってると、DEVENV.exe.manifest がほげほげとあるけれど そんなファイルは手元の環境には無いぞ・・・ 誰か助けてくれぃ・・・駄目ですか? orz
>>894 AllowEnterなんて存在しないし
AcceptsReturnは関係ないし
こんな感じ?
private void textBox1_KeyDown( object sender, KeyEventArgs e )
{
if( e.KeyCode == Keys.Enter )
{
System.Media.SystemSounds.Asterisk.Play();
}
}
private void textBox1_KeyPress( object sender, KeyPressEventArgs e )
{
if( e.KeyChar == (char)Keys.Enter )
{
e.Handled = true;
}
}
897 :
894 :2006/01/29(日) 00:31:39
>>896 わざわざありがとうございます。
どちらも試してみました。
上の方は 以下のエラーがでました。
.Forms.KeyPressEventArgs' に 'KeyCode' の定義がありません。
下の方が以下のエラーがでました。
\Form1.cs(327): 型 'System.Windows.Forms.Keys' を型 'char' に変換できません。
ちょっと調べてみます<(_ _)>
898 :
897 :2006/01/29(日) 00:39:26
すいません。 key down の場合は KeyCode で key press の場合は KeyChar を使わなければならなかったのですね。 それに気づけばエラーは出なくなりました。 downとpressの違いでなぜ、変数の形が変わるのか、私には全く分かりませんが(´・ω・`) とりあえず 動いたので、ありがとうございました<(_ _)>
勉強していると、コードに知らない単語がいっぱいでてきて、そこでつまづいてしまいます。 知らない単語の意味を調べられる、便利な辞書のような本か、サイトがあると助かるのですが、 そういうのはないでしょうか? try catch とかそういう単語がでてきて、これなんだ??と詰まっています・・・。
予約語なんだけど
901 :
895 :2006/01/29(日) 14:31:46
やっと解決した SharpDevelop\1.1\bin\SharpDevelop.exe.manifest を削除したらうまく動いた・・・ なんでこんな事になってたんだろう・・・
903 :
デフォルトの名無しさん :2006/01/29(日) 16:13:17
>>899 せめてヘルプ開きながらやろうよ (^^;
ソースコードのバックアップを一定時間ごとに取るような ソフトないですかね? UIの操作ミスって作り直す羽目に2度もなったんで・・・orz
WORD
いくらでもあるんじゃないかと思うんだが。
自分で作ったプログラムをexeファイルにして、友達に送ったらエラーが出ました。 アプリケーションを正しく初期化出来ませんでした。oxc0000135 というようなエラーが出たそうです。 なぜなんでしょうか? 自分のマシンではもちろん正常に動いていました。 自分も友達も同じWINXPですが、向こうは フレームワークというのを入れてないです。 そのせいでしょうか?
>>905 作ればいいじゃん
ただしUIの操作ミスんないように
>>908 .NET Framework入れなきゃ動くわけがない
>>910 そうなんですか煤i; ̄□ ̄
全く知りませんでした。
では、フリーとかで配布してる人はどうやってるんでしょうか?
ドキュメントにその旨を書くだけじゃん
>>912 そうだったのですか・・・・・
ではC#でプログラム作って配布しても、一般人には遊んでもらえないんですね。
知りませんでした_| ̄|○ かなりショックです。
フレームワークぐらい入れるよ。気にするな。そんな特別なモンじゃない。
915 :
デフォルトの名無しさん :2006/01/29(日) 20:04:06
最初から、テキストボックスにカーソルがある状態( |が点滅してる状態)にしたいのですがどうやればいいでしょうか? テキストボックスのプロパティのどれをいじればいいでしょうか?
>>915 textBox1.Focus();
文字がある状態だとその後に
textBox1.Select(0, 0);
など適宜に
917 :
デフォルトの名無しさん :2006/01/29(日) 20:34:12
>>916 早速レスありがとうございます。
ただ、そのnyuuryoku.Focus(); をどこで実行したらいいのか分かりません。
下みたいに form1のloadイベントで実行したら、最初に実行してくれるかなと思ったのですが、これだとなぜかうまくいきません。
private void Form1_Load(object sender, System.EventArgs e)
{
nyuuryoku.Focus();
nyuuryoku.Select(0, 0);
}
下みたいにボタンクリックのイベントで実行したら、確かにそっちにカーソルがいったのですが、これではダメだし・・・。
private void button1_Click_1(object sender, System.EventArgs e)
{
nyuuryoku.Focus();
nyuuryoku.Select(0, 0);
}
重ね重ねすみません。
ウチではFoucus()でちゃんと動作するけど じゃあ this.ActiveControl = textBox1; の方で
>>918 >>919 それで解決しました。
ありがとうございました。
しかし、皆さん、なぜそういう回答がすぐ分かるんであろうか…
Regexクラスに正しい正規表現かどうか判断するメソッドがないって困りませんか? ArgumentExceptionをキャッチするしかないのってどうよ
>>923 不親切だが、Stringがインスタンスの変更が不可のクラスであることを考えれば、
あるいはヘルプでInsertの定義をみれば正解は分かる。
>>922 動的に正規表現を作ることってあまりない気がするから別に構わないな。
Insertメソッドは、そのインスタンスに挿入するのではなく、挿入した結果を返す。 基本的にStringは変更不可能だと覚えておいたほうがいい。 string str1 = "Hello!"; stri1 = str1.Insert( 5, "World");
927 :
デフォルトの名無しさん :2006/01/30(月) 00:05:54
>>905 Vectorと窓の杜で調べたらあると思うよ。
|ω・`) 950超えたら、どなたかスレ立ててくださいな
950じゃまだ早い 980くらいで十分
C#でゲーム作りたいのですが、よい解説ページはないでしょうか?
ちょっとSplitContainerについて質問なんですが Form form = new Form(); form.Size = new Size(600, 600); //form.SuspendLayout(); SplitContainer sp = new SplitContainer(); ListView lv; lv = new ListView(); lv.Dock = DockStyle.Fill; sp.Panel1.Controls.Add(lv); lv = new ListView(); lv.Dock = DockStyle.Fill; sp.Panel2.Controls.Add(lv); sp.Dock = DockStyle.Fill; form.Controls.Add(sp); sp.SplitterDistance = 300; //form.ResumeLayout(); form.Visible = true; このコードを実行したところ、SuspendLayout、ResumeLayoutをコメントアウトしてあればちゃんと スプリッタが中央あたりに表示されるんですが、そうでなければ右よりに表示されてしまいます。 どうもResumeLayoutのタイミングでSplitterDistanceが変更されているようなんですが、 これは何故でしょうか。 また、SuspendLayout、ResumeLayoutをコメントアウトする以外に(あるいはその外側でSplitterDistanceを変更する以外に)解決する方法はないでしょうか。
>>931 SuspendLayout しているのでDock=Fillが効かずに
Widthがデフォルト(150)のままになっている。
そこでSplitterDistance=300にしてもWidthを超えているため
SplitterDistance=121になってしまう。
(これはSplitterContainerの仕様らしい)
その後ResumeLayoutしたときにDock=Fillが効いて
Widthが変更されるのでSplitterDistanceも変更される。
(これもSplitterContainerの仕様らしい)
解決策はsp.SplitterDistance=300の前に
sp.Width=form.ClientSize.Widthとでも入れればいいんじゃない?
(フォームデザイナが生成するコードではSizeを固定値で設定してるけど)
933 :
931 :2006/01/30(月) 14:15:56
>>932 なるほど・・・そういう訳だったんですか。
spのサイズを直接変更する方法でうまくいきました。
なんとなく格好悪くはありますが、そうするしかないみたいですね。
どうもありがとうございました。
>>905 >ソースコードのバックアップを一定時間ごとに取るようなソフトないですかね?
MSDNならVisual SourceSafeがあるけど・・・うーん
935 :
デフォルトの名無しさん :2006/01/30(月) 20:18:24
VisualStudio.net(以下、VS200*)のバージョンによって、 出来上がるプログラムのサイズが違うのは何故ですか? ある全く同じのソースコードをVS2002とVS2003でコンパイルしてみたところ、 VS2003の方が100kBくらいもサイズが大きくなりました 環境やソースの中身によっても違うかもしれませんが、 もしこれが多くのプログラムに当てはまるようであれば、 VS2002を使った方が得策ですよね?
まだアセンブリのサイズをどうこう言う時代なのか?
ファイルサイズが重要と言うことであればそうなるな。
938 :
デフォルトの名無しさん :2006/01/30(月) 20:30:54
メモリ容量がアレなので・・・
100kBを惜しむような環境で.NETなんて贅沢なもん使うな、って答えしか出てこないな
940 :
デフォルトの名無しさん :2006/01/31(火) 00:44:12
C#は今後生き残ることができるのだろうか?
×C#は今後生き残ることができるのだろうか? ○C#はこの先生きのこることができるのだろうか?
死にはしないが流行りもしない。 そんなだめだめ状態がつづくでしょう
.NETが流行らないことによりC#が流行らないとしたら非常にもったいないな
>>941 /⌒ヽ
/ ● ヽ
(●/⌒ヽ●)
ヽ| ´∀`|ノ きのこってんじゃねーよ
.ゝ___ノ
C#からXMLを扱いたいのですが、調べてもいまいち理解できませんでした。 参考になるサイト等があれば教えてください。
うひょ〜!
ありがとうございます
>>948 を見るたびにVS.NETのインストーラーが勝手に立ち上がるのはなんとかならないですか…
#
>>1 の (#゚ー゚)つ は正しくは (*゚ー゚)つ な希ガス
>>949 >
>>948 を見るたびにVS.NETのインストーラーが勝手に立ち上がるのはなんとかならないですか…
なにそれ?
> #
>>1 の (#゚ー゚)つ は正しくは (*゚ー゚)つ な希ガス
ここがどこのスレだと思ってる
ヘルプ見ようとすると出てくるあれか。 ちなみに俺の勤務先ではOfficeのインストーラが出てくる。
952 :
デフォルトの名無しさん :2006/02/01(水) 08:00:43
「通常使うプリンタ」に設定されているプリンタ名を獲得するのはどうすればいいのか。
「アタック25」でパリ挑戦権を獲得するにはどうすればいいのか。
まず葉書き。
なんで勝手にインストーラが立ち上がるんだよ! uzeeeeeeeeeeeeeeeeeeeeeeeeeee!
>>952 new System.Drawing.Printing.PrinterSettings().PrinterName;
957 :
デフォルトの名無しさん :2006/02/01(水) 19:17:40
DataGridView勉強し始めたら参考資料がなくて愕然としています。 良いサイトを御存知でしたら誰か教えて頂けませんか? 命令や使い方があればOKです。
まだ見かけないな。頑張れ、君がパイオニアだ。
try{}.catch{] に関して教えてください。 あるクラスで try { FormA f = new FormA f.show() } catch (Exception ex) { // ここで f の Exception を拾いたい } のように、FormA での Exception を呼び出した元クラスで拾いたいのですが 今だと FormA のエラー発生箇所で、エラーメッセージが表示されてしまいます。 上記の事を実現する方法はありますか?
961 :
デフォルトの名無しさん :2006/02/01(水) 19:34:55
>>960 ありがとうございます。でもこのサイトの説明はSQL使うんですよ。
大げさなしかけはいらないのですが・・・
ヘルプの説明も分かりづらいしググってもいいサイトないんです。
とにかくありがとうございました。
964 :
959 :2006/02/01(水) 21:00:45
>>962 それが catch できないんですよ。。。
>>963 Show でも ShowDialog でも catch できませんでした。
もしかして、別 DLL だと catch できませんか?
コンパイルは通ってるのか?
例外がメッセージループのスレッドで発生するようになるのでトラップできなくなる。 //Showはそれ以前に次に移ってしまうがな。 Application.ThreadExceptionイベントで処理。
967 :
959 :2006/02/01(水) 21:19:56
>>966 ありがとうございます。
Application.ThreadExceptionイベントですね、勉強します。
メニューの Exe があって、そこから各機能の DLL(form) を Show しています。
想定できる Exception は、各機能の DLL で処理するんですが、
万が一想定外の例外が発生した場合は、このメニューの EXE でキャッチ
して、.NETFx が出力するメッセージをユーザーには見せたくないん
ですよね。なんで、show した後で、その show を行なった部分で
キャッチしようとしたんですが、たしかに show したら次に進みますね…。
こういった場合、他に定石みたいな組み立て方があれば
アドバイス頂けるとうれしく思います。よろしくお願いします。
968 :
デフォルトの名無しさん :2006/02/01(水) 21:28:14
PageSetupDialogのセンチ指定の問題があるのでいっそインチで使いたいのですが プログラムから切り替える方法がわかりません。 2.0のPageSetupDialog.EnableMetricは確認しましたが妙な風に丸められるのは相変わらずでした。 コントロールパネルの地域オプションで単位をヤードポンド法に変えれば換わるのは確かめました。 Thread.CurrentCultureやGlobalizationSection.UICultureをいじってるのですが変わってくれません。 今のところ2.0で試してみてますが、1.1でできる方法があればお願いします。
>>959 >FormA f = new FormA
>f.show()
行末にセミコロンがないのが気になるんだが…
>>959 そのFormのエラーを一まとめにしたいってことでしょ?
Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Form1_UnhandledException);
で例外出したスレッドをそのままハンドルできるのでそれでやるべし。
WinFormの場合は、というかメッセージループに対応する場合はApplication.ThreadExceptionの方。
972 :
970 :2006/02/01(水) 22:47:47
補足:Form作るとき別スレッドで作ること。
973 :
デフォルトの名無しさん :2006/02/01(水) 23:41:11
.net初心者です。 イベントについて教えてください。 以下のようなControlクラスのOnClickをオーバーライドするメソッドがありますです。 public class Form1 : System.Windows.Forms.Form { protected override void OnClick(EventArgs e) { base.OnClick (e);//@ } } デリゲートとイベントの仕組みを一通り読み終えたところなんですが、 今の知識で上のメソッドを読むと、 「このFormの基本クラスであるControlクラスのOnClickメソッドをオーバーライドして、 Controlクラスの@OnClickイベントデリゲートに、EventArgs型の引数を渡す事で、 Controlクラスにきっと記述してあるであろう、Control.OnClick += new EventHandler(。。。 んもう。わけわかりません。
974 :
デフォルトの名無しさん :2006/02/01(水) 23:42:09
MSDNに以下のような文言を発見しました。 メモ プロテクトされた OnEventName メソッドを使用すると、 デリゲートをアタッチせずに、派生クラスでイベントをオーバーライドすることもできます。 派生クラスでは、登録されたデリゲートがイベントを必ず受信できるように、 常に基本クラスの OnEventName メソッドを呼び出す必要があります。 んもう。さっき読んだ仕組みも説明がつかなくなってしまったので、以下のように書いてみました。 protected override void OnClick(EventArgs e) { base.OnClick (e);//@ } private void Form1_Click(object sender, System.EventArgs e) { MessageBox.Show("Form1_Click");//A } private void Form2_Click(object sender, System.EventArgs e) { MessageBox.Show("Form2_Click");//B } 実際にフォームをクリックしてみると、@・A・Bという順番で呼ばれました。 俺。逝ってよし。
結局何を聞きたいんだ? 自己完結? とりあえずOnClickはイベントハンドラではない。
すいません。。 ↑の二つ無かった事にしてください。 protected override void OnClick(EventArgs e) { MessageBox.Show("test"); } private void Form1_Click(object sender, System.EventArgs e) { MessageBox.Show("test"); } このように書くと、Form1_Clickイベントが発生しないのは何故ですか?
イベントハンドら登録してないんだろ
派生クラスでOnClickをオーバーライド、つまり上書きしている。 で、基底クラスではユーザがクリックしたときにOnClickを呼び出す。 基底クラスのOnClickでClickイベントに関連付けられたイベントハンドラを呼び出す。 が、派生クラスでOnClickが上書きされているので、 Clickイベントに関連付けられたイベントハンドラを呼び出す部分が実行されなくなる。
質問です C#2003のaxWebBrouserのイベントで CommandStateChange というのがありますが C#2005のWebBrouserのイベントでは 何を指定してやれば同じイベントを指定できますか 変な日本語ですみません(´Д`;
Bro w ser な 何したいのか知らんが、進む/戻るならCanGoForward/BackChangedでいいんじゃね
>>981 ご親切にどうもです
進んだり戻ったりできますた。
あとスペルミスごめんなさい
984 :
デフォルトの名無しさん :2006/02/03(金) 01:06:10
コントロールを別スレッドから操作するにはInvokeが必要なのはわかったが 別スレッドで作ったコントロールを追加するのにも必要? A,Bスレッドがあって Bのスレッドコントロールを作成(インスタンス生成) AのコントロールのControl.Controls.Add(Bスレッドで作成したコントロール) をInvoke経由で呼び出し、Aスレッド上にBスレッド作成コントロールを追加したとして Bスレッドで作成したコントロールをこの後もずっと AスレッドではInvoke経由で操作しないんとまずいのか?
なに無茶なことしようとしてんだよ… ハンドルできる前なら問題ないのかもしれんが。
Delegateでいくね?
988 :
デフォルトの名無しさん :2006/02/03(金) 03:08:01
C# と Visual C# は別物ですか? 知人が言うには、 Basic と Visual Basic が違うように、 また、C++ と Visual C++ が違うように、 C# と Visual C# も違うのだとか そうなんですか?
990 :
デフォルトの名無しさん :2006/02/03(金) 03:12:11
>>989 レスありがとうございます
では言語的には C# でおkってことですね
分かりました
>>990 ちなみに、VB の BASIC は例えば日本の高校数学の教科書に載ってる(載ってた?)
奴とは確かに全然違うんで、言語の方も VB と呼ばれる。
BASIC はいろいろ方言があるんで、高校の教科書に載ってる奴も
N88 BASIC と言わないと正確には通じない。
それに、VB 6 以前と VB7 以降でかなり言語仕様が変わったんで、
7 以降のは VB.NET って言って別言語扱いした方がいいかと。
C++ はかなり標準化がしっかりされてて、
どの開発環境使おうと C++ は C++。
VC++ は 6.0 までは標準対応が遅れ気味だったけど、
VC++ .NET (VC++ 7.0)以降は他のどのコンパイラよりも標準対応度合いがしっかりしてる。
C# もちゃんと標準化されてるんで、
VC# 使おうと、mono 使おうと、dot GNU 使おうと、SSCLI 使おうと C# は C#。
ところで新スレは立てんのか? // 私は無理だった
次スレ立てます。
994 :
993 :2006/02/03(金) 03:42:59
おいこらなに基本的なミスしてんだ
sage
the end and a restart.
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。