ふらっとC#,C♯,C#(初心者用) Part33
1 :
デフォルトの名無しさん :
2008/11/03(月) 02:58:21 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
2 :
デフォルトの名無しさん :2008/11/03(月) 02:58:55
>>1 スレを立てた納得のいく理由を言ってもらおうか?
必要無いと思うならここ見ずにあっちのスレ池よ。 俺は初心者スレが欲しいから。
需要が勢いに現れる
まあスレを分けることに実質的な意味があるとは思えないし、 明らかに不合理以外の何物でもないと俺も思うが、 別に害もないし「二つあってはダメ」ということもないでしょ。 消極的容認という奴だよ。 本音を言えばそこらの本やweb上の情報読めば解決するようなことを 初心者を言い訳にして人に聞くような奴に目なんかないと思うけど。
スレが一つだと非初心者が初心者をバカにしたり 非初心者の質問に初心者が回答するなど、ミスマッチの頻度が増す。 現行の体制にもそれなりのメリットはあるんじゃないか。
VBスレのようになるのが目に見えてる
キティは置いておいても、「ふらっと」→「くだすれ」でム板的な統一は欲しい。
C#的にはふらっと以上のネーミングもあるまい
>>12 だから激しく既出だけど、2chだって鬼ばっかりじゃないんだから
どこだろうと回答は返ってくる。
ただし、質問が「まとも」であるならね。
逆を言えば、「お前C#やプログラミングの、ではなく日本語の初心者だろ」
と言いたくなるような杜撰な質問だったり、調べればすぐ分かることを横着して
質問してるとしか思えない怠惰な糞野郎の質問には、どこだろうと回答なんて
返ってくるわけがない。
>>11 では「害がない」と書いたけど、本当はこういうスレってそういう連中の
免罪符になっており、連中から自分が反省する機会を奪っている負の側面がある
可能性は大いにある。
>>16 正論だね。
そういう質問に対しては「華麗にスルー」か「親切に説教」の対応を
適宜選択して行けば良いんじゃね?
スレが2つでも大きな問題じゃないと思う。
何を今さら
VS2008C#のデザイン画面のプロパティからコントロールの(Name)を総大改編したらプログラムが殆ど動かなくなりました 自動的に変換にしてくれなかったということですか?
質問です m3uファイルを関連付けされているアプリケーションで開かせたいのですが //pathにはm3uファイルのパスが入っている System.Diagnostics.Process.Start(path); とした時、WMPが立ち上がるのですが、m3uファイルが開かれておらず、"ただ立ち上がっただけ"の状態になります 以下の状態ならファイルも読み込んでくれるようです ・Process.Start時にWMPが既に実行されていた場合 ・Process.Start後にSleep(10000)なりReadKey()なりで時間を稼いだ場合 ・Process.Start("wmplayer",path)とした場合 解説サイト等にはファイルを開かせる処理と言うと、ただProcess.Start(ファイルパス)しろとしか書かれていないのですが、それでは何か足りないと言う事でしょうか? 環境は32ビット版Vista+VS2008EEです
>>21 path に .txt なファイルのフルパスを指定して、普通にメモ帳が立ち上がるかどうか確認。
立ち上がるなら、プログラムに問題はなし。WMP 側の問題だろうね。
m3uファイルをエクスプローラでダブルクリックしたときはどうなる?
>>19 Controls[string]使ってるんだろ
26 :
21 :2008/11/03(月) 12:17:38
>>22 何か問題でしたか?
>>23 pathだけProcess,Startの直前に書き換えてみましたが、普通にテキストファイルがnotepadで開かれました
WMP以外のソフトも試してみます
>>24 普通にファイルが開かれ、再生が始まります
System.Diagnostics.Process.Start(path); Applicaion.DoEvent(); は?
28 :
21 :2008/11/03(月) 12:37:11
>>27 コンソールアプリなんです
起動→m3uファイルを生成→生成したファイルを開く
これだけの処理なんですが・・・
ちなみにMedia Player Classicに関連付けをして試してみましたが、Process.Start(path)だけで普通に立ち上がりました
随分不可解ですが、WMPの問題と見て間違い無いのでしょうか・・・
googlemapの画像部分だけを保存したいのですが, 何かよい方法は無いものでしょうか・・・
System.Diagnostics.Process.Start(path); System.Diagnostics.Process.Start(path); は?
ワロタw System.Diagnostics.Process.Start(path); Thread.Sleep(5000); //とりあえず5秒まつ System.Diagnostics.Process.Start(path); //なぜか2回実行しないと正しく動かない 的なコードはヤメレw Process.Start("wmplayer",path)とした場合動くって書いてるからやるならこっちだろ
大事なことなので二回実行しました
33 :
21 :2008/11/03(月) 13:51:12
>>30 ダメでした
>>31 何故ダメなのか解らないと言うモヤモヤは残ってしまいますが、関連付けを別個に取得して、Process.Start(hoge,path)の形式で行くことにします
回答して下さった皆さん有難う御座いました
そのモヤモヤを残したまま動いたからOKみたいな姿勢はPGとしてどうなのだろうか? オレも動いたからOK派なんだけど、ちょっと疑問に思った。
データベースに接続するにはどのコンポーネント使えばいいですか?
ADO.NET
LINQ to SQL
ToolBar
System.Data.
C#でレジストリを全てエクスポートを行うプログラムを作成しています. 現在,RegistryクラスのOpenSubKeyメソッドを再帰的に呼び出しているのですが, Windows標準のレジストリエディタにある「エクスポート」機能を C#から実行することは可能でしょうか? 環境は VC# 2005 Express Windows XP Pro です. よろしくお願いします.
44 :
42 :2008/11/03(月) 23:12:27
>>43 ありがとうございます.
残念ながらCはほとんど読めません;;
調べてみたところ,APIを使わなくても,regeditの引数に/eをつければ
エクスポートできたので,この方法でいこうかと思います.
節子それマルウェアや!!!!!
46 :
デフォルトの名無しさん :2008/11/04(火) 01:48:34
すみません。ボタンを押すとDataGridViewの選択されている行を削除するようにしているのですが(DataGridViewから直接ユーザが削除できないようにしています) 今の方法はDataGridViewの列にID列をもうけて、そのIDのデータをDataSetオブジェクトから削除するようにしているのですが IDをDataGridViewに表示しているとスマートじゃないのでできるなら表示したくありません。このような状況下でうまく選択された行を削除する方法はありませんか?
47 :
29 :2008/11/04(火) 02:26:41
アセンブリ名って何ですか?
正確には違うけどまあとりあえずそう思ってもいいかもしれないけどまずいかもしれない。
ソケット通信をしようと思って以下のように記述しているのですが、 ”要求したアドレスのコンテキストが無効です。” と表示されて、うまく待機状態になりません。 ちなみに、各PCのWindows(Vista)やセキュリティのファイヤーウォールは無効にして行っています。 (よって、もちろんping等も通る状態です。) IPAddress localAddr = IPAddress.Parse("192.168.11.6"); TcpListener server = new TcpListener(localAddr, 9999); server.Start(); ちなみにループバックだとうまくいくのですが、 何かまずい点がありますでしょうか? あれば、教えていただけると助かります。
節子それマルウェアや!!!!!
NIC の IP アドレスはそれで合ってる? ipconfig /all なんかで確認を
string[] splitString = beforeSort.Split('\n'); Array.Sort(splitString); で、逆順にソート結果を表示するにはどうすればいい?
表示するときに逆から取得すればいいんじゃね?
データごと変えるならArray.Reserveすればいい 表示だけ変えたいのならそっちの方でどうにかする
予約(Reserve)してどーすんだ、つーのw 反転(Reverse)だわなw
Array.Sort(splitString, (x, y) => -String.Compare(x, y));
イベントのDoubleClickとMouseDoubleClickの違いが分からないので教えてください
>>58 おおお。
Array.Reverse
なんてのがあるんだ。知らなかった。
これは、1行に複数の項目がある場合、項目を指定できるんですか?
1行にはファイル一覧と日付と時刻があり、ファイルの逆順に並びました。
path/tmp.txt 2008/11/04 17:06:37
のようになってます。
2008/11/04 17:06:37 path/tmp.txt
にしてもファイル名の逆順になりました。
日付の逆順にしたいのです。
>>59 今回は、
2008/11/04 17:06:37 path/tmp.txt
にしておいて、
Array.Sort(splitString, (x, y) => -String.Compare(x, y));
でうまくいきました。
ありがとさん。
ReverseはReverseなんだから変に並び替えたら駄目だろ。 並び替えるのはSortの仕事。 一般的には 日付とパスを持ったクラスを作って、全部のデータをそのクラスの配列に詰替えして、 > Array.Sort(splitString, (x, y) => -String.Compare(x, y)); の-String.Compare(x, y)部分を好きな判定に変更。
OrderByDescendingだろ
64 :
デフォルトの名無しさん :2008/11/04(火) 18:53:28
これからC#でソフトウェアを作ることになりそうなんですが、どのような本で勉強すればいいでしょうか? ちなみにC#はほぼ初心者で、CとJavaは習ってます。
エッチな本かな
66 :
デフォルトの名無しさん :2008/11/04(火) 19:02:09
初心者ですみませんが、あるテーブルをもとに新しいフォームを作成して、ボタンと 検索用のスペースを取り付けたのですが、あけたスペースに文字を入力すると、 あるフィールドに、その入力された文字が含まれているなら、その部分のレコードを取り出す。 ということをできるようにボタンのイベントのビルドを設定したいのですが、 どういうふうに設定すればよいのでしょうか。Filterを使うのはわかっています。 説明下手で申し訳ありません。
Windows APIを使うのは邪道なのでしょうか? .NET Framework的に
そんなこといってたらJavaでJNIも邪道になってしまう
WinFormsも
>>66 ボタンのイベント
{
検索処理(スペースに入力された文字);
}
って感じで。
71 :
デフォルトの名無しさん :2008/11/04(火) 21:20:19
こんにちわ、自分最近プログラミングに興味を持ったんですが、何から覚えればいいのでしょうか VB2005のC#をつかおうかとおもってます
Virus Buster?
そんなのありますん
>何から覚えればいいのでしょうか マジレスすると どっかのサイトの「はじめてのC#」みたいなところを一通り読みながら サンプルをコンパイルしてけばいいと思う
変数もifも知らないような人なら Cやjavaの超初心者用の本でも買ってOOP以前の基礎を勉強した方がいいんじゃないかなあ
>>74 マジレスどうもありがとうございます
検索して調べてみます
変数 is 型 のようなis演算子を使って否定形にするにはどう書けばいいですか?
!(変数 is 型)
79 :
77 :2008/11/04(火) 22:30:06
ありがとう。
無限undo,redoを実装したいのですが 今考えているのは専用のクラスをつくって 直前または直後のコントロールと状態を丸ごと保存しておく方法です 通常はどのような方法で実装するのが一般的でしょうか?
>>80 一般的かどうかは知らんけど、memento or(and) command とかのデザインパターンを
使う方法もあるよ。
mementoってものすごく無駄じゃないか? 例としてはテキストエディタ考えれば分かると思うけど。
コンボボックスの候補をインクリメンタル検索するのは、どうやればいいんですか?
>53 IPはもちろんipconfigで確認しました。 ちなみに、IPアドレスを指定せずIPAddress::Anyを使うとうまくつながりました。 理由がさっぱりわかりません ○rz
86 :
80 :2008/11/05(水) 00:16:07
memento見ましが、とても勉強になりました ちょっと大がかりな気がするので簡略化して実装してみます ありがとうございました
87 :
デフォルトの名無しさん :2008/11/05(水) 01:44:29
抽象クラスの中で定義したabstractを付けない普通のメソッドは 継承先で通常のメソッドとして使用することはできるのでしょうか? それとも抽象クラスのなかのメソッドは全てabstrctとしてとらえられるのでしょうか?
>>87 全て抽象だったら中身を定義する意味がないだろ。
文字列を後方から最長一致で探したいのですが、賢い方法は無いでしょうか?
文字列を反転させて最長一致させて結果を反転させれば?
91 :
デフォルトの名無しさん :2008/11/05(水) 07:58:01
クリップボードのデータをByte配列に変換するにはどうすればいいでしょうか? クリップボードのデータをTcpClientを使ってサーバーに送信したいのですが、 Byte[]に変換するところでつまずいています。 ビットマップや音声など、DataFormatsに含まれている形式なら 問題ないのですが、それ以外の場合、取得することもできないので 困っています。 ClipBoard.GetDataObject()で取得したデータをそのままByte[]に できれば理想的です。よろしくお願い致します。
勝手にクリップボード送信されたら嫌ですね
93 :
91 :2008/11/05(水) 08:43:04
クリップボードを共有するだけなので、 勝手には送信しません
共有したら送信することになるだろう。 ところで複数フォーマットがある場合どうするの? 全部送るのかな。GetDataObjectしたものをGetFormatsして それぞれをGetDataして送るのでどう?
クリップボードに格納できた以上、シリアライズは可能なはずだけど
>>90 やはりこれが一番現実的な解ですよね。
ありがとうございました。
97 :
91 :2008/11/05(水) 18:11:31
>>94 GetFormats()みたいに特定の形式に依存したくないんですよね
目的はクリップボードの生データを共有することなので
例えば「01 2f e4 38」みたいななんの脈絡もないバイナリも
そのままの形で取得/設定したいんです
>>95 調べてみました
サンプルコードを見たところ、
クリップボードを自作クラスにシリアライズできるようですね
でもサンプルコードはクリップボードにはアクセスしていないもので
参考にはなりませんでした・・・
クリップボードのメモリ空間に直接アクセスしてbyte[]に入れられればいいのですが
>>97 だからよー
送った先でも同じ名前(フォーマット)で再構築しなきゃならないだろうが。
タダだのぷしただけだと復元できないだろ。
99 :
デフォルトの名無しさん :2008/11/05(水) 18:51:07
知ってるか?SHOP99のレジシステムはC#で作られてる事を・・・
セブンイレブンもNECがC#で作ってたような
101 :
デフォルトの名無しさん :2008/11/05(水) 18:52:41
ちなみにあの「しょ〜っぷ、きゅ〜っ、きゅきゅきゅきゅ」っていう歌もC#でつくられたシンセサイザーでつくられてる。 ショップ99はこういうこだわりの有る店なんだ。
>>100 C#最強だな。俺のオキニのSHOP99のレジのバイトの姉ちゃんもC#で作られたりしてるとうれしい。
ガワだけだろjk
話が盛り上がってるところすまないんだけど、CodeZineのサンプルプログラムなかなか良いね。ダウンしてソース眺めると 初心者から上級者の域まで一気にいける。
どれだよ
>>103 そうなんです><; オキニのレジの店員も女子高生なんです><;
108 :
91 :2008/11/05(水) 19:42:14
>>98 dumpしたデータを受信側のクリップボードに
そのまま書き込むだけじゃだめなんですか?
最近マルウェア作り流行ってんの? 発信源日本がダントツらしいし
>>108 書き込むにはフォーマットが必要なわけだが
111 :
91 :2008/11/05(水) 21:22:55
>>110 要するにbyte[]型のメンバだけで構成された
独自フォーマットと考えることはできないんでしょうか?
クリップボードをダンプすることができれば解決するのですが・・・
C#のウィンドウズアプリケーションで、数値を7セグ(風)に表示して欲しいって言われたんだけど これって、自力で実装するしかないですよね。そういうコントロールとかがあるわけじゃないですよね?
>>112 IDisplay display = new SevenSegmentDisplay();
DisplayComponent[] components = new SevenDisplayComponent[3];
components[0] = SevenDisplaySegment.A | SevenDisplaySegment.B | SevenDisplaySegment.C | SevenDisplaySegment.F;
components[1] = SevenDisplaySegment.B | SevenDisplaySegment.C;
components[2] = SevenDisplaySegment.B | SevenDisplaySegment.C | SevenDisplaySegment.F | SevenDisplaySegment.G;
display.Show(components);
何言ってるのこの人
>>112 銭取る仕事じゃないならフリーのフォント使うとか。
銭取る仕事でも、フォントから画像起こしてそれこっそり使っちゃえばいい。
数字なんて10種類しかないんだから。
確かMSのマイグレーション何とかのサンプルでそういうやり方をしてたよ。
7セグフォント作ればいいんじゃね?
>>111 GetFormats(false)で得た全種類をGetDataするのが
一番形式に依存しない方法だと思うぞ。
強いて言えば、クリップボードの内部形式はIDataObjectそのもの。
ネイティブなAPIでもクリップボードにはIDataObjectを受け渡ししている。
WebBrowser wb = new WebBrowser(); wb.Navigate(uri); を使った場合、読み込まれたページのJavaScriptは勝手に実行されてしまいます?。 IEが勝手に立ち上がって404?を表示してしまいます。
そうですか?。
あぁ、COM interfaceか。 表示しなければ実行されないのかと思ってた。
122 :
デフォルトの名無しさん :2008/11/05(水) 22:19:30
DataGridViewである列を基準にソートしてからあるレコード(行)を選択→削除したら DataSetの方のレコードも確実に削除されるっていう保証ある?
123 :
91 :2008/11/05(水) 22:27:30
>>118 なるほど
正体不明のバイナリデータが出てきたりしたら
扱いに困りそうですが取り敢えずやってみます
APIにもクリップボードをダンプする関数はないみたいですし・・・
staticじゃないフィールドにreadonly付けてる? コンストラクタで初期化した後は変更しないフィールドには付けるべきなんだろうけど つい忘れちゃうんだよね
正体不明っつーか、ディレイドレンダリングはどうすんのって話もあるわな。
TCP-IPで通信するプログラムに挑戦しようと思い、
http://www.stackasterisk.jp/tech/dotNet/csharp08_02.jsp のコードを動かして見たのですが、
localhost同士の場合はきちんと通信できるのに、
LAN上の別PC同士では
「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」
というエラーが出るのですが、これはなにが原因なのでしょうか。
サーバー側は192.168.1.70:1500
クライアント側は
192.168.1.60:1600
で待機するようにしています
よろしくお願い致します。
※むろん、ソースのPortの値やIPアドレスは正しく変更しています
クライアントなのに待機してんの?
>>127 文章が前後したために誤解させて済みません
待機しているのはサーバーです
firewallじゃね?
つーか、そのリンク先のClient.csをそのまま使ったのかな? クライアントが指定しているアドレスとポートはサーバのを指定するんだよ。 クライアントでは通常ソースポートを指定しなければ空いてるポートを使う。
131 :
126 :2008/11/06(木) 15:00:27
>>129 ファイヤーウォールはポート開けてます
一応、試しに無効にしましたが、だめでした・・・
>>130 ソースのPortの値やIPアドレスは正しく変更しています
いや、気にしてるのは >クライアント側は >192.168.1.60:1600 という必要ない情報をわざわざ書いてることなんだよね。 このアドレスとポートはプログラムに書く必要がないのはわかってる?
またおまえか
>>132 そういうことですか
それは大丈夫です
サーバーは127.0.0.1で待機していますし、
クライアントは192.168.1.70:1500へつなぎにいってるはずです
クライアントのアドレスを書いたのは環境がおかしいのかを疑ったためです
誤解を与えてすみません
>サーバーは127.0.0.1で待機していますし これはだめ。 0.0.0.0か、192.168.1.70で待たなくちゃ
0.0.0.0つーか、IPAddress.Anyか
>>135 動きました!
本当にありがとうございます。
どういうミスだったのでしょうか?
127.0.0.1と通信する手段が他のPCにはないからさ。 クライアントがサーバのアドレスとポートを指定したら サーバはそのアドレスとポートでListenしていないと届かない。
>>138 なるほど
つまり、Listenするアドレスとは、サーバーから見て自分のアドレスという意味ではなく、
クライアントからも見えなきゃだめということなんでしょうか
大事なことなのにサンプルには何も説明ないんですよね・・・
正確には 127.0.0.1 がつながってるのはループバックインタフェースであって、 ネットワークカードに繋がっているインタフェースのアドレスをlistenしなきゃダメ、 (ほかのホストから繋ぐなら)ということ。
127.0.0.0/8がループバックアドレスというのは サーバーをたてる人間にとって常識だからさ。
いやそれはネットワークプログラミングするに当たって知ってて当然の前提知識…
143 :
126 :2008/11/06(木) 15:35:18
127.0.0.1がループバックアドレスなのは知っていますが、 サーバーの待ちアドレスがクライアントから見えなきゃいけない とは思いませんでした。 サーバーが自分で自分を認識できればいいのかな、と。 (だからサンプルも127.0.0.1になっているのかなと)
まあ127.0.0.1以外にも、複数LANポートがあったり、LANポート1つでも 複数アドレス振れるからね。クライアントがどこにつなぎに行ってサーバがどこで待ってるかは 一致しないとね。TCP/IPの基本だからそのうち当たり前と思うようになるかもね。
>>143 クライアントがサーバーを認識できなかったらクライアントは何をするんだw
192.168.x.xのアドレスはLAN内でしか使えないことも注意。
146 :
デフォルトの名無しさん :2008/11/06(木) 16:32:18
またお前か
格納できることと格納されてることの間には深い溝がある
>>146 質問者がふざけた態度をとるな
鬱陶しい
150 :
146 :2008/11/06(木) 16:42:29
うるせえ、うぜえ回答者はだまってろ。分かる人、回答オネ。
手品じゃないんだから
>>150 DataTable tbl = (;ω;)dataGridView1.DataSource;
InvalidCastExceptionをハンドルしろスネーク!
154 :
146 :2008/11/06(木) 16:55:28
>>150 デバッグで式コピーして貼り付けろよ糞質問者
>>146 DataSourceはobject、元になるBindingオブジェクトが何を元に作られたかで何であるかは変わってくる。
キャストエラーが出るならDataSetではないということ。
157 :
146 :2008/11/06(木) 17:11:58
>>155 初心者OKスレに難しい事かくな。糞回答者
>>156 ありがとう。なるほど、DataSetやDataTableをもとに作られたわけじゃないんだね。
おいらには、むずかしいから、ちょっと間をおきます。ありがとう。
強気な質問者にワロタw
>>158 質問の時に
〜になるお(;ω;)
ですからwwwwww
微笑ましいのぅ
つうかGetTypeしてみりゃ中が何かわかるだろうに・・・・・
どうせDataSetでしょ
InvalidCastExceptionが投げられてる時点で型が違うことがわかるはずなんだけどなw
質問者がInvalidだったわけだ。わかるかいトミー?! ふぅはぁはふぁははばばはばぁ
163 :
146 :2008/11/06(木) 18:12:12
うぜえ、自演回答者は別として 飯食って頭冷やしてきたらわかりました。BindingSourceっていう型が DataSourceだったんですね。 DataSet ds = (DataSet)((BindingSource)dataGridView1.DataSource).DataSource; っていう一文にしたら良かったです。デザイナからDataSetとDataGridViewをくっつけたときは DataTableを飛び越えてデータの双方の移動があるみたいなのでDataTableはないみたいです。 真摯に教えてくださった方、ありがとうございました。 また、がんばります><;
ここまでおれの自演っと
理解はできないみたいだがコピペはできたみたいだな
System.IO.StreamReader sr = new System.IO.StreamReader (@"C:\test.txt", System.Text.Encoding.GetEncoding(932)); 「@"C:\test.txt"」の代わりにパスが格納してある変数を使いたいのですが どのように書けばいいですか? Visual C# 2008 w
すみません。途中で送信してしまいました Visual C# 2008 を使っています
strint path = @"C:\test.txt";
おいおいw string path = @"C:\test.txt"; System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.GetEncoding(932));
VisualC#2008 ExpressEditionのWindowsフォームで、 DataGridViewに「区分」のコンボボックスを表示させました。 (DB上にコードと区分の内容を持つテーブルがあり、ValueMemberにコード、DisplayMemberに内容が表示されるように設定しました) 区分コード他、約30カラム分のデータをDataTableに取得→DataGridViewのDataSourceに設定 という方法を現在とっているのですが、 DataGridViewが表示される際に区分のコンボボックスが何も選択されていない状態で表示されています。 DataTable内の区分コードに対応する区分をコンボボックスに自動で表示させるにはどのようにすればよいのでしょうか? どなたかヒントだけでも教えてください...
RichTextBox にてログを表示させ、常に最新の行を表示させたいので、 HideSelection を False にし、 richText.Text += newLog; richText.SelectionLength = 0; richText.SelectionStart = richText.Text.Length; richText.ScrollToCaret(); としているのですが、完全に最新の行を表示することができず、 ログ追加時の RichTextBox のサイズによっては最後の 1 行が半分で切れてしまったり、全く表示されなかったりします。 最新の行を完全に表示させる方法はあるのでしょうか。
173 :
172 :2008/11/06(木) 21:48:51
訂正です。 richText.Text += "\r\n" + newLog; でした。
ビットマップのラスタオペレーションって出来ないんでしょうか? APIを呼ばなきゃむり?
デザインのプロパティでフォントを10ptとかに設定するとなぜか9.75ptになってしまいます なぜですか?
>>175 ならないけど?
まあ実質10ptっていわれても96dpiだと
9.75em → 13px
10.5em → 14px
だからピクセルの端数をなくすとそうなるんでしょうが
TextBoxである文字列だけ色やフォントをカエルにはどうすればいいですか?
できません。 RichTextBoxかWPFへどうぞ
羽できないんですか(´・ω・`)生善治先生なら
タイプミスです できないんですか(´・ω・`)
どういうタイプミスしたら羽生先生が紛れ込むんだよw
>>175 同じ症状だ。仕様かと思ってた。
9pt → 9pt
10pt → 9.75pt
11pt → 11.25pt
12pt → 12pt
13pt → 12.75pt
14pt → 14.25pt
15pt → 15pt
16pt → 15.75pt
18pt → 18pt
3の倍数以外は丸められてるのかな。
>>175 Visual Studio の話ならスレ違い。
185 :
172 :2008/11/07(金) 00:40:54
>>177 なるほど、このメソッドはこういう仕様なのですか。
引き続きメッセージ関連を調べてみることにします。
ありがとうございました。
10ptのフォントの幅が何ピクセルか考えりゃ分かるよ
フレームワーク内でEventHandlerに使用されているデリゲートは一様にsenderの型がobjectになっていますが、 これは.NETのデザインルールでこうなっているのでしょうか? キャスト回数を最小限にする為に、あるクラス用にジェネリックなハンドラを自作してイベントを定義することに起因する問題はありますか? public delegate MyEventHandler<TEventArgs>(MyClass sender, TEventArgs e) : where TEventArgs : EventArgs;
イベントハンドラの使いまわしができなくなる タイマとボタンクリックで同じハンドラ、みたいな
質問があります。
WPFのアプリケーションのある動作(終了処理)に、ショートカットキーを割り当てたいと思います。
http://youryella.wankuma.com/Library/Extensions/Button/ShortcutKey.aspx を参考に、ボタンbutton1を作り、
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// Ctrl + W をボタンのショートカットキーとして処理する
if ((int)keyData == (int)Keys.Control + (int)Keys.W)
{
this.button1.PerformClick();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
public void button1_Click(object sender, CancelEventArgs e){
Close();
}
としてみましたが、この方法は、Formアプリケーションで、
using System;
using System.Windows.Forms;
であるため、WPFではそのままでは動作しません。
エラー 1 型または名前空間名 'Keys' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
となります。
WPFに対応するには、なにを参照すればよいんでしょう?
あるいはそもそも違う方法がありますか?
Formの場合は、プロパティでショートカットを指定できるのですが、WPFではショートカットの項目が見当たらないし。
Commandの仕事だな <Window.InputBindings> <KeyBinding Key="..." Command="..."/> </Window.InputBindings> <Window.CommndBindings> <CommangBinding Command="..." Executed="実行したいメソッド"/> </Window.CommandBindings> CommandはApplicationCommandsの中から適当に選ぶか自作するか あとはWindowのPreviewKeyDownとか
>>188 もちろん再利用性が限定されるのを認識した上で使用を予定しています。
アクセス権の指定はinternalの方が適切かもしれません。ごめんなさい。
主に、アプリ内部での独自のGUIイベント伝達に使用します。
内部の実装上、そのイベントにはホスト側で確実にハンドラがセットされ、
また、そのハンドラ内でsenderにアクセスするためにキャストが発生するので、
objectで渡すよりはクラスで渡した方が効率的に処理でき、コーディングもしやすいと考えています。
フレームワークでは汎用性を第一に考えた為にobjectになっていることは想像しましたが、
例えば、特定のクラスに特化したWebBrowserDocumentCompletedEventHandlerでもsenderがobjectとされている為
(このハンドラ内ではDOMアクセスを行うことが多いので、senderはWebBrowser型の方が都合が良い様に思える)、
この実装には何か特別な意味があるのかと思い質問した次第です。
他のWebBrowser実装を作ったときにデリゲート使いまわせないじゃん まあガイドラインは基本的に外から見えるものに対するものだから そうでないのについては自由にすればいいよ
はなくそうめぇなぁ
>192 ありがとうございます。
C++のconstみたいに、戻り値にconstを付けて値を変更できなくするようなことってできますか? 具体的には、内部のリスト(List<>)を外部に渡し、外部からは参照のみが可能としたいんです どなたかお願いします。
>>195 そういうとき.NETではList<T>ではなくReadOnlyCollection<T>を返すように実装する
おお、こんなのあるんですね。参考になります 早速実装してみます。ありがとうございました
次は「要素のメンバが変更できるじゃないか」ですね
>>190 もうすこし教えてください。
<Window.InputBindings>
<KeyBinding Key="W" Command="CloseCommand"/>
</Window.InputBindings>
<Window.CommndBindings>
<CommangBinding Command="CloseCommand" Executed="Close()"/>
</Window.CommandBindings>
としてみましたが、
エラー 1 タグ 'Window.CommndBindings' は、XML 名前空間 '
http://schemas.microsoft.com/winfx/2006/xaml/presentation ' にありません。
エラー 2 要素 '<Window.CommndBindings>' の終了タグが見つかりませんでした。
エラー 3 アタッチ可能なプロパティ 'CommndBindings' が、型 'Window' に見つかりませんでした。
エラー 4 型 'CommangBinding' が見つかりませんでした。アセンブリ参照が失われていないか、また、すべてのアセンブリがビルドされているかを確認してください。
といろいろエラーが。
なにか参照が必要でしょうか?
スペルミスぐらい脳内補完しておくれ
エラーメッセージちゃんと読めばすぐわかるのにw
MSDNとかヘルプ見る癖もつけるといいよ サンプル多いしね
>>200 、201
あ。そういうことか。
失礼しました。
4種類もエラーが出て、混乱してました。
で、スペルミスは修正して、
http://blogs.wankuma.com/kazuki/archive/2008/03/24/129252.aspx を参照しつつ、
<Window.InputBindings>
<KeyBinding Key="W" Command="Close"/>
</Window.InputBindings>
<Window.CommandBindings>
<!-- Closeコマンドが発行されたらClose_Executedを呼びます -->
<CommandBinding Command="Close" Executed="Close_Executed" />
</Window.CommandBindings>
としました。
すると、
エラー 2 'Window.Window1' に 'Close_Executed' の定義が含まれておらず、型 'Window.Window1' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
と。
Executedは、メソッドを呼ぶということで、.csには、Closeというメソッドはあるので、
<CommandBinding Command="Close" Executed="Close" />
としてみましたが、
エラー 2 デリゲート 'System.Windows.Input.ExecutedRoutedEventHandler' に一致する 'Close' のオーバーロードはありません。
アドバイスいただきたく。
>>203 Close_Executedを自分で定義すればいいだけじゃ?
>>204 それはいちおうやってみていて、
public void Close_Executed(object sender, CancelEventArgs e){
Close();
}
というのは試しているのですが、おなじエラーがなくならないのです。
なぜ頑なにヘルプを見ようとしない CommandBindingんとこにサンプルもあるのに
>>205 参考にしてるとこで
private void Close_Executed(object sender, RoutedEventArgs e)
となってるだろ?
実際それでやってみなよ。
みんな、エラーメッセージは怖くないんだ。とてもいい奴らなんだ。 だから、質問する前にちゃんと彼らの言っていることを理解してやってくれ。 エラーにヒントが山ほど書いてあるのに、無視してる人が多いので一応。 まあ、意味が分かりづらいってのは確かだけど。
でもアセンブリ参照が不足してる、とかのエラーはうぜえだけだな 不足してるなら勝手に追加してくれよ、と
それはそうだが、 エラー 1 Commangは追加されませんでした。 で丸投げしてくるぜ
>>206 頑なにヘルプを見ようとしないわけでなくて、
なにでどこを見たらいいか、ぴんと来てませんでした。
msdnを
C# CommandBinding
C# InputBinding
で検索して、解決しました。ありがとうございます。
>>207 おっしゃるとおり、そのように修正しました。
ありがとうございます。
>>208 エラーにヒントが書いてあることはわかるんですけど、
なかなか読み下せないんです。
>>209 そうそう。不足してるなら勝手に参照してくれよと。
ほんとにそうです。
勝手に参照されたら困るだろ アセンブリのバージョンもあるし、同じ名前の別の型があるかもしれない
213 :
208 :2008/11/07(金) 21:15:40
>>211 とりあえず、エラーの内容が分からなければエラー内容中のそれっぽい単語をググ(or MSDN)ってみるべし!
意味の分からない単語もついでにググってみるべし!
意味の分からない単語ググるのは意外と重要。
C# を勉強中なら特に。
>>212 ダイアログでも出して確認してくれればよくないか?
今みたいにエラーエラー騒ぐよりはずっとまし
余計なお世話だろ エラーとだけ告げてくれれば何の問題もない
そもそも参照出来てないのにどうやって追加するんだ。 そりゃまあ推測はある程度出来るにしても。
まあそういう機能があったら親切と言うよりお節介だよな。
>>214 それは組み込みのクラスライブラリのアセンブリだけを特権的に扱うことを
自動的に意味するわけだけど、そういうのはソフトウェアデザインとしてまずいでしょ。
勝手にダイアログが出たらウザイな エラーをダブルクリックするとGACからそれらしいアセンブリを探し出して リストアップしてくれるのなら有ってもいいが、 別に無くてもいいな。
Properties.SettingsってGUIで設定いじいじしたらコード自動生成してくれてかなり便利だけど 設定の保存場所が\Local Settings\Application Data\でアプリのあるフォルダじゃないから たとえばUSBメモリなんかで持ち歩きたいアプリじゃ使えないよね? そういうのに使いたい場合どうすんのん?
>>220 終了したときの画面の位置などを記憶させるものなんで、
消えて困るような情報はそこには置かないのがセオリー。
Saveダイアログボックスでセーブ先を指定できるようにする。
222 :
デフォルトの名無しさん :2008/11/08(土) 14:04:06
しかし思うんですが、C#やVB.NETでも同じように、オブジェクト指向設計や 同プログラミングでチームで開発するという場合、横割りでクラス分担する とかするという方法では、基本的にメソッドなどのインターフェースを最初に 決めておいて一斉に作成作業に取り掛かるとなったとき、 後から後から次々にここはこうでないとダメだった、こうしよう、あれはああ でなかったらできない、こうしよう、どうしよう・・・というインターフェースの変更が とめどもなく現れてくる予感がして、収集が付かなくなる感じがするのですが、 実際にやっておられる方々はそうした点をどうやって乗り越えておられるのですか? よろしかったら教えてください。
なんか新しい日本語だな
それは設計がダメダメだからだな。 というか、そんな奴に設計をやらせないというのが答えだな。
225 :
222 :2008/11/08(土) 14:23:20
>>224 そうですか、なるほど、ただ実際にはそれほど少ないインターフェースの
変更で済むものなのかということなのですが、たとえばこれを横割りではなくて
縦割りで任せるという方法でやっておられるところもあるでしょうか、
あるいはこれだと返ってほかに難点が生じるでしょうか。
マ板いけよ
>>225 縦割りでも横割りでもなく、階層化だろ。
縦割りっていうのは普通組織が階層化されていることを言うんだよw 恥ずかしい奴だな。
え?
縦割りは階層の上から下までの括りだろ
縦割り行政が階層化されているとな
232 :
デフォルトの名無しさん :2008/11/08(土) 19:39:29
縦割りの「割り」はどこに消えたんだろうか
ネタ…だよな…?
234 :
222 :2008/11/08(土) 20:49:55
>>227 縦割り、の意味は、結局、クラスの似たようなもののダブりはある程度許す
ことにして、開発スピードを重視し、手戻りの際の振り回されをできるだけ
すくなくするために自分でやれる範囲をできるだけ閉じた範囲に閉じ込める
方式にできるのではないか、という意味です。
ウィンドウ最大化で閉じて、次開くときサイズ設定ロードしたらノーマル状態で最大化サイズボスケテwww
Form.WindowState みて最大化されてたらフラグ立てて保存しろ 最大化されてたらBoundsじゃなくてRestoreBoundsを保存しろ
ほかにも、前回起動したときとモニタの状態が変わったので、 前回の位置のままだと画面の外になってしまうとか、 考えないといけないことはまだある。
>>234 意味不明な俺用語使わず最初からそう言えよ。つまり疎結合って言いたいんだろ?
しっかし、
>>222 のような酷い状況になるのは、単に設計した奴が無能なだけだと思うが・・。
最大化されてるのに他のソフトによって最大化されてないと偽装されてたらどうすればいい? もしかしたら俺のソフト未知のマルウェアの被害にあってるかもしれん
病院にいけ
stringに入っている文字列の文字コードが不明な場合、 どのように調べたらいいのでしょうか? よろしくお願い致します。
>>241 stringやcharはunicodeで固定、byte[]やコード変換前の状態で調べないとダメ。
243 :
デフォルトの名無しさん :2008/11/09(日) 12:23:09
指定されたキーは、このアルゴリズムには有効なサイズではありません。 といわれるのですがどうしてでしょうか? byte[] key = Encoding.ASCII.GetBytes("password"); TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); des.Key = key; des.IV = key; tran = des.CreateEncryptor();
そんな馬鹿なコード書くなって言うお告げだよ。 っていうかメッセージのまま。 TripleDESCryptoServiceProvider調べな。 つってもまず本当の問題は byte[] key = Encoding.ASCII.GetBytes("password"); こんなやり方しちゃ駄目ってことだ。
環境:C# VisualStadio 2005 データベースはAccess2003で、text,text2,text3という項目名のテキスト列が3列あります。 datagridviewに表示・入力した内容をDBへ反映したいのですが、 検索した情報を元に試してみて、主キーを更新しようとすると 「UPDATE ステートメントの構文エラーです。」と出て更新できません。 主キー以外の列は更新はできるのですが、主キーを更新できない原因が分かりません。 以下のようなコードなのですが、 private void Form1_Load(object sender, EventArgs e) { cn.ConnectionString = "Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=サンプル1.mdb"; //接続するDBを指定 da = new OleDbDataAdapter("Select * From week_table", cn); da.Fill(ds, "曜日情報"); da = new OleDbDataAdapter("Select * From test_table", cn); da.Fill(ds, "テスト情報"); dataGridView1.DataSource = ds.Tables["テスト情報"]; } private void button4_Click(object sender, EventArgs e) { for (int i = 0; i < ds.Tables["テスト情報"].Columns.Count; i++) { ds.Tables["テスト情報"].Rows[ds.Tables["テスト情報"].Rows.Count - 1][i] = dataGridView1[i, 0].Value.ToString(); } OleDbCommandBuilder cmd = new OleDbCommandBuilder(da); da.Update(ds, "テスト情報"); } 何故主キーだけ更新できないのでしょうか orz
VisualStadio2003では.NET2.0以降の開発はできないんでしょうか? 2005でないとダメ?
248 :
246 :2008/11/09(日) 12:43:36
書き忘れました。 練習段階のため、データベースには1行分しかデータが入っておらず、 1行分をちゃんと更新できるか試そうとしています。
249 :
243 :2008/11/09(日) 12:54:41
あちこちHPを見ていたのでDESCryptoServiceProviderを使う所を TripleDESCryptoServiceProviderを使っていたのが原因みたいです。 >このアルゴリズムは、64 ビットのキー長をサポートしています。 この差なのですね。
うん。 ただ、パスワードをそのままキーにするなんてのは本当はやっちゃいけない。 良くないサンプルばっかなんだけどね。
>>246 DataSet系ではできない。書き換えが必要な場合は直接SQLのUpdateを使う。
主キーの書き換えはRDB上はできるが、
書き換えを前提としたシステムデザインは避けるべきだというのが一般的で、
DBのフレームワークやミドルウェアでは許してないことが多い。
252 :
246 :2008/11/09(日) 13:39:08
>>251 すいません、まだレベルが低いので仰っている事があまり理解できません。
別のプログラムで、
private void button6_Click(object sender, EventArgs e) //更新処理
{
for (int i = 0; i < ds.Tables["テスト情報"].Columns.Count; i++)
{
ds.Tables["テスト情報"].Rows[Rcnt][i] = arrtxt[i].Text;
}
dataGridView1.DataSource = ds.Tables["テスト情報"];
OleDbCommandBuilder cmd = new OleDbCommandBuilder(da);
da.Update(ds, "テスト情報");
}
Rcntは現在アクティブなセルの行のインデックス番号、arrtxt[i]は更新用のテキストボックスの内容が入っており、
こちらでは主キーも更新できるようになっています。
今回は、datagridviewに直接入力して更新(主キー含む全てできるよう)をかけたいのです。
上記のプログラムを参考に246に書いたプログラムを作ったのですが、
どこをどうすれば主キーも更新できるようになるのか、
理解力に乏しいので分かりません orz
>>252 OleDbCommandBuilderを使わず.UpdateCommandなどを自前で実装する。
VC#2005でエクスプローラにある「名前」「サイズ」「種類」「更新日時」のような オブジェクト内の情報を分割?して表示させるコンポーネントはありますか?
DataGridView とか?
エクスプローラのはListViewだがデータバインドできないからなー
>>257 その見つかったってやつVSの機能の話じゃないの?
もしないとすると、じゃなくてそんなのないだろ
「combobox インクリメンタル」でぐぐってみた?
>>258 あるよ。ただ機能の名前が間違ってるだけ。
>>257 が言ってるのはオートコンプリート機能のことだろう。
あーでもYoutubeの検索みたいな機能のことを言ってるとしたら全然違うか。
絞り込みさせる程一つのコンボボックスに詰めるなといいたい
じゃなくて、だから通常のコンボボックスの使い方ではなくて ドロップダウン部分を候補一覧の表示に使いたいって意味かもよ。
オートコンプリートとインクリメンタルサーチの区別もできないって……
>>259 ばっちりGoodそのとおりでした。
名前を間違えていました。
というか、普通インクリメンタルサーチだろうと思っていたんだけど、これ、オートコンプリートっていうんですね。
まさかこんな簡単にできるとは…。
大感謝です。
265 :
246 :2008/11/09(日) 22:16:57
原因が判明したので一応報告に。
SQLで"text"が予約語?だったらしく、列名を"text1"に変えたら、
問題は解消されました。
>>253 返答ありがとうございます。
私が作ろうとしているシステム(学校の課題ですが)では、
ビルダーより253さんの仰っている、UpdateCommandなどを自前で実装する
というやり方を使ったほうが良さそうなので、そちらを使おうと思います。
またお世話になると思いますが、その節は宜しくお願い致します。
>>260 Youtubeの検索ってどんなのでしたっけ。あ、そうそう、これこれ。これを実現できたと思います。
>>262 そうです。ドロップダウン部分のリストを候補に使いたいと思ってました。
列挙体がFlagだからね…… if ( ( fsi.Attributes & FileAttributes.Directory ) == FileAttributes.Directory ) こうでしょう?
糞アプリ作ったんだけど使用メモリ20MBも使ってた 何でこんなに大きいの
ウィンドウを最小化してみようね
>>269 100%透明ではない部分が残ってるんだよ
アルファでフォームの背景透過は無理
273 :
269 :2008/11/09(日) 23:02:18
>>271 ウィンドウを最小化・・・?
すみません、意味がよくわからないです・・
フォームに何も貼らないでも10MBくらいだった気がするんだが
>>272 透過は不可能なのですか・・?
>>274 すみません、一昨日からずっとこれがわからなくて早とちりしてしまいました><
>>271 Vistaでは効かん罠。
もちろん、Vistaがまともに動く性能があれば20MBくらいなんてことないけど。
string temp = ">゚"; bool b = temp.StartsWith(">"); とするとなぜかbはfalseになります。 ゚が悪いようでこれがないか他の文字なら何とかなるのですが, なぜこんなことになるのかがわかりません. 文字コードとか何か関連しているのでしょうか?
>>278 temp.StartsWith(">", StringComparison.OrdinalIgnoreCase);ならtrueになるんだな。
このメソッドは、現在のカルチャを使用して、単語 (大文字/小文字を区別し、カルチャに依存した) 比較を実行します。 bool b = "か゛".StartsWith("か"); //false bool b2 = "か゛".StartsWith("が"); //true カルチャに依存した比較だと次の文字に濁点、半濁点が付いてるかも判断するみたいだな
>>277 Vistaなら既定ではprivateワーキングセットしか表示しないからガタガタ言う奴もあんまいないっしょ
>>269 アイコンにアンチエイリアスがかかっているのが原因。
それを取り除くか、P/InvokeでUpdateLayeredWindow()を呼び出す。
283 :
280 :2008/11/10(月) 09:09:53
半濁音がついているとしてfalseになってしまったのですね. 記号の判別の関数だったので思いもよりませんでした. ありがとうございました.
プラグイン機能のあるアプリケーションを作成しているのですが、 プラグインからの外部プロセスの起動を抑制するにはどうしたらいいでしょうか? ファイルやレジストリなどは該当するSecurityPermissionAttributeがあったので それでアクセスを禁止することができたのですが、外部プロセスに関するものは 見あたりません。 ネイティブコードからのアクセスならDllImportなどをリフレクションで調べて弾けるのですが…
285 :
デフォルトの名無しさん :2008/11/10(月) 13:19:19
コ(ry
環境アクセス権限みたいのでいけなかったかいな?
VC#2008でWindowsアプリケーションを作ってるんだが、 DataGridView内の特定の行だけ罫線のスタイルを変更することって可能?
289 :
284 :2008/11/10(月) 18:42:26
>>287 ためしに
[EnvironmentPermission(SecurityAction.Deny, Unrestricted = true)]
と基底クラスに付けてみましたが、Process.Start()で普通に
外部プロセスを起動できてしまいます orz
>>289 Process.Start()はFullTrustをLinkDemandで要求している。
LinkDemandはJIT時に一回チェックするだけなので既定クラスでセキュリティを
制限した時には既にJITが終わっていると考えられる。
プラグインが独立したアセンブリならアセンブリの属性で制限をかけたらだめかな?
C#である程度形の見えたプログラムができかけたときにとある機能を付け加えようと思いAPIを調べたらPHP用しか見つかりませんでした。 C#から一時的にPHPのプログラムを呼び出す形でそのPHP用のAPIを使ってみたいのですが、C#から呼び出すことはできるのでしょうか?
>>291 Process.Start()
何の API かしらんが多分よく探せば C# 用のやつもあるだろうけどな。
とある機能というのを晒せばだれか教えてくれるよ
>>289-290 そうことをするためにアプリケーションドメインというものがあるのだと思うんだけど
>>292 ありがとうございます。
>>293 Asteriskを用いたSIPサーバの機能管理ができるAsterisk Managerというものを使用しようとしてAPIを探していました。
自分の英語力不足でPHP用しか見つからなかったのですorz
STAだかなんだかしらんが、マルチスレッドで呼び出せないメソッドとかいい加減にしろよ 大きなお世話だっつの・・
297 :
284 :2008/11/10(月) 22:00:09
>>290 ちょっとよくわからないのですが、プラグインのインターフェースが定義されているアセンブリ
にこの属性を適用するということでしょうか?
試しに
[assembly: EnvironmentPermission(SecurityAction.LinkDemand, Unrestricted = true)]
を付けてみましたが、
アセンブリの生成に失敗しました -- アセンブリの SecurityAction 型が無効です。
と怒られてしまいました。どうやらRequest〜という物しか適用できないみたいですが、
RequestOptionalをつけてReadで読み取れるものを指定してやればいいのでしょうか?
Readを指定しないと元のプログラムからもファイルアクセスができなくなってしまうみたいですが…
いやちがう、だから後から制約を適用することはできないって話。
まー
>>294 みたいにやればできると思うけど、なれてないとイヴバラの道かもな…
っていうかLinkDemandうざすぎるぜ。
パフォーマンス上の理由なんだろうけど。
>イヴバラ イバラだよっ
300 :
284 :2008/11/11(火) 00:00:57
>>298 調べてみましたがますます?が増えるばかり… orz
LinkDemandの説明を見てて思ったのですが、プラグインのローダーを動的にコンパイルし、
そいつに[assembly: SecurityPermission(SecurityAction.RequestOptional)]を当てておけば
プラグインのロード時にはFullTrustは取れないと思うのですがこれでいけますかね?
特定のフォルダ以下のフォルダ名とファイル名及び内容を暗号化したいと考えております。 DESCryptoServiceProvider、CryptoStreamで暗号化した場合に出力される文字でフォルダ またはファイル名として使用した場合に問題のある文字は含まれているのでしょうか?。 また出力される文字範囲はどういうものでしょうか?。
文字って 出力されるのはバイト列だよ。 どんなバイト列でもあり得る。 16進文字列にでもしな。
>>302 たしかにバイト列でした、ありがとうございます。
>>300 // AbstractPlugIn.cs プラグイン抽象クラス ここでLocalIntranetに制限
using System.Security.Permissions;
[assembly: PermissionSet(SecurityAction.RequestOptional, Name="LocalIntranet")]
public abstract class AbstractPlugIn {
public abstract void Start();
public void SecStart() { Start(); } // LocalIntranetの制限下でStart()を実行
}
// MyPlugIn.cs プラグイン実装クラス
public class MyPlugIn : AbstractPlugIn {
public override void Start() {
System.Diagnostics.Process.Start("notepad");
}
}
305 :
304 :2008/11/11(火) 10:05:22
/* csc /t:library AbstractPlugIn.cs csc /t:library /r:AbstractPlugIn.dll MyPlugIn.cs csc /r:AbstractPlugIn.dll testa.cs testa */ using System; using System.Reflection; class Startup { [STAThread] static void Main() { try { AbstractPlugIn plugIn = (AbstractPlugIn) Activator.CreateInstance(Assembly.LoadFrom("MyPlugIn.dll").GetType("MyPlugIn")); // plugIn.Start(); plugIn.SecStart(); } catch (Exception ex) { Console.WriteLine(ex); } }}
306 :
304 :2008/11/11(火) 10:14:58
今回の問題解決のためにプラグインを動的に読み込む必要はないのだが、 プラグインは一般的に動的に読み込むことが多いのでそうしている。
ディレクトリの削除は出来るのに名前を変えようとすると共有違反になるのはどうしてでしょう? if (Directory.Exists(node.Name)) { Directory.Move(node.Name, path_move); }
>>307 node.Nameとpath_moveのパス名の親ディレクトリが違うだけじゃねーの?
>>308 ヒントありがとうございます。
path_moveの内容がnode.Nameの子フォルダになっていました-;。
すいません。
310 :
269 :2008/11/11(火) 16:36:04
>>282 ありがとうございます
Win32APIの呼び出しなんてやったことがないのでできるかわかりませんが、がんばってみます(`・ω・´)
311 :
デフォルトの名無しさん :2008/11/11(火) 17:26:07
質問です。 Webページから、クライアントのローカルのEXEかDLL内のAPIをコールしたいと思ってます。 通常のブラウザのセキュリティでは無理だと思いますので、そのWebサイトは信頼済みサイトに登録してあるのは前提です。 ローカル資産にアクセスするDLLかなにかをインストールしてIEのプラグインのようなものを作りたいのですが、 C#で可能ですか? また、ヒントとなるサイト等ありましたら、教えてください。
313 :
311 :2008/11/11(火) 17:42:55
>>312 ありがとうございます。
C#でActiveXコントロールを作り、ローカルへインストールしておけばよいということですね。
314 :
284 :2008/11/11(火) 17:43:13
>>304 おお、うまくいきました!
ですが、本体のDLLに組み込んだところ起動時にエラーが… orz
書いてくださったサンプルではうまくいったので、もう少し悩んでみます。ありがとうございました。
path_outのファイルの最後にゴミがついてしまうのですが原因は while ((readLen = cs.Read(bs, 0, bs.Length)) > 0) { fs_out.Write(bs, 0, readLen); } にあるのでしょうか? FileStream fs = new FileStream(path_in, FileMode.Open, FileAccess.Read); CryptoStream cs = new CryptoStream(fs, transform, CryptoStreamMode.Read); FileStream fs_out = new FileStream(path_out, FileMode.Create, FileAccess.Write); byte[] bs = new byte[256]; int readLen; while ((readLen = cs.Read(bs, 0, bs.Length)) > 0) { fs_out.Write(bs, 0, readLen); } fs_out.Close(); cs.Close(); fs.Close();
317 :
316 :2008/11/11(火) 19:04:40
別件でした
318 :
311 :2008/11/11(火) 19:12:50
C++にしなさいよ
C++でやってることをC#でやればいいんじゃね? ActiveXってCOMインターフェイス実装して regasmのときにレジストリに書くだけじゃね
あれこれ悩んでる間にVC++で簡単に作れるよ
動画編集で使うようなタイムラインを編集するアプリを作りたいのですが、 タイムラインのグラフを表わすオブジェクトをどうやって実装しようか悩んでいます。 動作としては、 ・横に細長い単色で塗りつぶしたオブジェクト ・ドラッグすることにより左右にのみ動かせる ・左右のみ端をドラッグすることによってサイズ変更ができる ・移動とサイズの変更は8ドット単位 ・ダブルクリックすることによりイベントを発生させる 実装方法としては ・描画からイベント処理まですべて自分で実装する ・いずれかのコントロールを継承して実装する のどちらがよいのか、 コントロールを継承する場合は、 ・どのコントロールを継承して、 ・どのようにプロパティを設定して、 ・どのイベントを処理すればよいのか どなたかヒントを下さるとありがたいです。
どちらがよいかと言われたら、Controlから継承して全部自前で完璧に作った方がいいに決まってる
>>322 そういうのは大人しくControlから派生したほうがいいよ
325 :
322 :2008/11/12(水) 11:24:46
>>323 >>324 どうもありがとうございます。Controlを継承してやってみることにします。
Visual Studio 2008のデザイナで、突然 「○○○(コントロール名)は宣言されていないか、または割り当てられていません」 というエラーが出てデザイナで表示されなくなってしまうことがあります。 .Designer.csを見るとちゃんと宣言されているし、InitializeComponent()の中でnewされている ようなのですが… 直接このファイルを変更したわけでもありません。 どうすればいいのでしょうか?
いったんそのデザイナウインドウを閉じて再度デザイナを表示。 それでだめならウインドウを閉じてからプロジェクトをコンパイル後、再度デザイナウィンドウを開く。
>>326 この前同じ感じになって結局OS入れなおしたよ
なぜフォームだけformではなくFormなんでしょうか? エスパーよろしく
publicだからかな
パブリックというだけで特別扱いですか だったら俺もパブリックに産まれてきたかったな
君の名前も大文字で始まると思うが。
デザイナから必要じゃなくなったコントロールを消しても Designer.csからコードが消えてない時があるね。 コンパイルエラー出るから手作業で消せばいいだけだけど。 でもイベントの削除の時はコードが消えるときと消えないときがあるから面倒。
ToolStripStatusLabelを一つだけ右に寄せようと思ったらプロパティにAlignmentが無い そういうコンポーネント買うしかないんですか?
は?
>>335 Springプロパティをtrueに設定したダミーのToolStripStatusLabelを左に置く
かめはめ?
ほ?
例外に関する質問です。 例外の発生位置はTargetSiteでわかりますが、 例外のキャッチ位置はわざわざ自分でnewしなおすかRefrection.MethodBase.GetCurrentMethod()しないとだめでしょうか?
配列の配列について質問です。 firstlinecell1 firstlinecell2 firstlinekeywordcell3 secondlinecell1 secondlinekeywordcell2 secondlinecell3 thirdlinekeywordcell1 thirdlinecell2 thirdlinecell3 とデータがあるとき。keywordにマッチしたセルを出力するには、どうしたらいいですか? using System.IO; string fileName = ("c:\celltest.txt"); string[] lines = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS")); string[] cell = line.Split('\t'); foreach (string line in lines) { Console.WriteLine(cell[2]); //3セル目を出力 if (cell.Contains("keyword")) Console.WriteLine(cell); //ここがうまくいかない。 if (cell.Contains("keyword")) Console.WriteLine(cell.Contains("keyword"));//これもだめ。 Console.WriteLine(cell.Contains("keyword")); //これもだめ。 } }
>string[] cell = line.Split('\t'); lineってどっから出てきたの? linesの各要素を'\t'でSplitしたいんじゃないの? >if (cell.Contains("keyword")) Console.WriteLine(cell); //ここがうまくいかない。 >if (cell.Contains("keyword")) Console.WriteLine(cell.Contains("keyword"));//これもだめ。 >Console.WriteLine(cell.Contains("keyword")); //これもだめ。 cellじゃなくてlineじゃないの?
たぶんこういうことだべ foreach(string line in lines) foreach(string cell in line.Split('\t')) if(cell.Contains("keyword")) Console.WriteLine(cell);
Collectionが理解できてないと思われる
質問用に清書してたら書き写し間違えました。 string[] lines = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS")); foreach (string line in lines) { string[] cell = line.Split('\t'); Console.WriteLine(cell[2]); //3セル目を出力 if (cell.Contains("keyword")) Console.WriteLine(cell); //ここがうまくいかない。 if (cell.Contains("keyword")) Console.WriteLine(cell.Contains("keyword"));//これもだめ。 Console.WriteLine(cell.Contains("keyword")); //これもだめ。 }
>>343 そうでした。できました。
ありがとうございました。
清書とかアホか コピペしろ
検索文字列を渡して、その文字列によって絞り込んだIEnumerable<hoge>を返すメソッド名はどのようなものが適切でしょうか?
C#はマウスでミドルクリックを使うことを想定して設計されていないのでしょうか?
ポインティングデバイスを想定に入れた言語ってどんなんだ ブロックを組み合わせてってやつとかか?
MouseClick等のMouseEventHandler/MouseEventArgをとるイベントを使いなされ
そんなことはないよ
テキストの背景を透明にしたくて、WPFに足を踏みいれました。 xamlではオブジェクト(?)を、xmlみたいに書きますが、 マウスのドラッグで、重なりを変えたいときには、 直書きしているとむずかしいと思います。 XAMLプログラミング WPFアプリケーションの概要と開発 エッセンシャルWPF はざっとめくったのですが、いまいちよくわからん。 <Grid> <Image Margin="0,0,0,0" Name="background" Source="/View;component/background.png" /> <Image Margin="0,152,0,-34" Name="lines" Source="/View;component/lines.png" /> <TextBox Background="Transparent" Name="TextBox1" FontSize="14"> </TextBox> <TextBox Background="Transparent" Height="23" HorizontalAlignment="Right" Margin="0,117,94,0" Name="TextBox2" VerticalAlignment="Top" Width="120" /> </Grid> とあるときに、クリックやドラッグで重ねの順番を変えたいときには、なにをしたらいいんでしょう?
Panel.ZIndex添付プロパティを使う
>>356 早速ありがとうございます。
Panel.ZIndex添付プロパティ、使ってみました。
おお、すごい。こうなるんですね。おなじ値だと、おなじレイヤーになるとか、番号が飛んでも平気とか、かなり柔軟ですね。
つづいて、ここに変数を使うにはどうするんだと考えて、
Panel.ZIndex="m"
と書き、
.csのフィールドに、
Int32 m = 6;
とか入れてみたのですが、
Int32 m = 6;
エラー 1 無効なトークン '=' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。 D:\smartcalendar\PileDesktop\simpleView\simpleView\view.xaml.cs 35 7 simpleView
Panel.ZIndex="m"
エラー 2 m は Int32 の有効な値ではありません。
とエラーになってます。これはどのようにしたらよいでしょう?
添付プロパティは Panel.GetZIndex(element); Panel.SetZIndex(element, m); の形で使う
すみません、質問いいですか? 会社のPCでスクリーンセーバーをカットしたいのですが (アドミニ権限がありません) いい方法が見つかりません。 どなたか良いお知恵をお貸し下さい。 お願いします。
仕事してればスクリーンセーバーは動かない 働け
それってC#と関係ある質問なの?
C#でプログラム作って解決したいんじゃないの? SS起動フラグ立てたり定期的にマウスを1ドットずらしたり使ってないキーを押下するエミュレーションを作ったり いや俺は作り方知らんけど
それNETでできるの?
.NETでは可能だがC#で可能かは知らん
とりあえずwinapi使えばできるだろ
そんな糞みたいな方法じゃなくて WM_SYSCOMMANDに応答するだけのウィンドウ作ればいいんじゃね?
スクリーンセーバーってユーザーは止めれないんだっけそもそも? だとしたらそんな設計っておかしくないか? まあここで言っても仕方がないことだが
ゲームなんかではスクリーンセーバー抑止してくれるのあるよね。 どうやってるのかは知らないけど。
SC_SCREENSAVE ってフォアグラウンドのウィンドウにしか来なかった記憶が
プログラムで省電力モードを起動させないのは楽だけど、 スクリンセーバーを起動させないのはめんどくさかった記憶がある。 ちとメモを探してみるよ。
マウス動かすソフト作れ
SystemParametersInfo でだめなん? SPI_SETSCREENSAVEACTIVE を FALSE に。 C# じゃないけど。
>>358 msdnを見ました。
UIElementってなんだ…?
public static int GetZIndex (UIElement element)
わからないのでとりあえず
Panel.GetZIndex(element);
Panel.SetZIndex(element, m);
を.csのフィールドに書いたら、
エラー 1 無効なトークン '(' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。
とかいわれてます。
もうすこしアドバイスを。
>>374 メソッドの中に書けw
Get/SetZIndexメソッドとその引数の意味はMSDNに書いてある。
パラメータはわかりました! element プロパティ値を適用する要素。 value この要素が z 面で表示される順序。 あり、パラメータの定義はわかったけど、「プロパティ値を適用する要素。」ってなんだ!? コードのほうは、.csに、 public static void SetZIndex(UIElement element, int value){ int m = 5; Panel.GetZIndex(element); Panel.SetZIndex(element, m);} として、とりあえずコンパイルは通ったけど、起動しない…。 マウスのドラッグで、重なりを変えたいので、マウスイベントをメソッドにする必要があります。 マウスのクリックのイベントとは、 ・MouseDownイベント ・Clickイベント ・MouseClickイベント ・MouseUpイベント からなるそうなので、ドラッグのイベントとは、 ・MouseDownイベント ・Clickイベント ・MouseClickイベント ・MouseMoveイベント(そんなのあるの?) ・MouseUpイベント ということでしょうか。
普通のプロパティなら m = button.ZIndex + 1; button.ZIndex = m; と書くところを、添付プロパティでは次のように書く m = Panel.GetZIndex(button); Panel.SetZIndex(button, m);
378 :
デフォルトの名無しさん :2008/11/13(木) 23:57:43
デバイスマネージャ内の任意のドライバのバージョン等を取得するにはどうしたらいいんでしょうか。
wmi
TreeViewのスクロールに関する質問です。 TreeViewのScrollableを有効にして、Drag&Drop中にTreeViewの上部や 下部にマウスを移動したときにスクロールするようにしたいのですが、 ScrollBarクラスのValueのようなものがなくてやり方が分かりません。 よろしくお願いします。
381 :
デフォルトの名無しさん :2008/11/14(金) 00:48:16
wmiの中のどれなのか...
vstoに関する質問です。OSはWinXPPro、VS2005、c#を使って開発しています。 Office2007に関する内容です。 Word2007で表を追加すると、画面上部にレイアウトリボンが表示され、 レイアウトリボンの中では、表の各セルのサイズがわかります。 このサイズ(特に高さ)をC#でプログラム的に取ってきたいのですが、どのようにすればよいでしょうか? 教えていただけると幸いです。
C#とASP.NETって同じなの?
同じものに別の名前を付けると思ったんだね
>>383 C#は言語だけどASP.NETは言語じゃないよ
俺がお前でお前が俺なの?
388 :
デフォルトの名無しさん :2008/11/14(金) 19:54:53
>>384 超初心者の質問って脳をものすごく活性化させてくれるよね
C#2008ExpressEdition GetWindowRect()を使ってみたくて Windowsフォームアプリケーションで生成されるFrom1の using System.Windows.Forms; と namespace WindowsFormsApplication1 の間に検索した [StructLayout(LayoutKind.Sequential)] private struct RECT { public int left; public int top; public int right; public int bottom; } [DllImport("user32.dll")] private static extern int GetWindowRect(IntPtr hwnd, ref RECT lpRect); をコピペしました ほかにボタンをForm1に貼り付ける等の手を加えていませんがエラーがでます 「」で囲んだ部分がエラーの波線が表示されたところです private struct 「RECT」 {→名前空間で定義された要素は明示的に private、protected、または protected internal に宣言することはできません。 [DllImport("user32.dll")「]」→修飾子 'extern' がこの項目に対して有効ではありません。 private static extern 「int」 GetWindowRect(IntPtr hwnd, ref RECT lpRect);→クラス、デリゲート、列挙型、インターフェイス または構造体が必要です。 外部dllの関数を使うためにはこれらをどのように修正すればいいですか?
>>389 一瞬どこがおかしいのか分からなかったが、そこに貼っちゃいかんw
partial class Form1 : Form
{
【ここに貼る】
...
}
あと、 using System.Runtime.InteropServices; も忘れずにね。
internal static class NativeMethods { internal struct RECT {略} [DllImport("user32.dll")] internal static extern int GetWindowRect(IntPtr hwnd, ref RECT lpRect); } こうするのがMS推奨
ワラタ
user32.dllって64bit版にもあるの?
あるよ
>>393 同じ名前である。
だからIntPtrなどを使ってうまく書けば32ビット64ビット両方で動くプログラムが書ける。
というかサポ切れ以外の DLL はまったく同じ名前で基本ある。 … 〜32 と付いた 64 bit の DLL が。
質問です。P/Invokeで System.Runtime.InteropServices.ComTypes.FILETIME をメンバに持つ構造体があるのですが、これから直接DateTimeを得る方法がわかりません。 DateTime.FromFileTimeは引数がlong型一つだけですし、 現状では、FileTimeToSystemTimeで一度SYSTEMTIMEに変換し、 年からミリ秒までを、DateTimeのコンストラクタの引数に与えているのですが、回りくどいような気がするのです。
ビット演算でhighとlowをあわせてlongにする
*(long*)(void*)
と、new DateTime(1601, 1, 1).Ticks を足せば Ticks になるな
401 :
397 :2008/11/14(金) 22:57:21
ビット演算にアンセーフコード! 自分の理解ではハードルが高いですが、一つ一つ試してみます。 回答ありがとうございました。
C#でpopを作ろうとしています。
codezineのソースを元にしようと思って改良しているのですが、
http://codezine.jp/article/detail/477?p=1 じっさいに受信しようとしたら、
private static void Mailtest_Sample1()
となっていて、staticになっているため、変数を使用できません。
string = mailtext
で設定した変数に、1通ごとのメールの本文を入れようとしています。
private void Mailtest_Sample1()
のようにstaticを削除すると、
エラー 1 静的でないフィールド、メソッド、またはプロパティ 'PopMail.PopMailMain()' で、オブジェクト参照が必要です
static void Main(string[] args) { PopMail(); }
とエラーになります。
staticを削除してかつ動くようにするには、どうすればいいんでしょう?
日本語でおk >staticになっているため、変数を使用できません。 意味分からん。いつからstatic変数が使用できないようになったんだよ。 >string = mailtextで設定した変数に 意味分からん。いつから予約語に代入できるようになったんだよ。 >staticを削除すると 意味分からん。いつから静的メソッドからインスタンスメソッドが呼び出せるようになったんだよ。
とりあえず中断して入門書を読め
多分 new Program().PopMail() かなんかにすりゃ動くと思うけど
static void Main(string[] args) { PopTest(); MailTest(); } private static void PopTest(){ ... } private static void MailTest() { MailTest_Sample1(); MailTest_Sample2(); } private static void MailTest_Sample1(){ ... } private static void MailTest_Sample2(){ ... }
いくらコピグラマでもスタティックメンバとインスタンスメンバの違いぐらいわからないとダメだろ
2008になってから、プロジェクトをはじめて読み込んだときなどにエラーが誤検出されるのですが、 これを回避する方法はあるでしょうか? 具体的には、System.Drawingを参照設定に含めているにもかかわらず、 CS0234が表示されたりします。ビルドすればすべて消えるのですが、なんだか気持ちが悪いです。
いいじゃねえかビルドすれば
コメントありがとうございます。
>>404 string mailtext = null;
mailtext = pop.GetMail((string)list[i]);
でした。
静的メソッドからインスタンスメソッドって呼べないですよね?
でも、Mainメソッドは静的メソッドですよね?
じゃどうしてMainメソッドからインスタンスメソッドは呼べるんですか?
>>406 とりあえず動かなかった…です。
>>407 string mailtext = null;
static void Main(string[] args) //ここでアセンブリ参照がないエラー。
{
PopTest(); //受信処理
//MailTest(); //表示処理
}
private void PopTest(){
mailtext = pop.GetMail((string)list[i]);
if (テキストの場合) MailTest_Sample1();
elseif (mimeの場合) MailTest_Sample2();
}
/*private static void MailTest()
{
MailTest_Sample1();
MailTest_Sample2();
}*/
private void MailTest_Sample1(){
Console.WriteLine(mailtext);
}//テキストの場合
private void MailTest_Sample2(){
Console.WriteLine(mailtext);
Console.WriteLine();//添付部分
}//mimeの場合
のように書き換えてます。
受信したときに取得したmailtextをそのまま表示で使おうと思ったら、staticではだめだったので、staticを削除しました。
>>408 static void Main(string[] args)
private static void PopTest()
private static void MailTest()
private static void MailTest_Sample1()
private static void MailTest_Sample2()
は、ぜんぶスタティックメンバですか?
インスタンスメンバにするには、
private void PopTest()
private void MailTest()
private void MailTest_Sample1()
private void MailTest_Sample2()
と、staticをとればいいかと思ったけど、それじゃだめ?
とりあえず何かやる前に基本的な言語仕様くらいは勉強してもらいたいもんだ…w
型とインスタンスくらいは理解してないとVBすら使えないよ
インスタンスメソッドはそのクラスをnewしないと使えない
クラス内でプロパティかなんかでインスタンス生成すれば スタティックみたいに使えないことも無いけどな
インスタンスを生成しまくるとどうなるんですか?
たくさんインスタンスが作られる 参照が残ってなければガベコレが起きる
状態を保持する必要があるからインスタンスメンバにしてるんであって
すべての間違いのもとは
>>411 にある。
>静的メソッドからインスタンスメソッドって呼べないですよね?
呼べません。
>でも、Mainメソッドは静的メソッドですよね?
そうです。
もしインスタンスメソッドならフレームワークから呼び出せません。
>じゃどうしてMainメソッドからインスタンスメソッドは呼べるんですか?
new演算子でインスタンスを作成し、そのインスタンスメソッドを呼び出し
てるからです。
ミイラ取りが(ry
>>417 、
>>418 、
>>423 、ありがとうございます。
静的メソッドからインスタンスを呼ぶときには、new インスタンスの所属するクラス名とする。たとえば、メインからFormのクラスを呼ぶときには、
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());
}
とする、という理解でよいでしょうか?
そうなると、先の例(
>>412 、
>>407 )でいうと、これはクラスはひとつしかない。したがって、クラスを呼ぶことはできない? となってしまうのですが。
それとも、静的メソッドからインスタンスを呼ぶときには、new インスタンス名でいいんでしょうか?
それなら、
string mailtext = null;
static void Main(string[] args) //ここでアセンブリ参照がないエラー。
{
new PopTest(); //受信処理
//MailTest(); //表示処理
}
private void PopTest(){ ... }
でよい、ということになる?? ためしたけどならない。
付随する疑問。
インスタンスからインスタンスを呼ぶときには、newは必要なの? 必要ないように思いますが。
インスタンスから静的メソッドを呼ぶときには、単にメソッド名をかけばいい?
インスタンスの作成は、
データ型 変数名 = new コンストラクタ;でおこない、コンストラクタ名はクラス名とおなじにする、とあります。
Application.Run(new Form());
の場合、データ型と変数名は省略されている、と考えればいいの?
省略されているとして、なにが省略されているの?
いやほんと本じゃなくてどっかの入門サイトで良いからまず基本を与えられてくれ
Application.Run これはstaticメソッド Applicationで始まってるのは全部そう List<int> list = new List<int>(); list.Add(1); これはインスタンスメソッド インスタンスメソッドはインスタンスをnewしてから呼び出す PopTestだったら、そのメソッドがあるクラスをHogeとすると Hoge hoge = new Hoge(); hoge.PopTest() こうやって呼び出す
初心者スレでそんな事を言うな
class Hoge { public void Run() { }
ミスって送信しちまった
もうこれでいいよ static void Main(string[] args) { Hoge hoge = new Hoge(); hoge.Run(args); } class Hoge { public void Run(string[] args) { // thisは自分自身のインスタンスを指す(省略可能) this.PopTest(); this.MailTest(); } private void PopTest() {略} private void MailTest() {略} }
>>425 インスタンスは型(クラス)をもとにして作られた実体
stringと"この文字列"の関係が、型とインスタンスの関係
インスタンスに関連付けられたメソッドがインスタンスメソッド
>>428 理屈がわからないならともかく、書き方の形式がわからないのは
どっかのサンプル打ち込んで動かして慣れろとしか言えないでしょ
>>425 みたいな思考をするタイプって時々いるねw
なにか「ゲームの世界を支配するルール」を捕らえることに興味があるようだけど、
プログラミング言語の学習方法としてはそういうアプローチはダメ過ぎる。
静的メソッドとかインスタンスとかクラスといったものの意味を鍵カッコに入れて
・[静的メソッド]から[インスタンスメソッド]を呼ぶことはできない。
みたいなものををつらつら並べて記憶することなんかに何の意味も意味もないんだよ。
それは「ゲームのルール」じゃなくて、基本法則から論理的に導かれる
ただの論理的必然に過ぎないんだから。
大事なのはプログラミングの世界の基本法則(そもそもクラスって何よ?、とか)
をきちんと理解することなんだよ。
たかが各言語の規則にすぎないものを、何を大げさな
ゲームの世界を支配するルールと 世界の基本法則の違いがわかりますん まあ帰納と演繹ってことなんだろうけど
論よりRun
おっさんくさいけど上手いこと言った
初めまして。よろしくお願いします。
C#を使って、
ttp://smdn.invisiblefulmoon.net/mnemorepos/20050216-00.html を書いてみたのですが、AxWebBrowser::GetOcx( ) の参照から SetClientSite(this as IOleClientSite) すると、
その後OcxのContainerがAccessViolation状態になり、Navigate2を使用すると、TargetInvocationExceptionが発生してしまいます。
これは移植の時にミスをしているのでしょうか?それともサンプルの時点で発生する問題なのでしょうか。
インターフェースの実装部分は、GetContainer以外は NOTIMPL(=-2147467263)などを返したりしていますが、どれも呼び出された形跡はありませんでした。
COMの定義などはReflectorを使って、FrameworkのDLLから必要部分を抜き出して使用しています。
>>438 VB のサンプルで試してみればいいじゃん・・・
>移植の時にミスをしているのでしょうか ソースみないとナントモカントモ
オリジナルのメソッド作りたいんですけど、CSファイル分けたとこから呼び出すとusing が必要なんですか?
名前空間が別ならね
そこからかよ
444 :
438 :2008/11/15(土) 23:17:32
>441 最初に書いてあるusingは、「名前空間.クラス名」と書くと長くなるのを「クラス名」と書けるようにする為のものです。 ソース内で単にクラス名だけを書くと、「同じ名前空間内」→「usingで指定されている名前空間内」の順に検索されます。 つまり、同じ名前空間にあればusingは必要ありません。 それより、メソッドはクラスに属していないと駄目とか、そっちのほうに引っかかりそう。 入門サイトで基本的な文法を勉強して、あとはVisualStudioに任せて書いてみるのが一番の近道かと。 >439 VBで今書いてるのですが、今まで書いたことがないのでなかなかコンパイルまで辿り着けません。 >440 このスレで使ってるロダってありますか?後、あげるときはソリューションごとの方がいいでしょうか?
>>444 気にしないでどこでもいいからとりあえず一式上げてみればいいんじゃね?
個人特定されるような情報は入れないようにしてさ・・・
たぶんこのスレの人間なら大体の人間一瞬でわかると思うぞ
某有名なサイトで、コンストラクタについて勉強していたのですが、 分からないところが出てきたので教えてください。 public Person(string name, int age) { this.name = name; this.age = age > 0 ? age : UNKNOWN; } ↑この部分は分かります。 public Person(string name) : this(name, UNKNOWN) { } ↑この部分の、「:」がどういう意味を持って使われているのか、明確にしたいです。 以降の用法はなんと呼ばれているのでしょうか?
>>446 クラスを継承させた場合、親クラスのどのコンストラクタを呼ぶのかを指定するため、「:base(...)」と書いて上げます。
何も書かなければ、デフォルトコンストラクタ(引数無いヤツ)が呼ばれます。
親クラスではなく、自クラスの別のコンストラクタを呼ばせたい時は、「: this(...)
と書きます。
呼び名は知りません。
>>446 どういう使い方なのかわからないけど、クラスを派生させる場合は
コンストラクタを継承できないので、基本クラスのコンストラクタを明示的に
呼び出す必要がある。そのためのキーワードが【:】。
基本クラスのコンストラクタが既定(引数なし)の場合は呼び出さなくても使える。
コンストラクタが無い場合はコンパイラが勝手に用意する。
コロンはラベルなんかにも使うからちゃんと入門本などで理解を深めた方がよい。
>>446 C++ だとそれは initializer 構文とかいうけども。
C# だとメンバー変数のイニシャライズに : 使わなくなったしなぁ。
なんて呼べばいいんだろう。
@ITだと、 : this 構文、 : base 構文って感じで言ってるなぁ。 C# の仕様書確認してみたら、「constructor initializers」という言葉はあった。
452 :
438 :2008/11/16(日) 00:50:28
コンストラクタの委譲(delegation)でいいと思うよ。
別にそのまんま「(オーバーロードされた)別のコンストラクタの呼び出し」 とでも明示的に呼べばいいと思うんだけど。 ところで、C#でもVBでもこの別のコンストラクタの呼び出しの前には コードを一切書けないわけだけど、これはどうしてなんだっけ? 別のコンストラクタを呼ぶときのパラメータの値を作りたいときなんかに それ専用のメソッドを作らなきゃならなくて不便で仕方がないと思うんだけど。
Javaみたいにすればよかったのにね
手元のオライリー見たけど構文の呼び名は書いてないなあ
457 :
446 :2008/11/16(日) 01:39:10
>>447-
>>451 , >>453-
>>456 さん、ありがとうございます。
自分で調べたかったのですが、手元にある参考書のどの章を
参考にしたらいいか分からなくて困っておりました。
みなさんに教えていただいたことで、理解が深まりました。
ありがとうございました。
お世話になります。
環境:C# 2005 VisualStadio
datagridviewでエクセルのようにコピー&ペーストがしたくて、
以下のサイトを参考にしているのですが…、
ttp://dobon.net/vb/dotnet/datagridview/clipboardcopy.html#paste とりあえず、コードをそのままコピペして動作を見ようと思い、
コピーはできますが、何故かペーストされません。
プログラミングの経験が少ない為、どこが原因かすら分からない状況で
厚かましくて申し訳ないのですが、どこをどうすればいいのかご教授下さい orz
また、ペースト機能について参考になるHPがあれば教えて頂けると助かります。
>>458 ○ご教示ください
×ご教授ください
まずは日本語からやり直せ
>>458 ひとまずテキストボックスとかの単一のデータがコピーペーストは出来るんだろうな?
出来ないんだったらそこから始めるべきだと思う
461 :
269 :2008/11/16(日) 05:10:52
1週間前にきれいに透過できないということで質問させていただいたものです
http://www.pinvoke.net/default.aspx/user32/UpdateLayeredWindow.html このページを参考に(といってもコピペですが)書いてみたのですが画像が表示されません
一応フォームのサイズは画像のサイズに変更されています
呼び出し元?は下記のようになっています
private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.None;
Bitmap bitmap = new Bitmap(@"C:\aaa.png");
Class1 class1 = new Class1();
class1.SetBackground(this, bitmap);
}
よろしくお願いいたします
Control.CreateParamsをオーバーライドしてExStyleにWS_EX_LAYEREDを指定しておく必要がある。
クラスにはフィールドを宣言してそこに必要なパラメータとか記憶させられるわけだけど、 基本的にその数って有限でしょ? Class Hoge { private int status1; privete int status2; ・・・・ private int statusn; } でも実際は状況に応じて記憶させるべきパラメータの数は変わるわけでそう言う場合には どう対処したらいいんだろうか?
Dictionaryでも使えば
メーンフォームを持つForm1.csのファイルサイズが大きくなるような書き方は推奨されていないのでしょうか?
>>467 すべての状態が埋まるのなら、Listでもいいと思うけど、
1, 3, 5の状態だけのような、疎な配列になるのなら、Dictionaryの方が適しているだろうね。
IExpando
>>466 推奨されていないかどうかは知らないが、
巨大になるとメンテしづらくなるから、適度に分割しといた方がいいよ思うよ
>>466 region を上手く使ってあれば、ファイルサイズが大きくても気にならないと思う。
ただ、クラスとしてまとめられる処理はまとめた方が可読性は向上する。
便乗ですが、たとえばForm1のコントロールのプロパティなんかがたくさんあるとき 外部からのアクセス手段としてはどこに書くのがオススメですか
#region プロパティ … #endregion #region パブリックメソッド … #endregion とか纏めておくとわかりやすい。 いらないときは閉じておけるのがいい。
纏
>>472 (Formの)外部からコントロールのプロパティにアクセスする、
などという絵に描いたような糞設計はまともな神経してたらしません。
先人の方々のプログラムを眺めていると、しばしばClass Aを定義して、そのClass Aの中の メソッドで、さらにClass Aのオブジェクトを作ってるという素人目にはカオスにしか見えない テクニックを披露している方々をよくお見受けするんですが、このようにクラスの中でその クラスを使うという手法は一般的どういうときに使えるんでしょうか?
意味が分からん シングルトンのことか?
ファクトリ?
たとえば Class A { void Method() { A objA = new A(); (以下objAをつかった処理) } } みたいな感じのことです
>>479 そのメソッドはstaticになってないの?
>>480 そこらへんはよく覚えていません(´・ω・`)・・・
Regex.Matchみたいな形か? 利便性を考えて静的メソッドとしても公開しとくみたいな
Classの中でそのClassのオブジェクトを生成するテクニックは
静的メソッドと関係があったりするんでしょうか?
>>479 の void Method() が静的だったかまでは覚えていないんですが(´・ω・`)・・・
例えば、短いプログラムで見かけるのはこんな感じ class Startup { void Test() { System.Console.WriteLine(this); } static void Main() { new Startup().Test(); } }
ファクトリクラス、条件によってHogeの実装クラスを切り替えたいときなどに使う。 abstract class Hoge { public class Hage : Hoge {} public class Page : Hoge {} public static Hoge MakeInstance(bool b) { if (b) return new Hage(); else return new Page(); } } class Startup { static void Main() { Hoge hoge1 = Hoge.MakeInstance(true); System.Console.WriteLine(hoge1); Hoge hoge2 = Hoge.MakeInstance(false); System.Console.WriteLine(hoge2); } }
IClonable の Clone メソッドとかで使いそう。
メッセージボックスみたいなのを自作したとき。 コンストラクタをprivateにして publicなShow(...)メソッドでインスタンス化、みたいな
>>486 Cloneでnew使うと継承に対応できなくなるので、
MemberwiseCloneを使ったあとディープコピーや追加の初期化を追加するのが常套。
>>488 ああ、なるほど。継承まで頭が回ってなかった。
この辺もう少し勉強してみるわ。
というよりもどういうときだとCloneは活用できるんでしょうか?
ある処理を行った数秒後にテキストボックスの文字を空にしたいんだけど、 タイマーとかを使えばいいのかな?
うん
493 :
269 :2008/11/16(日) 15:48:02
オーバーロードとオーバーライドの違いがわからん
override キーワードをつけるのがオーバーライド。
オーバーライド=継承元のメソッドを上書き オーバーロード=同一メソッドの別バージョン(シグネチャ違い)を定義
load → 積む。オーバーロードで、いっぱい積む。 ride → 乗る。 オーバーライドで、上に乗っかる。
クラスの中に stirng[]型 bool型 からなる構造体を宣言し、さらにそれをList<T>で配列化しようと思っています。 しかし聞くところによるとC#では構造体の出番はあまりないとのことです。 上記のようなケースを構造体無しで実現するにはどうしたらいいでしょうか?
クラスで。
overlord エラーになります^^
>>497 なんか本気で言ってそうで怖いんだけどw
class A { void Func(int i) { System.Console.Wirte(i); } //オーバーロード(引数が違う) void Func(string s) { System.Console.Wirte(s); } } class B : A { //オーバーライド override void Func(int i) { System.Console.Wirte(i * 2); } }
簡単で、かつ、議論の余地のない質問ほど回答レスが付く
ふらっとで何をw
超アクロバティックなコードばっか目にするんだが
>>499 クラスの中にクラスを新たに定義するんですか?
507 :
デフォルトの名無しさん :2008/11/16(日) 17:53:23
>>473 これいいですね
>>475 たとえばForm2で処理したテキストデータをForm1のコントロールに渡したいときは
どうするのが最善ですか?
>503 ここは基本、沼に足を踏み入れようとしてる奴と一歩目を踏み入れた奴の相互援助スレだから仕方ない。 で、>438 はどうなったんだ? ロダのファイルも流れてて見れないんだが。 本人か拾った奴カモン。 >506 >クラスの中にstirng[]型bool型からなる構造体を宣言し の設計に問題ないと思うならそう。 >C#では構造体の出番はあまりない 自分で定義した構造体は、.NETの中で利用する限りでは(ry
>>508 なんというか、構造体的使用目的のためにクラスを使ってしまうのはコードの可読性を
下げる要因にもつながりそうな気がするんですが。
>>509 多分君が思ってるよりclassの適用範囲は大きいよ
>構造体的使用目的 ってのがだいたい、メモリの連続した領域をラベルでアクセスしたいってなもんでしょ? その感覚はC#の構造体とは遠いからね
簡単で、かつ、議論の余地のない質問ほど回答レスが付く量が多い(マジレス・ネタレス・クソレス・話題派生レスetc)
難しい質問の方がレスがたくさん付くスレってあるのか?
素直にもう一度アンカーを付けて回答を促すがよろし 答えが得られなくても仕方なし どうせ煽りは1,2人でやっているので無視
>>507 INotifyPropertyChanged を実装したビジネスオブジェクトを作成し、
そのインスタンスを各コントロールのプロパティにバインド
ビジネスオブジェクトは必要ならISupportInitializeなども実装
517 :
デフォルトの名無しさん :2008/11/16(日) 20:59:45
>>473 他人のソース読むとき
ソリューションを開くとregionが全部閉じていていちいち開くのが面倒
csファイルを大量に分割し過ぎているのも可読性を損なう
まさか一つ一つクリックして開いてたりはしないよね・・? 普通ショートカットか、メニュー・右クリックのアウトラインから展開するよな。 適切なregionは可読性向上に繋がる。 >csファイルを大量に分割し過ぎている 個人的には定義に移動で飛んでいけるから問題に感じる事はない。 分割が足りないより、しっかり分割されている方が好ましく感じる。
むしろregion閉じてた方が読みやすいんだが
>>518 まあそうなんだけど、他人の書いたコードを読むとき
ソリューションエクスプローラにファイルがズラっと並んでるの見ると
それだけで戦意を喪失させるものがあるから
>>517 の気持ちもわかる。
せめて適切なフォルダにグルーピングくれると助かるんだけど。
分割は大雑把(例えばイベントハンドラ、デザイナ、その他)にやって、その下の階層を region で分けてる。 分割しすぎると、いつの間にかエディタ上部のファイル選択タブにどんどん貯まっていってだるい。 あそこ多段表示にできればいいのに。
名前空間や機能別に整理せず、そのまま乱雑に置かれてると確かに戦意喪失するな。 コードも同じように混沌としてそうな気がしてくる。
拡張Methodのnamespaceってどう定義してる? 全部分けた方がいいのかな?
>>524 Utility.xxxって分けてる?
using Utility で丸々ッと使えるようにする?
>>525 汎用的なものについては Utility でマルッと使えるようにしてる。
それ以外の特異的なものは単に xxx で Utility は付けない。
おちんちん、気持ちいいお(;ω;) 最近、聞くことなくて、このスレの人たちとコミュニケーションとれなくて、 さみしいお(;ω;)また、わからないことあったら、聞きにくるからよろしくだお(;ω;)
528 :
269 :2008/11/17(月) 00:36:06
>>510 ありがとうございます!
>>510 様に書き直して頂いたものをマネてForm1_Loadに書いていたものをForm1に書いて
SetBackgroundを同じクラス内に書くとうまくいきました
が、数時間無い頭を使って考えてみましたがなぜ最初のでは動かないのかがわかりませんでした
今まで私の質問に丁寧に答えてくださった皆様、本当にありがとうございました
おまんまん、気持ちいいお(;ω;) 最近、聞くことなくて、このスレの人たちとコミュニケーションとれなくて、 さみしいお(;ω;)また、わからないことあったら、聞きにくるからよろしくだお(;ω;)
531 :
デフォルトの名無しさん :2008/11/17(月) 00:57:48
for文で初期化子を2こ以上書くときってどうすればいいですか? ↓こんなかんじにやりたいんです for(int i=0,int j=0;i<i_max;i++,j++)
そんな書き方見たことないんだが・・・ というかみにくいと思うがどういう使い道があるのか…・ 別に管理したいなら変数切ってやればいいんじゃね? いや、おれの無知ならすまないことなんだが
>>532 その条件ならこれですむわけだが。
for(int i=0;i<i_max;i++)
{
int j=i;
}
>>532 の例は適当です
本当はiとjは別の初期値でやりたいです
↓こんなかんじでやればできるんでしょうけど
for文にひとまとまりにできないのかと思って
inti,j;
for(i=i0,j=j0;i<i_max;i++,j++)
自己解決しますた
自己解決したようだが for (int i = 0, j = 0; i < length; i++, j++) みたいな感じでいけるけど、可読性最悪でオススメできない。 for内で使うのは一つに制限した方が良い。
フィールドにアクセスする時って 全部プロパティとかのアクセサでやんなきゃいけないもんなんですか? いちいちアクセサ書くのがめんどいし 何の意味があるんかよくわかりません 特に配列とかテンプレートへアクセスするときのやりかたがよくわかりません
初歩的な事だと思うんですが、以下のコードを入れたとき [StandardModuleAttribute()] public sealed class Information { } 型または名前空間名 'StandardModuleAttribute' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 とエラーが出て、どんなusingを追加すれば消えるのか調べているのですが見つかりません。 どんなusingを加えればエラーが解消されるのでしょうか。 また、usingについて詳しく記載されているHP(MS公式以外)があれば教えて下さい。
>>539 .NET Framework クラスライブラリ中のものなら MSDN で検索すれば所属する名前空間が書いてある。
ちなみに、クラス名を入力したときに出てくるリファクタ用メニュー(茶色い四角形)を使えば簡単に追加できる。
流石にネタか? StandardModuleAttributeでググれば先頭に出てくるんだがな・・。MSDNだけど。 そのusingの意味は>444辺りに書いてるじゃん。 DLL参照が足りない?それもどのDLL追加すればいいかMSDNにあるじゃん。 まず自分で少し調べれ。
543 :
デフォルトの名無しさん :2008/11/17(月) 03:36:55
MSDNって読みにくくないですか?初心者や中級車にも不親切ですし、上級者向けというかなんか中の人専用の情報という感じがしませんか?
MSDNを読みやすいと感じてる奴は誰もいないだろうな 事務的で冷たいし
自動翻訳された文章に何を言っている
このスレ一々煽る奴が雰囲気わるい
確かに機械翻訳された文書はイミフだし、重いし。ちょっと前の文書はほとんどリンク切れしてるし(ry。 でもクラス名で検索すると、.NETのものなら大体先頭に来るし、 winのAPIとかCOMとかの、ちょっとコアな部分に入ると結構MSDN頼り(+英語)になることも多いし、慣れておいて損はないかと。 必要な部分だけ読んで、後は流せばいい。 ・・名前空間見るくらいはいいじゃんw
MS のライブラリ使ってる以上 MSDN からは逃れられないと覚悟するべき。 個人的には英語版の方が読みやすくて好き。英語出来るならオススメ。
英語なんかよんでニュアンスを取り違えるよりは あの変な日本語の方がましだな つーか、専門の翻訳スタッフぐらい雇えよな
俺にとっては一番すらすら読める英文がMSDNライブラリになってしまった。
552 :
デフォルトの名無しさん :2008/11/17(月) 04:05:15
マイクロソフトは自社製品よりもMSDNに資金使ってくれないかな。 自分のところの仕様やドキュメントを適当にしておくなんて一体何をする会社だか分からんw
>>550 いや、あの日本語で理解できるかw?
主語・目的語が何なのかすら分からん文とかが延々と並んでるんだぜw。技術文書として致命的じゃね?
サンプルコードが付いてたりするからそこから読み解けなくも無いけど、日本人がアレから読み取れるニュアンスがまともなものになるとは思えないぞ。
.NETのライブラリ部分とか、基本的な部分の技術文書なんかは人間が翻訳してるから普通に読めるが。
上に機械翻訳の免責云々って書いてあったら軽く読んでから英語表示。
KBってMSDNライブラリに含まれるの?
RichTextBox コントロールを使用すると、ユーザーはテキストを入力および編集できます。 このコントロールには、標準の TextBox コントロールよりも高度な書式設定機能も用意されています。 テキストは、このコントロールに直接割り当てることも、リッチ テキスト形式 (RTF: Rich Text Format) ファイルやプレーンテキストファイルから読み込むこともできます。コントロール内のテキストには、 文字書式または段落書式を割り当てることができます。 ひっでえ日本語w
どこに問題があるのか全くわからない俺は 翻訳文書に飼いならされてしまったのだろうか・・・
初めてマジマジと読んだけど、英語をそのまま日本語に訳してみました的な文だよな…w 技術文章だから原本を大事にしてるのかね? それとも MSKK がさb
555だけを見てちょっと考えてみた。でも片言臭さがまだまだ抜けていないと思う。 RichTextBoxはテキストを入力および編集できるコントロールです。 TextBoxコントロールよりも高度な書式設定機能が用意されており、 コントロール内のテキストには、文字書式と段落書式を指定できます。 このコントロールにテキストを設定する方法は、次のような方法があります。 ・プログラムから直接指定する ・リッチ テキスト形式 (RTF: Rich Text Format)ファイルから読み込む ・プレーンテキストファイルから読み込む
ああ、代替訳が出てたか そこまで行くと意訳だから技術文書として望ましくないんじゃないか
>>554 KBもMSDN検索に出てくるからいいんじゃね?
プログラム経験の浅い人使って翻訳する場合、解釈して書き直すと意味が変わる恐れがあるから、英語丸投げにも納得は出来る。
マ集めて翻訳させてたら日本語ライブラリ作るのが遅れるし。そういう意味では>555は十分な文書だと思う。
マには伝わる単語のニュアンスが、一般人には伝わらないことは結構多い。それが英語版で読める強み。
それが大きな支障になることは少ないと思うけど、コイツ・・分かってないな(ニヤッ。って感じに楽しめる。
この例文でいくと、「テキストは〜」の一文は読みづらいな。
英語だと違和感ないんだけど、日本語だとすごい読みづらくなってる。
まあ、
>>561 が言っているとおり、勝手に意訳されて意味が違ってくるとそれはそれで困るけどね。
英語を直訳してるから、「〜は〜だ」の形がしつこく感じるな
愚かな日本人用に翻訳があるだけましだこのやろう MSはまだよくやってる方だぜ。S(略)Nなんか……
565 :
デフォルトの名無しさん :2008/11/17(月) 08:17:08
SUNのドキュメントの翻訳とかはオープンソース(ボランティア)に移行したんじゃなかったか? デベロッパ・コミュニティーに優しいのはMSよりSUNの方だと思うけどねえ。
それはない
SUNはWindows版Javaクライアントをわざと重くしてるから大嫌い
おまえのPCが旧式なだけだろw
新型でも思い
TwitterStatusクラスの定義がそのURLのコードには書いてないってだけ 本人に聞けよ
XmlSerializer で、object 型のプロパティが XMLに Serialize することは出来ても、 Deserialize すると null になってしまうのですが、仕様ですか?
そりゃobject型としてシリアライズすればそうなるに決まってる objectには読み書き可能なプロパティなど存在しないからな XmlSerializeによるシリアライズ結果に型情報は載らないのよ
>>573 出来ました。XmlSerializer のコンストラクタに object に入る可能性のあるオブジェクトの型を
指定しておくことで解決しました。
//XmlSerializerオブジェクトの作成
Type[] extraTypes = new Type[1];
extraTypes[0] = typeof(int);
XmlSerializer serializer = new XmlSerializer(this.GetType(), extraTypes);
個人的にはこんなの作ってる このやり方が普通かどうかはしらん public class XmlAccessor { public static void XmlSerialize<Type>(string filePath, Type value) { using (FileStream fs = new FileStream(filePath, FileMode.Create)) { XmlSerializer xs = new XmlSerializer(typeof(Type)); xs.Serialize(fs, value); } } public static Type XmlDeserialize<Type>(string filePath) { Type value = default(Type); if (File.Exists(filePath)) { using (FileStream fs = new FileStream(filePath, FileMode.Open)) { XmlSerializer xs = new XmlSerializer(typeof(Type)); value = (Type)xs.Deserialize(fs); } } return value; } }
話とはずれるけど
>>575 みたいに型を2回書くのを避けるためだけにジェネリック使うのは好きじゃないなあ
静的に完結しないならTypeを引数に取ってobject返しちゃう
>>575 まあたぶんみんな同じようなやつを私的なライブラリに持ってるでしょ。
俺は呼び出し側で例外処理書くの面倒だからシリアライズの方はbool返すようにしてる。
>>576 すれてるのは話じゃなくて論点の方じゃないのかな?
ブラウザでこれから開くページがすでに開いていたら、閉じるか、そのページをリロードしたいのですが、どのようにしたらよいでしょう? Shell sh; SHDocVw.ShellWindows o; sh = new Shell(); o = new SHDocVw.ShellWindows(); foreach (SHDocVw.InternetExplorer ie in o){ if (ie.LocationURL.Contains("これから開くページのURL")){ //ここでそのページをcloseとかkillとかreloadとかしたい。 }}
ie.Quit();//閉じる ie.Refresh();//リロード
プロジェクトをコピーして 改良版を作る時にどうやればいいか教えてください。 namespaceとかプロジェクト名とかいちいち置換しないとだめですか?
>>580 version管理ツール使えばいいんじゃね?
亀SVNとか楽だよ。
へーそんなのあるんだ サンクス
#region〜#endregionはなんでエディタに統合されないの?
どういうの望んでるの
ワンキーで開始と終わりを設定できたら楽じゃん。 ブレークポイントやブックマークだってわざわざその行に 「#breakpoint」 なんて一々書いてたら面倒だし視認性だって下がるでしょ。
言語設計の段階に文句言ってるの? それとも、VC# のアップデートでそれがサポートされないことに文句言ってるの? region〜endregion は、C# 言語の一部分で、組み込まれてる。 他の IDE でも同様の用途に使えるんだから、VC# でのみ使える region のようなものを新設する意味がない。 ただ、region の表示方法を工夫してもらいたいなとは思う。 括った部分はインデントするとか、しないとか。
教えてください。 ディスクの空き容量が少ないのですが、 Microsoft SQL Server 2008関係 は、C#のFormやWPFの開発に必要なんですか? 使わなければ消してもよいですか? 同じく、.NET Frameworkが1.1、2.0、3.0、3.5と入っているのですが、 3.0と3.5だけ残して1.1と2.0は消してもよいですか?
ついでに、 MSDN Library for Mycrosoft Visual Studio 2008 Express Edition というのは、WebでMSDNを検索すれば必要ない?
加えて、C#の開発に、 Microsoft Visual C++ 2005 Redistributable Microsoft Visual C++ 2008 Redistributable -x86 9.0.30729 っても不要に思えるのですが…。
一回で質問しろ 全部消していいよ
>>588 再インストール出来るんだから、まずは消してみればいいじゃない。
質問するのはそれからだろ?
とりあえず消してみて不自由なら入れなおせばいい
しかし開発機で空き容量不足は不便だよ。 抜本的な対策したほうがいいと思う。
gpartedで空き容量は自由時際
>>587 文字を書いてエディタの機能を有効にするなんて明らかに変じゃない?違和感ない?
#endregionって書いて数秒経つと+が現れるとか…
マウスで選択してブロックの挿入でいいじゃん
>>596 何か勘違いしてない?
region は言語に組み込まれてる機能だよ?
それを VC# 側で解釈してるだけ。
>>596 とりあえず、議論したいなら何がどうあって欲しいのかを明確にするべきじゃね?
何に対して文句言ってるのかよくわからんし。
テキストエディタでC#の言語機能であるregionを書いても意味がないおかしいってことだろ
レギオンなんて使ってる奴いるのか? いちいち開いたり閉じたり、逆に読み難いだけだろ(^m^)ププ
#region 変数aを宣言する int a; #endregion #region 変数aに1を代入する a = 1; #endregion
だって、ガメラはレギオンを許さない
>>601 古代ローマの人?
レギオンとリージョンって語源一緒なんだろか。
レギオンってリージョンのことだったのか。マジで何言ってるのかわからんかった。
606 :
デフォルトの名無しさん :2008/11/18(火) 16:22:23
今、ガメラの目が光った!
レギオンとリージョンって同じものだったのか
レーギョン
なんか赤っ恥掻いてる人いてワラタ
結構釣れたな 語源は同じだから強ち釣りでもないが
釣り宣言キタコレw
"シュミ"レーションに食い付くタイプだな。 ネイティブな発音も知らずに無知をさらしまくる奴。
>>614 kwsk
俺は英検1級もってるんだが、"シュミレーション"に対しては食いつくぞ?
英検1級w
TOEIC受けろw 英検より役に立つぞw
釣れたw 本当はTOEIC700点ですが何か?
#region
>>618 英検1級って700点レベルなのか。
意外と大したことないな。
釣られてみる。
いちいち「釣られてみる」とか予防線張らないと何も言えんのか
#endregion
だって釣りだったんだろ?w あと #region 書くときは名前も付けてやろうぜ。
#endregion
>>625 エラー: 不適切なプリプロセッサ ディレクティブです。
where句って、Generics時の型<T>に参照型か値型かを要請する という解釈で合ってますか?
#region 釣り堀
#endri-jon
>>627 それだけじゃないけどそういう制約もできるね
632 :
デフォルトの名無しさん :2008/11/18(火) 18:12:25
あまりのひどさに鼻糞が吹き飛んだじゃないか!
>>631 ヘルプやMSDNで「where (ジェネリック型制約)」を調べて
>>633 確かにここの糞どもと会話するより検索したほうが早そうだ
いや、そんなのは当たり前だろ ここが2chじゃなくてMSDNフォーラムだろうが@IT会議室だろうが変わらん 「ヘルプ見れば明らか」ってもんなんだから
いちいち反応するなよ
unsafeは余り使わない方がいいんですか?
いちいち反応しないでくれる?
あんまり俺をなめない方がいいよ(・∀・) 言っとくけどVIPPERで固定ハンドルネームやってるしこのスレットを潰すくらいの 影響力は持ってるから くだらん事で俺を刺激しないように(・ω・)/
一つ上にアホがおる
潰れても誰も困らないというオチ
>>637 使わずに済むなら使わないに越したことはない
それ自体の危険性は置いといても,Silverlightで使えないとかいろいろ余計な制約がかかる
もう頭来た
おい
>>639 このスレにvipper呼ぼうぜ
さあこい
話かわってもうしわけないですが、質問させてください。今週C#はじめたものです。 3年程前にVB6やってたときは、スプレッド(GrapeCityの)つかって表インターフェース 作成していましたが、いまどき、有料のコンポーネント買いたいといっても、予算が おりません。(どとねと版16マンもしてるみたいでしたし。。。) ぐぐった感じでは、OfficeコンポーネントをつかってExcelをはめ込むのが近いかな? とおもいましたが、なんかいい方法あるのでしょうか?
>>645 結局何がしたいのかわからん。
表を作りたいのか? だったら DataGridView を使えばいい。
C#を使うまでもなくエクセル+VBAで全部片付く仕事でしたの巻
8万なら、固定資産登録せんでいいから話はとおるかもしれません。 が、できれば、無料のでいきたいです。 DataGridViewはためしてみましたが、印刷をおもったようにだすのに苦労するようにおもえました。 根性いれてやれば、そうでもないのかな?
コントロールをそのまま印刷するというような発想が間違ってる
Excel+VBAでつくったら200万しかもらえない仕事も C#で同様の機能つくったら800万になるんですよ。 C#からExcelを別に起動させてはだめで、C#のForm内に表が でてくるようにするだけでお客さんの払う金額はかわってきます。
印刷だけFlowDocument使うとかできるんかな。 できればすごい楽そうなんだけど。
iTextというのが使えそうで、いったん表をPDFにしてから印刷をすれば 確かにおもったとおりのものが出せそうでした。 でも開発が1表あたり半日は追加になりそうですね。
8万なんて2人日にもならないじゃん
8万の調達依頼をかける。 GrapeCityなどの窓口が信用でおちる会社とは取引できないので 商社から買うことになる。 実行予算から8マン減る。 たぶん、事務手続きにかかる人件費は+4万はかかるかもしれん。
商社ってかO塚商会とか通せばもっと安くなるんじゃね?
まあコンポーネントが購入できない世界の話はわからんな。 うちならサクサク購入しちゃうから。
結局C#でのプログラミングはクラスの組み立てなんですか?
結局、DataGridViewより、みんなコンポーネント購入して使う人が多そうな感じですね。 ま、そっちのほうが稼働は減らせる。という理由で、明日調達かけてみます。 ありがとん。
結局やりたいことはなんだったんだ?
ただで済ませられるならそれに越したことはない、ってことだったんじゃね。
WindowsのForm上でやってる作業は、Excel 表示は、DBからとってくるという奴かと。。。
Settings.Default.Save();の中でSettingsSavingEventHandlerが呼ばれるんですか?
> エラー 1 メソッドは戻り値の型を持たなければなりません。 戻り値の型を持たないメソッドの作り方を教えてください
void
void
void
うるせえ三味線にするぞ
ということにしたいのですね
やべえvoidをずっと見てたらウルトラマンに見えてきた
>>672 ウルトラマンにしかみえなくなったじゃねーかww
意味がわからん
やべぇ、俺もそうにしか見えなくなってきたww
>>672 これはやばいwww
職場で吹いたらお前のせいだからなwwww
話についていけない俺涙目。誰か解説してくれwww
oとdが目に見えればあともう少し
thx把握したwww
>>598 言語仕様のことなんてどうでもいいけど
ブレークポイントみたいにVS側がサポートすればいいじゃん。
ちなみに#regionの文法はVSのためにある以外に用途あるの?
無いんだったら尚更。
>>599 相当頭悪いの?
>>680 最新の言語だし、 IDE で開発されることに特化した機能があってもおかしくない。
それぞれの IDE で独自に整形情報をもたれてしまうと、相互に利用する場合に宜しくない。
(VS ではキレイだったコードが SharpDevelop だと悲惨なコードにとか。)
と言うわけで、整形情報はこうしましょうと言語側で決めてしまえばそんな混乱は起こらず、
互換性を気にせずに使えるようになり、コードのメンテナンス性も高まってみんな幸せになれる。
本当のところはどうなのかはヘルズバーグさんに聞いてくれ。
あと煽りは程々に。
ヘル「ス」バーグさんだった。 ちょっくら吊ってくる。
683 :
デフォルトの名無しさん :2008/11/19(水) 03:54:04
ヴァイパー!viper!ヴァイパー!viper! さあ、来い!ヴァイパー!
いや、つまんないから
StreamWriterだと何で最後に改行が加わるんだ? 明らかに言語的に間違えた仕様だろこれは
あれをStreamWriterと名づけた奴を銃殺にしてくれと思ったことはある。
void ん〜、どれどれ・・・ウルトラマン?
>>686 最後の改行って何だろう。
WriteLineとWriteを使い分けがわからないとか?
現在のウィンドウが最前面かどうかを調べるにはどうすればいいでしょうか? よろしくお願い致します。
Form.TopMost のこと? それとも単に一番上?
C++の頃からずっと疑問に思っていたんだけど ストリームってどういう意味?StreamWriterとかFileStreamとか。 何となく入出力処理に関係しているんだと思うけど。よく意味がわかりません
Streamは頭で理解するのは無理なので意味がわからないのは仕方ない。
694 :
デフォルトの名無しさん :2008/11/19(水) 09:56:37
ビットが流れるから
>>691 レスありがとうございます
TopMostのように常に最前面ではなくて、
現在、単純に一番上にあるかどうかです
>>695 APIのGetWindowかGetForegroundWindowを呼ぶ。
>>695 Form.ActiveForm と自分自身を比べればいいんじゃないか
中でGetForegroundWindow呼んでるんだが
>>692 まずオレンジジュースがはいったコップとストローを用意しろ。
コップがファイルでジュースがデータだ。
そこにストローを挿せ。それがbufferだ。
君の頭がCPUとして、ストローを吸ってごらん。これがreadstream。
コップのジュースは減るけどデータの場合読み取るだけだから無くならないけどね。
まだ飲むなよ。
今度は口のジュースをストローから出してごらん。
これがWriteStreamさ。
ぶくぶくぶくって息をふきこむのは、この場合なに?
>>697 >>698 タスクトレイのアイコンをダブルクリックするごとに
最前面/最小化をトグルで切り替えたかったのですが、
タスクトレイをクリックした時点でフォームがアクティブじゃなくなるので
Form.ActiveFormがnullになってしまうからだめみたいです
上手い方法ないないものでしょうか
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
this.Activate();
}
else
{
if (Form.ActiveForm != this)
{
this.Activate();
}
else
{
this.WindowState = FormWindowState.Minimized;
}
}
}
こんな感じに書いてみたのですが・・・
702 :
デフォルトの名無しさん :2008/11/19(水) 11:37:59
バイバー!バイパー!
アクティブかじゃなくて 最小化されてるか確認すればいいジャマイカ
Zオーダーを調べるのにZオーダーが変更される方法で調べてどうするって話じゃね? ダブルクリックする直前に、タスクトレイのMouseEnterとかのイベントとかで ActiveForm調べて覚えといてMouseLeave等で忘れる。 ダブルクリック時には覚えておいたやつと比較。
EnumWindowsで列挙して特定の条件(スタイルやウィンドウクラス名等)は省いて検索して 1番目に自分があったら一番上、とかでどうかなあ。 一応動作したけど、特定の条件がすべてを網羅できるかわからんな。
最小化→最前面 背面→最前面 最前面→最小化 ってことか。
>>699 蛇口と排水溝あたりの方が分かりやすいと思うがどうよ
>>701 そういう摩訶不思議な設計はユーザの混乱を招きそうだ
タスクトレイのアイコンは最小化の切り替えだけにして、非最小化したときに前面に、
もしくは最初から最前面に表示するというのではいかんのか?
IPメッセもどきをC#で書いてみてるんですが、例えばIPメッセで 定義されているIPMSG_BR_ENTRY(0x00000001UL)をパケットキャプチャ で見てみると、10進で6291457、16進で600001となっているんですが この関係ってどう捉えればいいのでしょうか?
(0x00000001UL+パケットキャプチャ)×君の勘違い=6291457=0x600001
710 :
デフォルトの名無しさん :2008/11/19(水) 15:51:26
if( ( ( (unsigned int&)z & ~( (unsigned int&)x | (unsigned int&)y ) ) & 0x80000000 ) != 0 ) cで書かれた(c++?)上のようなコードがあるんですが、 これをc#に直してください。 何をしてるのかさっぱり分かりませんがコメントにはこうあります。 // Take the bitwise AND of z and the complement of the inclusive OR of x and y, // then bitwise AND the result with 0x80000000 and return it. A bitwise result // of zero equals false, while any other value equals true. x,y,zはfloatです。
711 :
710 :2008/11/19(水) 15:54:40
あと、コメントを読んでも良くわからないので 上の式が何をしているのかを分かりやすく教えてもらえると助かります。
712 :
708 :2008/11/19(水) 15:59:43
>>709 すいません。私が見てたのは文字列のようでした。
16進表記では 36 32 39 31 34 35 39 となっていました。
色々勘違いしている気はします…。
if (z < 0 && (x < 0 || y < 0))
>>713 >>摩訶不思議でしょうか?
右クリックでメニューが開く
左クリックでウィンドウ表示、最前面表示
ダブルクリックでメニュー内の太字項目実行
とかが普通な気はするな
まあ仕様じゃしょうがない
717 :
デフォルトの名無しさん :2008/11/19(水) 16:27:07
if (z < 0 && x >= 0 && y >= 0)
718 :
デフォルトの名無しさん :2008/11/19(水) 16:39:43
string txt = "abcde"; string str; str = (txt.Remove(txt.IndexOf("de")).Substring(txt.Remove(txt.IndexOf("de").IndexOf("c"))); という書き方と str = txt.Remove(txt.IndexOf("de")); str = str.Substring(str.IndexOf("c")); という書き方でわかりやすいのはもちろん下だと思いますが 推奨されるのはどちらですか?
下だけど IndexOfが-1返す場合は考えなくていいの?
IndexOfが-1を返す可能性を考慮するとどれも駄目駄目だな
もちろんわかりやすいほう
ありがとうございます。 ネットでサンプルコードを探しているとたまに上のようなコードを見かけるので 1行で書いた方が良いのかと思ってました。
724 :
デフォルトの名無しさん :2008/11/19(水) 18:25:14
鼻くそは食べれるんですか?
>>707 >蛇口と排水溝あたりの方が分かりやすいと思うが
void <kwsk!
bool <kwsk! kwsk!> long
(\/) (\)(o由o)(\) フォッフォッ
(pio)/ ハナクソ!
>>725 本当はそういう訳のわからないたとえ話じゃなくそのまま理解した方が簡単。
俺の理解ではストリームっていうのはデータの読み書きを、相手が紙テープだろうとメモリだろうと
COMポートだろうとサウンドカードだろうとファイルシステムだろうと透過的に行うための
インターフェイスのことだと思うんだけど。
Adapterってこと?
730 :
デフォルトの名無しさん :2008/11/19(水) 19:51:57
731 :
デフォルトの名無しさん :2008/11/19(水) 19:56:36
ま、警察も鼻糞ってことだったんだな
コピペ君って馬鹿だな、まで読んだ。
読み込む元や書き込む先が何かは分からないけどっていうか何でもいいので とにかくバイト単位で順番にどんどんデータを取り出したり書き込んだりするものがStream バイト単位でどんどん吸い出したり書き込んだりするもの 読み込む元や書き込む先はファイルだろうがネットワークだろうがメモリだろうが何でも同じ 同じ操作で好きな物から読み込んだり書き込んだりするために作られた抽象的な物がStream
あい
FileStreamクラスにReadメソッドとWriteメソッド両方用意するって発想はなかったんだろうか・・・
両方用意されてるけど何か?
本当だ・・・ StreamReaderとかStreamWriterとかの生成が必須かと思ってたわ
C# 4.0はまだですか?
もうだいたい言語仕様は出てるよ VS2010/.NET4.0予定
サーバー上に特定のファイルが存在するかどうか調べるにはどうすればいいですか?
get に失敗するかどうか拾えばいいんじゃないの
>>740 HTTP?なら HEAD メソッドで。
743 :
740 :2008/11/20(木) 00:48:14
すみません、HEADメソッドというのは何というクラスでしょうか?
>>743 HTTP について少しは調べたらどうだwwww
745 :
デフォルトの名無しさん :2008/11/20(木) 10:49:43
超初心者からの質問です。 Window FormのDesignerでWindowをダブルクリックすればForm_Loadingコード を自動に書いてくれるんですが、Form_Closingはどうやればいいんですか?
>>745 MSDNを読めよ。
>Closing イベントは、.NET Framework Version 2.0 では使用されません。代わりに FormClosing イベントを使用します。
>>745 プロパティウィンドウの上の方にある雷みたいなマークをおして
書きたいイベントのところをダブルクリック
748 :
745 :2008/11/20(木) 11:22:14
すいません、解決しました。 Design View->Event Tool Bar->Form Closingをダブルクリック
749 :
デフォルトの名無しさん :2008/11/20(木) 13:40:42
また雷みたいにコンパイラに怒られたのか。
public bool Visible{ set{ if(visible = value){ //処理 } else{ //処理 } } } public void Show(){ this.Visible = true; } public void Hide(){ this.Visible = false; } ------------------------------------------- public bool Visible{ set{ if(visible = value) Show(); else Hide(); } } public void Show(){ //処理 } public void Hide(){ //処理 } 上と下どっちが好ましい?
条件によるんじゃない? 他からShowHideメソドを使うけど処理したくない場合もあるだろうし ケースバイケースとしか言いようがない
ListViewコントロールのMultiSelectをTrueにセットして アイテムを複数同時に選択したとき、 複数選択されたものの中から、マウスで実際に(SHIFTキーを押しながら)クリックされたアイテムを 取得する方法はありませんでしょうか? ItemSelectionChangedイベントを使ってみたのですが、 実際に選択されたアイテム以外にもイベントハンドラが起動してしまって 判断ができません。よろしくお願いします。
じゃあClickイベントでいいだろ あるかどうかしらないけど
ListView.GetItemAt(int x, int y) ってのはどう?
>>753-754 そのような力業(?)になってしまうのですね。
MouseDownとGetItemAtを組み合わせて実装してみます。
ありがとうございました。
>>755 一応、「マウスで」という条件がなければ SelectedIndices で行ける。
どういう状況かわからんけど。
は? クリックされたことを拾いたいんならChangedじゃなくClick使うだろ 力業ってなんだよ
つまり脳が筋肉で出来ている人が使うような手法だと彼は言っているのですよ
Changedイベント使おうとしてる人に言われてかわいそうw
クリップボードが書き換えられたことを検知するイベントはありますか?
.NETにはたぶん無いけど、クリップボードビューアのチェインとして登録すると通知もらえるAPIはある
SetClipboardViewerとかWM_DRAWCLIPBOARDでググるといいですよ。
[SuppressUnmanagedCodeSecurity] って付けたらセキュリティホールを発生させる可能性があります、とか怖いこと書いてあるんですが 実際、具体的にはどんな危険があるんでしょうか? P/Invokeメソッドやそれを使用してるコードに外部からアクセスできなくても問題ありますか?
765 :
760 :2008/11/20(木) 18:28:37
>>764 GACに登録するようなアセンブリを作らない限りは危ないことはない。
デスクトップ上で使う前提のスタンドアロンプログラムならバンバン使ってOK。
P/Invokeのパフォーマンスがよくなる。
ちなみにC++/CLIではデフォルトでその属性がONになってる。
>>764 それを使うとどうなるか、まず思いつくのは
呼び出し規約を間違えるとたぶん落っこちるようになるだろうということ。
xamlの質問です。 テキストをスクロールでなくて、ページ切り替えにしようと思って、 <TextBox Background="Transparent" Margin="0,152,0,0" Name="TextBox" TextWrapping="WrapWithOverflow" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Visible" FontSize="14" Panel.ZIndex="5"> </TextBox> を <FlowDocumentReader> <TextBox Background="Transparent" 略 </TextBox> </FlowDocumentReader> としたところ、 エラー 2 プロパティ 'Document' は、型 'TextBox' の値をサポートしません。 とエラーになっています。値をひとつずつ消してみてもだめでした。 FlowDockmentReaderに背景を透明にして、テキストファイルを読み込むには、どのようにしたらいいんでしょう?
マウスの左ボタンでスクロールバーとかアイコンとかのオブジェクトをもって移動するときのイベントは、なんというイベントなんですか? MouseDown? MouseLeftButtonDown? MouseMove? MouseLeftButtonDownして、MouseMoveしているときのイベントに動作を割り当てるには、どう書きゃいいんですか?
>>768 FlowDocumentReaderの解説読めば、TextBoxが子要素にならないのは分かると思うが
>>748 後学のために教えてください。
Event Tool Barってどこのこと?
772 :
764 :2008/11/20(木) 20:15:09
ども。
>>767 CallingConventionのことですか?
ふつうにuser32とかのWin32API呼んでる限り大丈夫ですよね。とくに指定してないんですが
>>766 GACに入れるような奴だと問題あるというのは
どういうストーリーが想定されるんでしょうか
>>772 No Touch DeploymentやWPF-XBAPのような、本来プラットフォーム呼び出しができない
制限ゾーンで動くアプリケーションから不用意にP/Invokeを使ったメソッドが呼び出されてしまう。
もちろんパラメータを十分吟味して危険でないことが保障できれば使ってもよい。
一般的にはひとつの処理で大量にP/Invokeを使う場合に、
権限チェックを少ない回数で済ませる為に使用する。
[DllImport("Kernel32.dll"),SuppressUnmanagedCodeSecurity]
static extern int Hoge();
[SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true)]
void OneTask() {
for (i=0; i<1000; i++) { ...; Hoge(); } // 1000回呼ぶ
}
// OneTask()で1回だけ権限チェックし、1000回分の権限チェックを省略している。
774 :
764 :2008/11/20(木) 21:24:27
>>773 なるほど。その使い方で分かりました。ありがとうございます。
この属性があるとなしで30〜40倍くらい差があるなんて聞いたもので。。
データセットとデータテーブルの違いを教えてください。 どちらも、DBにSQLをなげて、戻ってきた結果のかたまり、 と解釈していたのですが、どうやら両者は異なるようなので・・・
DataSetはDataTableのコレクション DataTable間のリレーションとかも管理
C++ってC#みたいにキャストとかToString()とか必要無いんですか?
なぜC++の質問が?
知ったか房が答えてくれるからでしょw
すいません。C++やってる人にキャストとかって通じるのかなと思いまし…。
通じまし…。
キャストはC++だろうがjavaだろうが一緒 ToStringは必要ないんじゃなくて標準では無いだけ
ToStringがないってことは日付をyy-MM-dd形式に編集したいときとかどうすんの?
ToStringじゃない関数を使うだけのこと。 C++では、書式文字列変換はストリームとロケール周りの仕事。
>>783 C++ はしらんが ToString に相当するものをつくるだけだろ?
ライブラリが充実して抽象化されるとそう思うんだろうな。 「文字列っていうものと、それを加工してくれるものがある」くらいな認識なんだろう。 Cから入った人なら「ライブラリ楽すぎる」くらいに思うが。 まあアセンブリとかさらに低級なとこから入った人もCもゆとり仕様なんだろうけどさ。
Cってアセンブリに含めてる本見かけるんだけどそうなの?
788 :
777 :2008/11/20(木) 23:50:34
お騒がせしました。きっかけは
>>708 から引き続きIPメッセンジャーを
C#で書いてみたくて色々調べてた所、IPメッセはプロトコルとして
全て文字列でコマンドを表現しているらしいのですが、ヘッダには
#define IPMSG_BR_ENTRY 0x00000001UL
と定義しているようなコマンドをソースを眺める限り、文字列に変換
しているように見えなかった為、
>>777 のような事があるのかと質問させて
頂きました。しかし、Cのソースって全然意味が分からない…orz
どっかに.netで書いたサンプルでもあればいいんですが…。。
C/C++ は文字列とかそういう概念的な「型」が主役じゃなくメモリ イメージが主役。C/C++ も型はあんだけど結局それの上にある どういうことかっつーと文字列も整数値も結局ただの「バイト列」 であってそのように扱えるんだべよってこと。 ・・・たぶんこういうこと聞きたいんだよね?
790 :
777 :2008/11/21(金) 00:20:22
>>789 有り難う御座います。いかんせんC#から始めたのでイメージでしか
分かりませんが、そういう事を聞きたかったような気もします…(汗
何処で文字列にしているのかは未だに分かりませんが、コマンド部分の
論理和などを使っている所も見受けられるので、安易にstringなどで
定義せずに、取りあえず必要なところでキャストしつつ試してみたいと
思います。
791 :
748 :2008/11/21(金) 01:11:53
>>771 747さんが書いてくれた通りです。
デザイン・ビューでプロパティー・ウィンドーをみると
雷みたいなボタンがあります。
プロパティー・ウィンドーがなかったらF4を押してください。
792 :
デフォルトの名無しさん :2008/11/21(金) 01:47:45
FileStreamのWriteメソッドについて教えてください。 public override void Write(byte[] array, int offset, int count) byte[] arrayはバッファと言うことですが指定するバイトサイズは決まりがあるんでしょうか? 多く確保した方がパフォーマンスが上がったりしますか?
Cのソースも読めないのにプログラマとな
趣味グラマです
DllImportのCharSetのC#の既定値がAnsiってどゆこと? いまさら9x系なんて使わないんだしUnicodeにしとけよって話じゃね? それともパフォーマンスに関係あるのかな?
796 :
デフォルトの名無しさん :2008/11/21(金) 12:13:54
添え字でランダムにアクセスする場合 配列とList<>でどっちが早いですか?
配列
798 :
デフォルトの名無しさん :2008/11/21(金) 12:14:50
本当です 測ってみれば
じゃあめんどくさいので信用します。 ありがとうございました。
List<>は配列をラップしてるだけだから配列より速いということはありえない その上,直接配列を触る方が最適化が効きやすい
Visual C# 2008 Express を使ってコードを書き始めました 格子状にボタンが10×10個あるフォームを作って ボタン入力があったら押した座標に応じた処理を行う予定ですが フォーム側で子コントロールの Click イベントを拾う方法はありますか? Win32 では親ウィンドウでメッセージを拾うだけでしたが C# では Click イベントを100個追加する必要があるのでしょうか?
public void ForEach(LightweightAction<T> action) { for (int i = 0; i < this.array.Length; i++) { action(ref this.array[i], i); } } こうじゃね 大きい構造体のコピーを避けてるんだろ 配列に直接foreachするときは最適化されるから気にしなくていいよ
命令上、配列の for ループが一般的に超早いのよ。 だから List<T>.ForEach が 2.0 でだいぶ改善されたデリゲート 呼び出しの分巻き返して foreach より速いんだけど T のサイズ が大きくなるとコピーコストが問題になってきて遅くなるから 一定サイズコピーしか発生しない ref 渡しになっていると 実装は内部配列で for 回してるだけだと思うよ
public class LightweightList<T> where T : struct { private T[] array; public void ForEach(LightweightAction<T> action) { for (int i = 0; i < array.Length; i++) { action(ref array[i], i); } } public void Add(T obj){ ... } } こんな感じ? List<T>にあるメソッドを自前で実装しなきゃならんのか
807 :
デフォルトの名無しさん :2008/11/21(金) 12:47:38
809 :
デフォルトの名無しさん :2008/11/21(金) 12:49:12
C#のforeachもデフォルトでカウンタ持ってればいいのになぁ Perlとかだとあるよね
特にない 遅いストリームなら数K 早いストリームなら数M 辺りが基本
小さすぎるとパフォーマンス落ちるかも知れんが 大きくしたからって早くなるってもんでもないんじゃない
struct S { } class A { public A() { LightweightAction<S> list = new LightweightAction<S>(); list.Add(new S()); list.Add(new S()); list.ForEach(F); } private void F(ref S s, int index) { } } デリゲートの渡し方はこれでいいんでしょうか?
いまだにデリケートってのがよくわからんw
private delegate void LightweightAction<T>(ref T obj, int index) where T : struct; public A() { LightweightList<S> list = new LightweightList<S>(); list.Add(new S()); list.Add(new S()); LightweightAction<S> action = new LightweightAction<S>(A.F); list.ForEach(action); } private static void F(ref S s, int index) { }
817 :
デフォルトの名無しさん :2008/11/21(金) 13:20:40
>>812-813 ありがとうございます。
じゃあ、受信する総バイト数ぐらいを指定しておけば問題ないですね。
>>792 >>811 HDDみたいな遅延書き込みが有効なデバイスだと、
書き込みサイズを増やしすぎると返ってパフォーマンスが下がることが多い。
64KBより増やすのはやめておいた方がベター。
これはWindowsのAPI(WriteFile)の挙動のせい。
サイズが小さすぎる書き込みはFileStreamのキャッシュである程度救われてる。
このサイズがデフォルトでは4096 byte。数字はコンストラクタで指定できる。
FileStreamへのバッファサイズ以下の書き込みは、
バッファサイズまで溜めてから実行される。
バッファサイズよりも大きな書き込みは、直接API(WriteFile)に渡される。
結論としては、小さいサイズの書き込みについてはそこまで神経質になる必要が無くて
大きいサイズについては64KBより増やすのは避けるべき。
これってデリゲート呼び出しのオーバーヘッドは大丈夫なの?
構造体のサイズが小さいうちはデリゲートのオーバーヘッドで効果が少ない?
サイズが小さな構造体なら参照渡しより値渡しが速い。 ゲームのような特殊な最適化が必要なケース以外は使うことはないな。 そこまでの高速化をはかりたいならunsafe使えよと言いたい。
>>818 詳しい解説ありがとうございます。
FileStreamのキャッシュなんて言うのもあるんですね。
バッファより大きな書き込みはバッファを使わないってことは
大きいサイズのファイルだとWriteByteメソッドとWriteメソッドは
パフォーマンスにそれほど差が出ないと言うことでしょうか?
ブラウザ搭載型のソフトを作っているのですが、私の開発環境ではエラーを出さないのに、ユーザの環境だと以下のエラーで止まってしまいます。 Just-In-Time (JIT) デバッグを呼び出すための詳細については、 ダイアログ ボックスではなく、このメッセージの最後を参照してください。 ************** 例外テキスト ************** System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.Runtime.InteropServices.COMException (0x800700AA): 要求されたリソースは使用中です。 (HRESULT からの例外: 0x800700AA) 具体的にエラーを吐いているのは、AxWebBrowserです。 どこかのページで、Load関数に書いてはいけないというのを見かけて、Load関数から開始直後に動くTimer関数に移動したら一時的に起こらなくなっていたのですが、また再発しました。 すみませんが、根本的な回避法を教えてください。
824 :
823 :2008/11/21(金) 16:37:37
書き忘れたので補足です。 AxWebBrowser.Navigate(url); で、ページに移動している最中に止まっているようです。
>>821 unsafe使ったところで配列アクセスは早くならない
つーかunsafeで速度を稼げるケースなんかない
きちんと計測してからものを言えよ
画像の解析なんかは GetPixcel 使うより unsafe のが早かったけどね
web上で実行させるプログラムの代表といったらcgiやphpが挙げられますが C#でも同じようにweb上で実行させるプログラムを書くことは出来るでしょうか? 既にWindows上で動くC#アプリは書き終わったのですが、同じことをweb上で 実行するために一からcgiやphpで書き直すのは正直しんどいです(´・ω・`)
StringのTrim()が効かねえええ と1日悩んでたら × Name.Trim(' '); ○ Name = Name.Trim(' '); で解決しました。 俺みたいな馬鹿が他にも居るハズなのでメモ。
1日も悩むなwww
>>828 >C#でも同じようにweb上で実行させるプログラムを書くことは出来るでしょうか?
できます。でもCGIは使おうね。
C#でCGIじゃ、かなり遅そうだ。
独自のイベントを発行してWndProcで受け取りたいんですが、 メッセージの定数が被らないように決めるには何かルールありますか?
>>826 それは例が悪いだろ
GetPixelの代わりならMarshalで十分
>>802 ボタンを使う必要性が全く感じられない
>>808 の言うようにPictureBoxでいいと思う
見た目をボタンっぽくしたかったらButtonRenderer使えばいい
>>834-836 ありがとうございます
WM_APP(0x8000)以降の番号を使えばいいんですね
WM_USERは危険そうなのでやめときます
>>831-832 そうですか、フルスクラッチしてでもCGIで一から書き直すべきですか(´・ω・`)
ASP.NETは使えない?
Silverlightじゃないの
Silverlightはクライアント側
>>840 そういう予定なら、設計時から共通部分、Winアプリ部分、
Webアプリ部分を分けられるようにしておけ。
>>845 本体に付いてるnivcoAE.History.dllとnicoAE.Plugin.dllを参照設定に追加する
SharpDevelopなんて存在価値無いからVisualC#2008Express使うといいよ
そういやそんなのあったなぁ SharpDevelopってC#3.0対応してんの?
848 :
845 :2008/11/21(金) 23:21:44
>>846 上手くいきました。ありがとうございます。
>>847 Wikipediaを見たら、現在2.0までしか対応していなくて、3.0は未対応である
事が分かりました・・。
出たばかりの頃に、NiVE用プラグインを作りかけて放置してるのを思い出した。 今見ると色々酷いwww SharpDevelopで作れるけど、C#2008Express落として.NET2.0ターゲットにして作るのもいいよ
インデクサの利点ってなんですか?
たとえば文字列型で str.Chars(0); じゃなく str[0]; みたいにアクセスできる、便利じゃん。
配列と同じ構文が作れる。 組み込み型である配列と、ユーザー定義のクラスの差が縮まる。
インデクサが無かったら,たとえばDictionary使うとき object item = dictionary.Get("キー"); こんなjavaみたいな格好悪いコードになる
スレッドAで発生したイベントを、メインスレッドを受け取る方法はないでしょうか? 素朴にイベントを投げたらスレッドAで処理されてしまうようで困っています。 よろしくお願い致します。
メインスレッドがWindowsFomならControl.Invoke、WPFならDispatcherだっけか。 それ以外なら独自にメッセージポンプに近い仕掛けが必要。
>>854 やったことないんで適当なこと言うけど、
待機ハンドルを使えばとりあえず可能だろうね。
それが最適な方法かどうかは知らんけど
label1.Text = "abc"; で、a と b と c それぞれ色を変えることはできますか? label を 3 つ用意して label1.ForeColor = Color.FromArgb(0, 255, 255); label2.ForeColor = Color.FromArgb(255, 0, 255); label3.ForeColor = Color.FromArgb(255, 255, 0); とすればできますが、label1 だけでできるとスマートだなーと。
自分で描画すれば良いけどそれがスマートだとは思わない
861 :
デフォルトの名無しさん :2008/11/22(土) 13:50:38
>>829 俺もこれははまったことがある。なんか違和感あるよね。
stringはイミュータブルだからこういう実装になってんのかな?
ElementHostでWPFのTextBlock使うとか
>>861 ちゃんと理屈が分かってるのに違和感感じることに違和感感じるわ。
stringの性質を考えたらその実装いがいありえないじゃん。
イミュータブルなのにインプレースで文字列が書き換わったら そっちのほうが怖いぞ。
拡張メソッドのthis引数にrefが使えたらできるね
VBだと可能だな>拡張メソッドの第一引数にByRef
vs2005,WinXPProです。 ↓みたいなことをやりたいのですができるでしょうか? ... testFunction(Hikisuu hikisuu) { //hikisuuにnullはダメよん! } .... //testFunction呼び出し testFunction(null); ってやると、コンパイル時にエラーを吐いてくれるような、そんな事ってできるでしょうか?
refかoutにするとか。 しかし、必要性を感じないな。 引数にnullを指定しても良いと明確に分かっている時以外に普通は即値のnullなんか指定しないから。
利用可能なグローバル名前空間の列挙やグローバル名前空間を渡すとその下位の名前空間を返すようなメソッドを教えてください
void testFunction<T>(T hikisuu) where T : Hikisuu こりゃないな・・・即値のnullだけはじいてどうなるんだろ。 普通ははDebug.Assertでチェック入れといて、Releaseではずすかね。
>>869 名前空間はまとめては管理してないから、
reflectionで全Typeを列挙してかったっぱしから調べてゆくしかない。
>>867 コンパイル時にエラー出すのは無意味だよ
PostSharpとか使えば,コンパイル時(正確にはコンパイル後)に
if (hikisuu == null) throw new ArgumentNullException("hikisuu");
を生成したりできる
AOPってやつだね
>>869 名前空間は文字通り名前なんだよ
たとえばSystem.Collections.ArrayListはSystem名前空間の中にCollectionsが
入ってるわけではなく,Collectionsの中にArrayListが入ってるわけでもない
System.Collections.ArrayListという名前の型があるだけなの
だから,やるとすればアセンブリ内にあるすべての型のTypeオブジェクトを取得して調べるしかない
>>867 DbC (Design by Contract)としてそういうことができたら良いねって話は昔からあるけど
今のC#ではできない。
FXCopを使ったIL解析である程度は検出できる。
事前条件を満たしているかチェックするのって コンパイル時に出来るものなの? ちょっとFXCop使ってみようかな。
コンパイル時にできることなんか知れてる ほとんどの引数の値は実行時までわかるわけないだろ
>>871 ,872
そうなんですか・・・てっきりVSのインテリセンスの実装とかで楽なようにそういうのが用意されてるんだと思ってましたorz
C#のstringっていみゅーたぶるだったの? string t = "a"; t += "b"; とかできるけど
string s = "a"; string t = s; t += "b"; Console.WriteLine(object.ReferenceEquals(s, t));
あれってことは、追記するたびにオブジェクト作り直されてるのか ってことは、 string s = ""; foreach(t in list){ s += t.Text; } みたいな処理はやめたほうがいいのかいね
IEnumerable<string>ならToArrayしてString.Concatが速いよ 一般にはStringBuider使う
StringBuilderとか使ったら、無駄にオブジェクト作って 重くなると思ってたわー(´;ω;`) 今までのコード全部書き直しだお(´;ω;`)(´;ω;`)(´;ω;`)
string型ってたとえば string s = "hoge" と初期化したら"hoge"自体がインスタンスになるだろ?だから s += "hoge" だと"hogehoge"というインスタンスが新たに作成されるよな? StringBuilderだと"hoge"という参照自体が"hogehoge"に変更されるので メモリとか節約できて実行速度が速くなるはず
参照とインスタンスは別物です先生
string tmpstr = "テスト"; MemoryStream ms = new MemoryStream(); Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); byte[] bytes = sjisEnc.GetBytes(tmpstr); ms.Write(bytes, 0, bytes.Length); こういう感じでMemoryStreamに書き込んだ後に追加したい場合 byte[] nullbyte = { 0 }; int count = 0; while (count < nullbyte.Length) { ms.WriteByte(nullbyte[count++]); } MSDNでは上記のように書いてありましたが、こうやって追加する 以外にないのでしょうか。
Stream.Write使えば
>>883 いや、だから"hoge"というStringクラスのインスタンスの参照が
String型の変数に格納されると理解してるんだが違うのか?
日本語でおk たぶん間違ってる
>StringBuilderだと"hoge"という参照自体が"hogehoge"に変更される おかしいのはこっちでしょ 「参照自体」を「インスタンス」と読み替えたとしても,解ってる人でないと意味不明だと思う StringBuilderは内部で大きめのStringを確保して直接書き込んでる
>>888 StringBuilderが持ってるStringってStringクラスのインスタンスじゃないのかの?
890 :
884 :2008/11/22(土) 17:48:08
>>885 有り難う御座います。offsetの意味を勘違いしていたようです。
普通に以下で追記出来ました。
ms.Write(nullbyte, 0, nullbyte.Length);
そうするとWriteByteの使い道ってなんでしょう?
>>889 Stringはイミュータブルなんだからそれはない
charの配列で持っているんだろう
C#ってCみたいにchar[]で文字列扱えないの? たまにそれが不便に感じるときがある
そういう使い方をしたければ、StringBuilderでもchar[]でもList<char>でも好きに使えばいい。 必要に応じてstringに変換すればいいだけ。
>>891 違うよ本当にStringだよ
internalメンバ使ったり,ポインタでchar*として扱ったりすれば変更できる
そういえばたしかプログラミングMicrosoft .NET Frameworkには、 StringBuilder.ToStringは文字列のコピーをしないから 高速だ、みたいなことが書かれていたな。
バッファのStringをそのまま返す実装になってるみたいだね その後にAppendされるとバッファを確保し直すみたい
898 :
891 :2008/11/22(土) 18:24:37
>>895 sscli見た限りではその通りだった。失礼
自分みたいに中途半端に実装を推測しちゃいけないね
>>895 将来の.NETでも同じとは限らないけどね。
BCLのライブラリ設計ではことごとくstringをimmutableとして扱ってるから
外部からはimmutableとして扱っておけばそれでいいと思う。
イミュータボーってなんかメリットあるん? 変更できないっつーとゴミオブジェクトがボコボコ生産されるってことだよね?
ということは
>>882 は日本語がMSDNの翻訳並ってだけで
説明はあってるよな?
>>900 使い回しが利く
他所様に勝手に書き換えられる心配がない
他にもあるかも
>"hoge"という参照自体 ここの意味が分からん たぶん間違ってる
"hoge" と "piyo"でもう一回書いてみてくれ 今度は理解する努力するから
参照”先”が抜けてるのが原因だな あとは通じる
>>906 >可変長変更を重視するなら「木構造、immutable」、
>添字によるアクセスを重視するなら「固定長配列、immutable」が有利です。
後者の意味がよく分からんのだけど・・・
なんでimuutableが関係してくるのか
あと、部分文字列の取り出しがfix/mだと×なのかわからん
中身変更できるのに長さは固定なのは不自然だろ
>>900 >>903 も書いてるけど、他所様に勝手に
書き換えられる心配がないのはかなりありがたい。
もしstrがimmutableじゃなかったら、
void DoSomething(string str)
{
str = str ?? string.Empty;
if( str.Length > 12 ) {
// エラー処理
return;
}
// 何らかの処理
Hogehoge();
PiyoPiyo();
// Hogehoge()やPiyoPiyo()の中の処理によって
// strの長さが12より大きくなってる可能性がある
}
C++でconst char*やconst std::string&を使って
文字列の受け渡しをするとこういうことが起こりうる。
なるほどな でもconst char*で変更されることなんてあったっけ
せめて文字数が変わらない変更ぐらいはmutableでやってくれればいいのにね 実装ではそうなってるかも知れないけど
>>908 添字自体はmutableでもいいが、
直前にmutableのメリットはあまりないと書いているのを踏まえるているだけだろう。
fix/mで部分文字列取り出しが×なのは、
>>829 を見れば分かる。
>>911 char *p; //グローバル変数これでDoSomething(p);とする。
HogeHogeやPiyoPiyoがpを書き換えたら……、というわけ。
>>911 #include <cstdio>
char g_buf[256] = "piyo";
void HogeHoge() {
g_buf[0] = 'H';
}
void DoSomething(const char* buf){
puts(buf);
HogeHoge();
puts("const char*はimmutable stringではない");
puts(buf);
}
int main() {
DoSomething(g_buf);
}
これが理由かどうかは知らないけど、 immutableであれば==で値の比較が出来ることと、他の参照型との整合性が 両立するんだってことがartonって人の本には書いてあった。 つまりimmutableであれば、値が等しいことと同一であることを 区別する必要がないからね。
あーconst char*で呼び出した関数からじゃなくて、 大本のポインタから変更される可能性があるってことか
imuutableでも string s = "hoge"; string t = "hoge"; でs==tがtrueになるかfalseになるかは言語によるんじゃないの?
>>919 そうなんだけど、だから少なくともC#の設計者はs==tがtrueになるようにしたかったんでしょ。
俺もその判断は正しいと思うけど。
unsafe static void SetChar(this string str, int index, char value) { fixed (char* pStr = str) { pStr[index] = value; } } もうこれで
でも厳密に言えばfalseだよな
>>920 あーそういう意味か
immutableだと単純にtrueに出来ないってことか
>>914 すまん、勘違いした。
StringBuilderやList<>のRemoveで先頭からn文字目取り出すとき、
n文字目以降を先頭に移動する操作が必要だろ。
それでO(n)だ。
C#のstringの==って文字数がNのときO(1)だっけ?
Cの場合、文字列リテラルはコンパイル時点で静的に配置される。つまり、 str1 = "hoge"; str2 = "hoge"; と書いた場合、strcmpするまでもなく、str1 == str2(ポインタの比較)だ。 誰からも参照されなくなっても、"hoge"という文字列リテラル(なオブジェクト)は 静的に存在し続ける。 このC(C++も同様)におけるふるまいと違和感を持たせないためにも、C#では 今のような実装になってるんじゃないかな。
>>925 C# のがどうかは知らないけど、一般的なアルゴリズムの場合、
検索対象 N 文字、検索したい文字 M 文字なら O(N/M) だった気が。
>>929 ・左辺と右辺が同じオブジェクトだった場合にtrueを返すのは高速
・左辺と右辺が異なるオブジェクトで、文字列の長さも異なっていた場合にfalseを返すのは高速
どちらでも無い場合は今まで通り。
c# で Outlook のアイテムを色々いじっています。 Outlook から仕事や予定表のアイテムをファイルに保存することができましたが、 その出力したファイルを Outlook に読み込む方法が分かりません。 そういうことって出来るんでしょうか。 リファレンスを見てもファイルを開いて読み込むメソッドなどは見当たりませんでした。
932 :
デフォルトの名無しさん :2008/11/23(日) 01:54:28
CustomHashSet<int> set = new CustomHashSet<int>(); set.Add(1); public class CustomHashSet<T> : HashSet<T> { HashSet<T> _HashSet = new HashSet<T>(); public void Add(ref T obj) { this._HashSet.Add(obj); } public void UnionWith(ref IEnumerable<T> other) { this._HashSet.UnionWith(other); } } これのAddメソッドの所、refを付けないと実際にAddされない。 まず、なぜ引数でrefを付けてるのに、呼び出す時に付けなくていいの? C#3.0の仕様?? で、refをはずしたら、public new void Add(T obj)にせねばならず、実際にAddされない。 この辺のカラクリを誰か教えて!
からくりっつーか…… 単に基底の方のAddが呼び出されるだけだろ
934 :
デフォルトの名無しさん :2008/11/23(日) 02:06:21
>>933 やっぱりそうでしたか(^^; ありがとうございます
今から習得するならC#とD言語どちらがおすすめ(´・ω・`)?
超マイナーなD言語やるよりはC#やったほうがいいよ ドキュメント的な意味で
C言語の後継をもくろんでD言語という名前を名乗ったはずなのになんでマイナーのままなんだろう?
// あれをこれの真ん中に表示する // that.Left = this.Left + (this.Width - that.Width) / 2; // that.Top = this.Top + (this.Height - that.Height) / 2; // ロケーションを使う場合の書き方を教えてください that.Location = this.Location + (Point)(((this.Width - that.Width) / 2), ((this.Height - that.Height) / 2)); これは駄目でした
>>938 アンサイクロペディアの記述読めばなんとなく分かるんじゃないかw
>>939 that.Location = this.Location + new Size((this.Width - that.Width) / 2, (this.Height - that.Height) / 2);
942 :
デフォルトの名無しさん :2008/11/23(日) 10:03:39
メソッドの引数に↓こんなのがあるんですが、 この?はなんですか? out float? result
Nullable<float> の略記
グレープシティのSpreadって開発マシーンのみインストールしていればいいんでしょうか? クライアントにもインストールいるならつかえねーな。と。。。
グレープシティにきくかマニュアルよめ。
>>945 それくらい自分で調べられないような開発者は使えねーな、と。
つか、WinForm用、WebaForm用、どっちの話なんだよ?
StringReaderを使ってReadLineした場合に改行が含まれてしまうケースなんてあります?
ないです
>>949 ありがと
改行が入ってしまうのですが原因が別にあるらしいので見直してきます
DateTime型で保存してある期限日と、現在の日付をDateTime.NOWで取ったものを比較して 期限日から3日以内なら〜とか、1日以内なら〜と条件分岐させたいのですが、どのような条件文にすればいいのでしょうか?
>>951 DateTimeどうしを減算したらTimeSpanが返ってくるだろ?
TimeSpanのメソッドにHoursとかDaysとかあるじゃん。
>>952 TimeSpanが返ってくること自体を知りませんでした・・・
これで何とか実装できそうです、ありがとうございました。
再頒布ライブラリがクライアントにいる。 そして、Spreadを開発に使用したこととを銘記する必要がある。 はっきりいって、10万以上だして買う意味わかんね、使わんほうがいいぞ。
>>950 頭かケツに改行コードつくのなら、String#Trimで取り除けばいいんじゃね?
>>945 ゴミだからさっさと別を選べ。
もうVB屋さんの知るグレープシティじゃないんだよ。
957 :
デフォルトの名無しさん :2008/11/24(月) 00:18:50
C#っておもしろいね。でも、業務で使う文にはJavaやVB.netとそうかわらないね。 C#って文字通りシャープな感じがあるよね。構文とかに。Javaはもっさりした感じでのほほん。 VBはこざかしい。
VBはアットホーム C#は殺伐とした職場
VBのコードの方が俺みたいな血のめぐりの悪い人間には読みやすいな。 タイプ量は若干多いけど。 ところでC#(VS2005)のエディタってVBみたいにabstractとかインターフェイスのメンバの スケルトンの自動挿入機能ってないの?
あるよ
あー右クリのコンテキストメニューでできるんだw 今までリアルで気づかなかった VBだと問答無用で挿入されるからなあ。
VB は油断してるといつの間にかセミコロン書いてて怒られる。 あと、無性に If 文の条件式部分を括弧で括りたくなる。 \n と書いても改行されなくてすこし悩む。
DESCryptoServiceProviderで暗号化したものを間違った鍵で復号しようとすると 正しい鍵で復号しようとした時よりも時間がかかるのはどうして?
あたりまえだろw
C#にLike演算子が無いことに今気づいたw ワイルドカード使うのにRegex必要なのか
むしろそんなもんわざわざ演算子にして欲しくない
使いたいならMicrosoft.VisualBasic.CompilerServices.LikeOperator.LikeString メソッド呼び出しなのですっきりですね
なんでVBだけそういうシンタックスシュガー的なクラスが入ってるの?
そりゃ過去との互換性のためだろ
Like演算子はいいぞおー
シンタックスシュガーと言ってしまうと元も子もないな
>>968 IEnumerableを実装してればforeachが使えるとか
IDisposableを実装してればusingが使えるとかも
同じ類じゃなかろうか。
(気持ち悪いからこの際自分で自由に構文追加できるようにしてくれよ
と思うこともある)
VBにそういう変なのが入ってるせいで VBのソースをC#に変えるのがめんどうになってるな
質問。C#3.0の自動プロパティ(int a{get;set;}ってな奴。)のsetって値をコピーしてるの? それとも変数のアドレスを代入してるの?
C#の方針は、C/C++文化を受け継いでて、 ライブラリでできることは極力ライブラリでやるからなぁ。 文法の追加(3.0のLINQとか4.0のdynamic)すら、 単純な構文糖衣で、実態はライブラリ呼び出しだし。
>>974 意味わからんけど、自動プロパティは、
int X{set; get;}
と書くと、
int _x = 0;
int X { set { _x = value; } get { return _x; } }
という匿名のメンバー変数が自動生成されるだけ。
>>976 その
int _xがポインタかどうか知りたい。
ポインタなんて/unsafeつけなきゃコンパイルもできません
>>979 976のコードと等価、という事実以上でも以下でもないと思うんだけど。
頭悪いの?
なんでこんな態度悪い質問者おおいん?
値方と参照型の区別もまだつけれてないと考えられる
ソート済みのString[]変数があったとして、そこから文字列を検索する場合に打って付けなメソッドを教えてください
二分探索メソッドを自作
Array.BinarySearch
>>985 ,986
ありがとうございます
キーに適合する複数の値を返して欲しい場合は自分で作るしかないっぽいですね
>>984 検索のためだけに存在する配列なら、Dictionaryで保持するという方法もある。(値はnullをセットする)
UIに表示するなど、順序も保持したいのなら、SortedDictionary。
検索は、変数.ContainsKey(検索文字列)でチェック出来る。
配列のインデックスを検索したい場合は、Dictionaryの値に、インデックスをセットしておけば、変数.TryGetValueで、存在チェクも兼ねて、取得してくれる。
>>987 うう...部分一致検索か...
DataTableに突っ込んで、DataTable#Selectで取得してくるのが楽かも。
Selectメソッドフィルタ基準にLIKEがあるので。
LINQもあるな。 DataTableのほうが速いらしいけど。
>>988 ,989
説明不測ですみません、やしたいのはまさにその部分一致検索でした
DataTableでやってみたらforeachで回してた時より大分速くなったのでこれを使っていくことにします
使い方はこんな感じであってますよね・・・?
DataTable t = new DataTable ();
t.Columns.Add("Name",typeof (string));
foreach (string name in NameList) {
DataRow r = t.NewRow ();
r["Name"] = name;
t.Rows.Add (r);
}
t.Select("Name LIKE 'hoge'")
C#でWEBプログラム書こうと思ったら、 C#.NETになるの? それとも、C#+ASP.NETになるの?
「ASP.NET を C# で書く」じゃないかと。
C#で単発のCGIプログラムを書くことも可能だぞ。
C#と.NETの切り離しがよくわからない この二つは常に一緒になってる気がする わからせないように作ってあるのかもしれんが
Monoのこと、時々でいいから思い出してください
>>991 元々どういう実装してたのか分からんが、DataTable.Selectは遅いよ
とりあえず実験してみたから、考察は自分でやってくれ
[実験]
852個の英単語(ソート済み)から、先頭一致で"co"を検索する処理を
以下の実装でそれぞれ10000回実行したときの経過時間を計測
(環境: PenM 1.7GHz, Mem 1GB)
1. DataTable.Select, LIKE演算子 (DataTableは事前に作成)
2. LINQ, where句
3. Array.FindAll
4. Array.FindIndex (範囲の下限と上限を探す)
5. 二分探索 + Array.FindIndex (最初の1個だけ二分探索、あとは4と同様)
[結果]
1: 01:14.5145383
2: 00:03.3538505
3: 00:03.4140853
4: 00:00.6785046
5: 00:00.4187657
Mono is a cross platform, open source .NET development framework. ってこんなに大きな文字でうたってるんだから、いいんじゃない?
終了
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。