新スレ乙
そこは厨房サイトだから削っとこうぜ
初学者の参考になるのは間違いない。使う単語はアレだが。
7 :
デフォルトの名無しさん :2005/07/24(日) 14:46:14
Shockwave Flash Object」 (Flash.ocx)をつかって C#にFLASH(SWFファイル)を読み込みました。 デスクトップウォッチみたいなものをつくりたいので SWFの背景も透明にしたいと思うのですが上手くいきません。 これは実現可能なことでしょうか?
8 :
7 :2005/07/24(日) 15:56:23
自己解決しました。 すみません
解決方法書いとけよ
10 :
9 :2005/08/01(月) 14:16:57
自己解決しました。 すみません
ちょっと笑っちまったぜ
趣味で C# いじってる者です .C# に対応したおすすめのステップカウンタ 何か紹介してください 宜しくお願いします
13 :
12 :2005/08/04(木) 23:25:19
exeファイル内にビルドした時のファイルパスが入ってるんだけど なんとかして消す方法ないですか
Releaseビルドでも入ってるんだよー C:\○○\obj\Release\HogeHoge.pdb って感じで
デフォルトの設定なら、Release ビルドしたあと Release フォルダ内の exe を使え。 それでも入っているなら、デバッグ情報を生成するかどうかの設定がどこかにあるから必死こいて探せ。
>>16 objフォルダは人に見せるものではない。
自分でさえまず見るものではない。
19 :
17 :2005/08/05(金) 21:23:06
ほんとだ。obj じゃなくて bin を見るべきだな。両方とも結果は同じだと思うけど。
>>17 ビルドの設定は初期状態から弄ってないです
>>18 bin\Release\HogeHoge.exe に ...\obj\Release\... って文字列が入ってるんです
pdb はデバッグ情報が入っているファイル そのパスが exe 内にあるということは、デバッグ情報付きでビルドした証拠 ……設定を、もう一度確認の事
うちのファイルには入ってなかった。
お礼
26 :
24 :2005/08/10(水) 10:27:01
ContainerControl.ActiveControl プロパティ ってヘルプを見ると public virtual Control ActiveControl {get; set;} となっているけど、本当にvirtualになってる?
2002のヘルプじゃvirtualになってないな。 困ったときはildasmでアセンブリを確認。
ildasm で get_ActiveControl をみると、 .method public hidebysig newslot specialname virtual final instance class System.Windows.Forms.Control get_ActiveControl() cil managed この様になってました。final がついているということは virtual ではないということでしょうか? MSILがわからないので的外れなことをいっているかも。
virtual メソッドはオーバーライドできるけど、final を付けると以降サブクラスでの上書きが出来なくなる ……筈 virtual かつ final なメソッドは在るよ
31 :
デフォルトの名無しさん :2005/08/16(火) 18:54:51
なんか、すんごい初心者質問ですいません。。。 フォーム1のボタンを押すと、フォーム2を開く。 フォーム2のボタンを押すと、フォーム1に戻る。 ということがやりたいのですが、 フォーム2を開けずに困ってます。 2枚目のフォームをプロジェクトに追加して、インスタンスを作成すれば表示できるのですが、 なんか、いまいちな気がするのです。。。 スタンダードなやりかた教えて下さい。 なんか、すんごい初心者質問ですいません。。。
>>29 そこまで調べたなら上出来だ。
ちょっと解説を付けとこう。
ヘルプのSystem.Reflection.MethodBaseクラスのIsVirtualプロパティにそこら辺の情報がある。
ちなみにこのプロパティはメソッドにvirtual属性がついてるかどうかを返すって単純なもの。
かいつまんで言うと、コンパイラはインターフェイスの実装メンバには必ずvirtual属性を付けなければならない。
その場合、クラスでその実装メンバがvirtualやabstractで修飾されていない場合はfinal属性を付けてオーバーライド禁止であることを示す。
何でこんな事をするかって言うと、
インターフェイスの明示的実装が内部でインターフェイスメンバのオーバーライドとして表現されるから、
内部的にはvirtualじゃないとまずいのね。
>>31 ごく真っ当な手法だと思うんだが、なにがどういまいちと感じるんだ?
>>32 解説ありがとうございます。
IsVirtualプロパティも参考にしてみます。
34 :
858 :2005/08/16(火) 22:18:27
WIN32API板から誘導されてきました。 [C#バージョン] VC# Express Beta2 Windows XP sp2 [目的] IMEをONの状態にしておいて、 日本語による文字入力が「開始」されたことを検知する。 また、 日本語による文字入力がリターンキーなどにより確定したことを検知する。 [作ってみたソース] namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void WndProc(ref Message m) { Console.WriteLine(String.Format("{0,5:X}",m.Msg)); base.WndProc(ref m); } } }
35 :
デフォルトの名無しさん :2005/08/16(火) 22:23:08
36 :
デフォルトの名無しさん :2005/08/16(火) 22:26:12
うんあのさ、メッセージを受け取るのは結局どのオブジェクトなのか、 言い換えればどのウィンドウなのか、考えれば分かるよな?
38 :
858 :2005/08/16(火) 22:55:04
ってことは、 WndProcを呼び出すときに、 自己のハンドルであるThis.Handleを引数として入れてあげないと いけないってことですか?? (↑この文は、かなりわけもわからずに書いていますが・・・)
39 :
858 :2005/08/16(火) 23:12:47
九層・・・わかんないです・・・(T_T)
だからさぁ、実際にキー入力されて文字出力されるのはFormじゃないでしょ? それなのにFormのWndProcで受け取ろうとしても無駄でしょ? 受け取るWndProcはどのオブジェクトのものよ? それをオーバーライドしなさいってこと。
41 :
858 :2005/08/17(水) 00:21:04
実際にキー入力されて文字出力されるのは、FOrmじゃなくて、 テキストボックスです・・・。 受け取るWndProcはテキストボックスクラスから作ったTextBox1のものです。 それをオーバーライドします。 ふむふむ・・・え、そうなの??(><
42 :
858 :2005/08/17(水) 00:38:37
public class TextEX : TextBox { protected override void WndProc(ref Message m) { Console.WriteLine(String.Format("{0,5:X}", m.Msg)); base.WndProc(ref m); } } public partial class Form1 : Form { TextEX tx; public Form1() { InitializeComponent(); tx = new TextEX(); tx.Name = "40さんありがとう"; tx.Left = 1; tx.Top = 1; tx.Width = 50; this.Controls.Add(tx); } }
43 :
858 :2005/08/17(水) 00:54:36
public class TextEX : TextBox { protected override void WndProc(ref Message m) { switch(m.Msg){ case 0x010D: this.Parent.Text="start"; break; case 0x010E: this.Parent.Text="end"; break; default: break; } base.WndProc(ref m); } } public partial class Form1 : Form { TextEX tx; public Form1() { InitializeComponent(); tx = new TextEX(); this.Controls.Add(tx); } } 板汚してすみません。 テキストボックスから派生クラスを作らなくてもすむ方法って ないでしょうか・・・。
下記のような動作をするプログラムを書きたいのですが、教えてください。 フォーム内のTextBoxに何か文字を入力 ↓ 登録を押す ↓ 指定されたWeb上のTextBoxに文字を入力し、スクリプトを起動させる(?) うぅ、説明がひどすぎる・・・ (例) 2chの専用ブラウザ →フォーム内のTextBoxに書き込み、「書き込み」ボタンを押すと2chに書き込むことが出来る すみません、日本語が下手すぎますね。 申し訳ありませんがご教授願います。
>>44 専ブラの2ch投稿と一般的な入力補助ソフト(懸賞支援みたいなのとか)じゃ全然動きが違うが……
>>43 何で派生クラスが嫌なのさ
オブジェクト指向が嫌ならWin32APIにどっぷりつかってSetWindowLongでWndProc書き換えれば
46 :
44 :2005/08/17(水) 23:36:54
>>45 とあるWebページに文字を何箇所か入力して登録をする作業があるのですが、
入力する場所がかなり離れていていちいちスクロールバーを上下させるのが
面倒なため、入力が必要な部分だけ抜き出して登録を行いたい、というのが
目的です。
IEのアドレスバーにスクリプト書くだけでいいような希ガス WebBrowser クラスの URL プロパティだったかに javascript:hogehogehgoe とか代入しても動いていたような気もする
48 :
858 :2005/08/18(木) 00:24:08
>>45 すみませんでした。
派生でがんばります。おっしゃるとおりです。
IEでいいならautomationで。 よくあるなこの質問。
51 :
44 :2005/08/19(金) 12:23:49
>>47 >>49 >>50 どうもありがとうございます。
仕事の効率化とC#の勉強もかねて作ってみようかと思ったのですが、
結構難しくて挫折しそうです…。サンプルのソースもかなり探したのですが
見当りませんでした。
質問です floatの変数を書式指定してstring型に変更するためにC言語のsprint()のような関数を探しているのですが見つかりません 同じような動作をする関数はありますか?
ToString 関数じゃなくてfloat(System.Single)のインスタンスメソッドだけどな。
ありがとうございます foo.ToString("F2") みたいにやるといいんですね 助かりました
System.Void って何に使うの?
リフレクションとかに
57 :
858 :2005/08/25(木) 00:10:41
>>52 String.Format("{0,5:F}←書式設定",hensuu_float);
58 :
デフォルトの名無しさん :2005/08/25(木) 20:21:34
***.txtから***.cに変えて保存するときに、できるPCとできないPCがあります。 新しいパソコンを買おうと思っているのですが、もちろんできる奴がほしいのですが 変更できない奴買うと困るので教えてもらおうと思って書き込みました。 あと、何故できないのかも教えていただけたら幸いです。宜しくお願いします。
俺にはわからんから他のスレで聞いてね
>>58 基本的に総べてできる。
できないPCを見たことが無い。
>58 まさか拡張子を表示しない設定にしてるとかないよな
62 :
58 :2005/08/25(木) 22:11:28
弟の使ってるパソコンではできました。確かXPです 自分のは98でして、OSとかもちろん関係ありませんよね 拡張子を表示しない設定というとすべてのファイルにしてないってことですか? 状況をかくと***.cに変えるとき、例えば test.cって名前で保存すると そのままの名前でテキストになってます、もちろんすべてのファイルにしてあります 弟のPCを使うと普通にCファイル?にできるんですけど
PC初心者板へ
>>58 使ってるソフトの設定だろう。 (なに使ってるかしらんが。
使い方の問題でPCのせいではない。
65 :
デフォルトの名無しさん :2005/08/25(木) 22:25:42
お騒がせしました、初心者板へいってきます。
66 :
デフォルトの名無しさん :2005/08/25(木) 23:32:34
buttonコントロールを貼り付けて その中の表示text部分の文字を寝かせる事は可能か
>>66 寝かせる?Italic の事?
ならばフォント指定でそうすれば良い。
TabControlをオーナードローすると見た目がダサくなっちゃうから XPのビジュアルスタイルを保ちつつオーナードローする方法ってない?
69 :
デフォルトの名無しさん :2005/08/25(木) 23:42:47
いや文字を左又は右90°回転できるかということ
>>69 そう言う風にフォントを作ればできる。
Fontクラスのコンストラクタじゃ不可能なのでFont.FromLogFontで。
LOGFONT構造体については頑張ってしれべれ。
そうか 分かった
72 :
53 :2005/08/26(金) 00:22:50
超初心者ですいません、コンパイルするさいに エラーE2209 インクルードファイルをオープンできない、といわれました borland c++ 5.5 ってコンパイラーを使ってます。 誰かたすけてもらえませんか?
スレ違い
74 :
53 :2005/08/26(金) 00:31:35
なんでやねん、自分で調べろとか、煽られたりするならまだわかるけど すれ違いってwそりゃないぜ
C# != C++
76 :
53 :2005/08/26(金) 00:36:23
失礼しました
77 :
858 :2005/08/26(金) 01:51:18
C++ != C++
++C == C++
+ + ++C++ + +
++C++ == D
>>81 Dは無駄な機能だらけといいたいのか貴様!
83 :
デフォルトの名無しさん :2005/08/27(土) 00:21:59
タブブラウザを見様見真似で作っている最中だが ブラウザ起動直後に自動的にタブページが 1つ開いている状態にするにはどうしたらいいか ヒントくれ
そう言う風に書く 何が分からないのかが分からないよ
質問してよいですか。 下のような構造のコードなんですが、 rnd が初期化される前に rnd.Next() が呼ばれるため エラーになってしまいます。 これはどうやって回避すればよいのでしょうか。 要はベースクラスのコンストラクタよりに先にコードを実行したいんですが class Hoge { static void Main(string[] args) { DerivedClass cls = new DerivedClass(); } } class BaseClass { public BaseClass() { VirtualMethod(); } protected virtual void VirtualMethod() { } } (つづく)
(つづき) class DerivedClass : BaseClass { private Random rnd; public DerivedClass() { rnd = new Random(); } protected override void VirtualMethod() { int n = rnd.Next(); Console.WriteLine(n); } }
単にVirtualMethod内でnewすればいいだけの話では。 if (rnd == null) { rnd = new Random(); } int n = rnd.Next(); ...
89 :
86 :2005/08/27(土) 06:14:34
>>88 レスどうもありがとうございます。
その方法がありましたね・・思いつきませんでした。
自分の場合は解決したのでいいのですが、
コンストラクタでの初期化はできないんですかね。
rnd の使用箇所が多いと結構面倒な気がしますが
class DerivedClass : BaseClass { Random rnd = new Random(); protected override void VirtualMethod() { int n = rnd.Next(); Console.WriteLine(n); } } こんな風に書けたと思う。
91 :
86 :2005/08/27(土) 07:06:05
>>90 ああ、なるほど・・
そんな書き方ができたんですねえ。
それが答えっぽいですね。
コンストラクタの初期化は全部そうしたほうがいいのかな・・?
ともあれ、どうもありがとうございました。
>>91 ,96
>コンストラクタの初期化は全部そうしたほうがいいのかな・・?
その考え方を続けると立ち上がりが異常に遅いソフトが出来るぞ。
漏れは、Initialize()メソッドを作って、まずは最短で画面表示をして。
初期化を必要な場所に分散している。 (まあ、好みの問題だがな。
これにより、何をしているかを表示するユザーフレンドリーなソフトにしている。
立ち上がりが遅すぎて実際の使用に支障を来すことがわかってから修正してもいいんじゃね 初めからそれをやるのは早すぎる最適化
>>90 みたいに書いてDerivedClassのオブジェクトをnewすると、
先にフィールドのrndに中身が入って、その後
BaseClassのコンストラクタ -> DerivedClassのコンストラクタが呼ばれる流れになるんでしょうか?
>>94 そうだよ。
ildasmで派生クラスのコンストラクタを見てみると流れがよく分かる。
>>95 ありがとう。
ちなみにこの考え方続けると
>>92 さんの言うように初期化が遅いソフトになるってのは分かるんですが、
今回の
>>90 の場合は、rndはstaticメンバじゃないから、
DerivedClassのオブジェクトが作られるまで中身入りませんよね?
そうだね。
>>96 クラス単独で見ればそうだね、全体を見たら、起動時のコンストラクタに
入っていたと言うのは良くある話。
99 :
デフォルトの名無しさん :2005/08/29(月) 01:46:28
漢字入力を始めたときに飛んでくるWM_IME_STARTCOMPOSITIONなどを 監視して、以下のようなソフトを作りたいと思っています。 @ワード文書内において、 AIME入力、言い換えれば漢字入力を開始すると、 B入力された文字が確定されるまで、 C背景を薄いブルーにする、 というものです。 すでに私は、 ソリューションダイアログでWord.ObjectLibraryを参照するように設定することで、 @ワード文書に例えば文字列をinsertしたり、選択範囲を変更したりできるようになりました。 また、 自分のフォームに、テキストボックスから派生させたMyテキストボックスを 貼り付けて、そのMyテキストボックスに文字が入力されはじめたことを ウィンドウメッセージとして取得できるようになりました。 具体的には、派生させたクラス(Myテキストボックス)のWndProcをOverrideして m.MsgがWM_IME_STARTCOMPOSITIONかどうかを判定する機能を追加しました。 【質問】 しかしながら、Myテキストボックスでは「文字が入力されはじめたことを検知」する 機能を搭載することに成功したのですが、 ワード文書ではうまくいきません。とうかどうやるのかよくわかりません。 テキストボックスから、上記の機能を搭載したクラスを派生させるように、 例えば、Word.ApplicationやWord.Documentから派生クラスを用意して適宜同じように WndProcをoverrideすればうまくいくでしょうか。 もっとも、Word.Applicationは、インターフェース型(?)ですが。 【質問2】 思いっきりすれ違いな予感もしますが、当方VisualC#2.0 beta2 , WindowsXPsp2,Word2000です。 よろしくお願いします。
Win32APIのWaitMessage()に対応するメソッドを探しているのですが、見つかりません。 どなたかご存知の方いらっしゃいましたら教えていただけないでしょうか
>>101 なぜWaitMessageを使いたいのか知らないが、どうしても使いたいならDllImportして使えば?
103 :
101 :2005/08/29(月) 19:46:22
ありがとうございます。 ウィンドウを最小化している間、無限ループを一時止めるために使おうと思ってます。 今は一応DllImportして使ってますが、他に.netでの一般的な方法が無いかと思い質問させていただきました。
ASP.NETを使ってサーバーからクライアントのプログラムを実行させる方法を探しています。 やりたいことは、他クライアントのUSB機器をサーバーを介して動かすというものです。 USB機器を動かすというプログラムは別途作成しました。 ただ動かすという実験だけなので、はたから見るとサーバーを介しているように見えるだけでもかまいません。 開発環境はVC#2003で動作PCはサーバー、クライアント共にWinXP Pro(ローカルネットワークで接続)です。 色々と切り捨てるため、セキュリティ、機種依存などは問題としないことにしています。 何かよい方法はないでしょうか。
ASP.NETでやるならActiveXを使うしかないな。 C/S型ならまあ好きにやればいい。
106 :
104 :2005/08/29(月) 22:10:38
107 :
99 :2005/08/31(水) 19:33:42
再度質問です。 前回の質問がちょっと無謀だったので変更します。 Wordで未確定の文字があるのを検知することはできませんでしょうか・・。
できるよ。spy++ みたいなもんを作れば。
109 :
99 :2005/08/31(水) 21:05:13
SPY++では、WORDに照準をあてて(?)やってみても、 WM_IME_STARTCOMPOSITION出てきませんよ。 ワードにくわれるみたい。
それってC#とはあまり関係ないんじゃ マルチポスト良くない
>>109 たしかワード自体ではなくて、その中の実際に文字を入力する部分がウィンドウになっていて、
そこにでないとWM_IME_STARTCOMPOSITIONとかは出てこないはず。
112 :
99 :2005/08/31(水) 21:28:57
開発言語がVC#2.0beta2なんです。申し訳ないです。
ここの掲示板の方はひょっとすると、VC++を専ら使用されてるかとも
思ったんです…。
>>110 すみません。ふらっとC#へは今後この件に関して投稿しないことにします。
>>111 なるほど、そうだったのですか。
ところで、VBAには、「今現在は、何らかの文字が未確定にあります」っていう
ことを検知できる方法、何かないでしょうか。
僕は、Word.ApplicationClassとか、Word.DocumentClassとかを
継承させて自ら作ったMyApplicationClass等内で
private override void WndProc(Message m){
}
と、書けないかなと思ったのですが、
テキストボックスから派生するかのようには
簡単にはいきませんでした。
113 :
99 :2005/08/31(水) 21:30:20
間違えました。 すみません。ふらっとC#へは今後この件に関して投稿しないことにします。 ではなく、 すみません。WINAPIへは今後この件に関して投稿しないことにします。 と修正させていただきます。あぁはずかしい…。
いや修正しなくていいから
115 :
99 :2005/08/31(水) 23:53:27
116 :
デフォルトの名無しさん :2005/09/01(木) 00:14:54
C#ってC++にとってかわる可能性はあるんですか? 海外の書籍が少なので不人気なのかとちょっと疑問がわいた。
少ないって、歴史を考えろよ まあ少なくとも向こう5年はそうかわらんだろ WindowsがWinFXで動くようになればWindowsの開発では主流になるかもしれん。 しかしLinuxやらでメインになることはあんまり考えられんな。
>>117 Effective C#がない時点で少しがっかりしたのです・・・
VB.Net関係の書籍は結構でてるのにね
確かにC++のバイブルと言われてるけど、EffectiveC++ってそんなにいい本だったかな…? どうしようもないC++をそれでも使うための指針、がまとめられた本という印象を受けたんだけど C#はそこのところキチンと作られてて自動的に解決されちゃうからそういう本は需要少ないんじゃないかな
C#は言語仕様そのものはあっさりしてるからねぇ。 2.0でGenericsが加わったとは言えテンプレートほど傍若無人なものでもないし。 どっちかってとC#よりも.NETの修得の方に時間がかかる。 あとVB.NETの本っつっても大半が入門書じゃね? 偏見に基づく先入観?
122 :
デフォルトの名無しさん :2005/09/01(木) 01:57:53
くだスレc#の 落ちたばかりの最新のスレのアドレス知ってる方居ましたら誰か教えてください。
つ にくちゃんねる ……くだスレ?
>>123 昔あった、ここと似たような初心者用C#スレ。
>>119 Effective C++は、C++使い始めの頃に読んだんだけど
なかなかヨカッタっすよ。C++の不便なところも見えたし。
>>120 海外の翻訳書が少ないって意味ですた。
あっ本当だ。でも洋書(´・ω・`)ショボーン
翻訳されるまで待つ。
とりあえず本屋に逝って目次だけ見てみる。
あと、C#版のJ2EEパターン・J2EEデザインパターンや
JAVAの鉄則みたいな書籍があると助かるのだけど・・・
MSDNのサンプルとかは役に立つのかな。
127 :
デフォルトの名無しさん :2005/09/01(木) 09:23:58
質問してもよいですか vc#でボタンの名前を変更してもイベントハンドラの名前が変わりません。 button1のままです。 イベントハンドらの名前を変えるとビルドエラーになります。 これは仕様ですか?
128 :
デフォルトの名無しさん :2005/09/01(木) 09:27:46
AというフォームがBというフォームを継承しているか調べるにはどうすればいいのですか?
>>127 仕様。
変えたいのならハンドラのメソッド名を書き換えた上で雷マークからイベント選び直せ。
>>128 そのインスタンスが型変換できるかどうか、ならisやas演算。
typeofとかで取得したTypeがどうか、ならType.IsSubclassOfメソッド。
128です。 ありがとうございました。
普通のテキストは改行コードが\r\nなんですけど Webページをローカルに保存したHtmlファイルを秀丸で確認すると 改行コードは\nだけのようです。 その\nだけのHtmlファイルをReadToEnd()で読み込んで TextBoxに表示すると改行は入りません。 string s = ""; s = s + ReadLine() + "\r\n" と一行ずつ読み込むしかないのでしょうか?
Replaceすればいいんじゃね?
>>131 Windowsでは改行コードが\r\nで、そうでないところが\nを使っている。
↓
TextBoxはWindowsのコントロール
↓
よって\nでは改行しない
>>132 どんなファイルを開くか分からないことを考えると
Replaceだと行末が\rの場合、\nの場合、\r\nの場合の3パターン
処理を書かないといけないんじゃないかと思うんですけど・・・。
だとすると131で書いたようにReadLine()を使った方が良いのかなと思ったんです。
ReadLine()で\nだけの場合も改行と認識してくれるなら
一発で\r\nに置換できる方法があったも良いのになー
改行コードが不明なのならRegex.Replace使えばよろし
>>135 書き方がよく分からないのですが
131で書いたように3パターン書くのでしょうか
\r、\n、\r\n全てに対応するような 正規表現は無いような・・・ \r\nがやっかいで重複してしますんですよね・・・
\r\n|\r|\n
すいません。 ずっと[\r\n|\r|\n]とか[ ]を付けていました・・・。 ホントすいません。 そしてありがとうございました。
継承フォームを使ってるのだけど、MainMenuに親クラスで追加されてるMenuitem以外に 独自にMenuitemを追加しようとするとデザイナではじかれてしまいます。 何か方法はないでしょうか?
141 :
デフォルトの名無しさん :2005/09/02(金) 22:39:01
コードで書く メニューをContextMenuとか作ってそこに記述して、コードで連結する。とか VisualStudio2003で ツール>Webページのビルドコメント を使ってヘルプページを作ると プロジェクトのリストまでは出るんですけど、プロジェクトをクリックしてもページが真っ白なんですが (個々のクラスに対するヘルプはできている模様) どなたか解決方法ご存じないですか コードエラーページでは operator ==などをオーバーライドしてるところでエラーでてるってでます。 コンパイルは通るのに・・
小さなアプリでも起動すると、 メモリ使用量が仮想メモリもあわせて20MB以上になるんですが、 こんなもんですか? もっと小さくするテクニックとかあるんでしょうか?
一度最小化する ぶっちゃけ気にする必要はないよ
コーディングレベルで、アプリの起動時間を速くするにはどうするべきでしょうか。
145 :
デフォルトの名無しさん :2005/09/03(土) 00:46:18
起動時の処理でスグに必要じゃないものは、後回しにする。
146 :
99 :2005/09/03(土) 01:14:06
放置しないでください・・・。
148 :
99 :2005/09/04(日) 12:22:22
149 :
99 :2005/09/04(日) 15:06:41
自己解決しますた
SharpDevelopでAxWebBrowserとかブラウザーコントロールを使う事って出来ないのでしょうか?
頑張れー。 てかGDI+使ってるのならベタ移植も可能じゃん 大したコード量でも無し
>>150 ふつうにshdocvw.dllをtlbimp
>>151 こんな感じ
Image srcImage = //元になる画像
Size destSize = //縮小するサイズ
Bitmap destImage = new Bitmap(destSize.Width, destSize.Height); //縮小されたイメージ
Rectangle srcRect = new Rectangle(new Point(0, 0), srcImage.Size);
Rectangle destRect = new Rectangle(new Point(0, 0), destSize);
using (Graphics g = Graphics.FromImage(destImage)) {
g.InterpolationMode = //縮小補完モード
g.DrawImage(srcImage, destRect, srcRect, GraphicsUnit.Pixel);
}
//必要に応じて
//srcImage.Dispose();
//destImage.Dispose();
でもあんまり速くならないと思う
155 :
99 :2005/09/05(月) 20:12:14
放つ+置く=放して置く=放置。
放す≠離す
ArrayList list = new ArrayList(); string[] ss = {"タイトル", "内容"}; list.Add(ss); listBox.Items.Add((string)list[0][0]); textBox.Text = (string)list[0][1]; としてリストボックスにタイトル、テキストボックスに内容を表示しようとすると 「角かっこ [] 付きインデックスを 'object' 型の式に適用することはできません。」 と出てビルドできません。 何がいけないのでしょうか? AddやRemoveを使いたいのでArrayListを使いたいのですがムリなんですかね?
>>157 OKまずは分解だ。
ArrayList list = new ArrayList();
string[] ss = {"タイトル", "内容"};
list.Add(ss);
object o1 = list[0];
listBox.Items.Add((string)o1[0]);
object o2 = list[0];
textBox.Text = (string)o2[1];
ばらしてやるとこういうコードになるわけだが、さて不自然な点はどこかな?
159 :
157 :2005/09/06(火) 13:30:39
RemoveではなくRemoveATですね
list[0]はstring[] ではなくobject。 ArrayListについてのリファレンス読むべし。 だからlist[0][0]はそのエラーが出る。 インデックスでアクセスしたいならstring[]にキャストする ((string[])list[0])[0]
>>159-160 レスありがとうございます。
検索しながらあれこれやってみて
listBox.Items.Add((string)((Ilist)list[0])[0])
とIListにキャストすると出来ました。
意味はよく分かっていないのですが・・・。
string[]でも出来るのですね。確認しました。
> ArrayListについてのリファレンス読むべし
確かに奥が深いですね。勉強し直します。
ありがとうございました。
string[] に素直にキャストすればいいのに なぜ IList にキャストするんだろう
163 :
151 :2005/09/06(火) 20:56:52
>>154 トンクスです。
やっぱり速度を求める場合はC++の方がいいと再認識。
とりあえず、マルチスレッドでやってますが、いずれC++に移行する予定。
C#いろいろ楽でいいんだけどな〜
この場合責任はGDI+にあると思ふ C#で速度が欲しいならDllImportでGDI関数を直接扱ってみたら?
165 :
151 :2005/09/06(火) 21:09:09
>>164 なるほど、GDIのサンプルなら結構ありそうなので
それを利用してやってみます。
たぶん、ボトルネックは画像の読み込みかも。
おしえてください データベースを弄くるものを作りたいなと思っています。 フォームに名前や住所などを入力するテキストボックスを作って、 そこから入力されたものをレコードとして追加したいのですが、 詰まってしまいましたorz string name = textBox1.Text; string tel = textBox2.Text; string sqlStr = "INSERT INTO 顧客 (名前, 電話番号)" + "VALUES (name, tel)"; みたいなことをしたいのです・・・ "VALUES (name, tel)"; じゃだめに決まってますよねorz 初心者杉でごめんなさい よろしくおねがいしまs
167 :
166 :2005/09/07(水) 19:17:26
うあああすみません 自己解決しましたorzz
"VALUES (name, tel)"; だと name も tel も変数ではなくて文字列として処理される。 文字列と変数の違いを理解しましょう。
やられた…。
たびたびごめんなさい テキストボックスが空欄になっていないことを条件にしたいのですが、 どのように書いたらよいでしょうか? string a = textBox1.Text; if(a =! null) ではまずいでしょうか?
普通コントロールのTextプロパティはnullにはならないよ。 空欄の場合は空文字列。""かString.Emptyか。
不味いね。 if(a != null && a != String.Empty)
おおお即レスありがとう!! やっぱりstringがnullはおかしいですよねorz たすかりましたー
いやstringはクラスであって構造体ではないのだから、当然nullにはなりうる。 ただコントロールのTextプロパティはnullには普通ならないってだけ。 //多分決してならない、だと思う。nullを代入しても代わりに空文字列が入るしね。
>>174 解説ありがとうございます
なるほど意味が分かりました!
テキストボックスだからだめだったんですね
ありがとうです!
>>172 素直に string.IsNullOrEmpty を使えよ
2.0になったらな
すまんかった Version Information .NET Framework Supported in: 2.0 .NET Compact Framework Supported in: 2.0
思わずSDKドキュメント開いちまったよ。
ずらーとmenuitemとかの初期化と定義をする場合、 ベタに書くのとforでまわして配列で定義するのって 実行時はどっちが効率的なんですか? 書くの面倒くさいけどベタに書いた方が コンパイラが上手くやってくれるんでしょうか?
有意の差はない
>>182 そうですよね。よく考えたら
それくらいで差がある方がおかしいですよね。
失礼しました。
184 :
デフォルトの名無しさん :2005/09/08(木) 18:55:13
vc#でdllを作りたいのですが、何か易しい参考書はありませんか?
参考書? プロジェクトのプロパティで出力の種類をライブラリにするだけだろ?
Win32APIを使うしかないな。 CreateDCでディスプレイのデバイスコンテキスト作って、それを元にGetPixel使うとか。
188 :
99 :2005/09/10(土) 22:38:20
6+4=10 ではありません。無視です。
>>187 レスありがとうございます
手探りですが調べて以下のようにやれば出来そうなのですが、
「Bitmap b」をどのようにして実体化すればいいのかで行き詰まっています・・・。
というか、こんな感じで良いのでしょうか?
[DllImport("Gdi32.dll",EntryPoint="CreateDC")]
private static extern IntPtr CreateDC(string Display,string c, object b, object a);
//マウスを押したとき
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){
//動作の判定
if (checkBox1.Checked){
Graphics g = Graphics.FromHdc(CreateDC("DISPLAY", null, null, null));
Bitmap b = ;
Color c = b.GetPixel(e.X, e.Y);
MessageBox.Show(c.Name, this.Text);
}
}
GetPixelもWin32API。 色目ちゃんとやらの仕様を知らないので、ディスプレイの任意の位置の色の取得という手法を考えているんだが合ってる?
APIのGetPixelはデバイスコンテキストにあるものの色を取得できるから。 GDI+ではその辺が整理されてGDIとは関係がいささかねじれてしまってるから、単純に置き換えは難しい。
Microsoft.Windows.Forms ではなく System.Windows.Forms なのはなぜ
Windowsは別にMicrosoftの商標としてのWindowsではなくウィンドウシステムとしてのWindowsだからさ
>>190 [DllImport("Gdi32.dll",EntryPoint="CreateDC")]
private static extern IntPtr CreateDC(string Display,string c, object b, object a);
[DllImport("Gdi32.dll", EntryPoint="GetPixel")]
private static extern Color GetPixel(IntPtr hWnd, int x, int y);
int x = Cursor.Position.X;
int y = Cursor.Position.Y;
Color c = GetPixel(CreateDC("DISPLAY", null, null, null), x, y);
MessageBox.Show(c.Name, this.Text);
こんな感じかなと思うのですが、
テストとしてForm1のMouseDownイベントハンドラに実装すると
Color c = の所で
---
'System.NullReferenceException' のハンドルされていない例外が WindowsApplication5.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
---
と出ます。何がいけないかさっぱりです。
ん〜と。 ・CreateDCしたデバイスコンテキストは、使い終わったらDeleteDCしなければならない ・GetPixelが返すCOLORREFは.NETのColor構造体とは無関係の32ビット値。 Color構造体に変換するにはSystem.Drawing.ColorTranslator.FromWin32メソッドなどを使用する
CreateDC("DISPLAY", null, null, null)がいつも無効なパラメーターが出るのを発見。
GetDC(GetDesktopWindow())の値でGetPixelをやってみたら常に-1が返ってくる。
途方に暮れている時、GetWindowDCじゃないとダメとのHPを見つけ、
GetWindowDC(GetDesktopWindow())とやってみたら見事上手いこと出来ました。
>>187 ,
>>190 ,
>>192 ,
>>196 さん、ありがとうございました。
>>197 GetWindowDC(null)でたぶん平気だよ。
最後にGetDC/GetWindowDCの返すハンドルはReleaseDCへ。
>>198 レスありがとうございます。
ReleaseDCでしたか。意味も分からずDeleteDCとしてました。
ReleaseDCはWebで調べた限りでは、
---
[DllImport("user32.dll")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
---
とパラメータが2つ必要みたいなので
> GetWindowDC(null)
はムリっぽいと思い無難にWebを参考に
IntPtr hwnd = GetDesktopWindow();
IntPtr hdc = GetWindowDC(hwnd);
ReleaseDC(hwnd, hdc);
としました。
多分これで問題ないと思うのですが・・。
NULLで取得したものはNULLで解放すればいいのさ まあ>199でも問題ないけどね ちなみに NULL == IntPtr.Zero てのはOKね?
201 :
デフォルトの名無しさん :2005/09/13(火) 22:10:49
VC# Express Beta2 と店に売ってるvc#は、 機能としてはどのような違いがあるのですか? beta版は使えるコントロールが少ないとかそんな程度ですか
>>200 > ちなみに NULL == IntPtr.Zero てのはOKね?
これが分からず、「nullからIntPtrに変換できません」と出てよく分からなくなっていました。
IntPtr hdc = GetWindowDC(IntPtr.Zero);
ReleaseDC(IntPtr.Zero, hdc);
で動くことを確認しました。m(_._)m
>>201 >VC# Express Beta2
VC#2005のベータ版、その中でもExpressはもっとも安い
>店に売ってるvc#
VC#2003、何種類か出てる
3つの点で違います
まずVC#2003とVC#2005の違い
・IDEが便利になった
・ライブラリが新しくなった
・言語仕様が新しくなった
新しいほうが色々と便利な機能が増えています
今までのが変わったというより色々追加された印象
ベータ版とは
・無保証
・バグあり
・使用期限あり
ベータ版は発売する前に試してもらうという意味合いが大きいので実際の商売には使いません
MSでは使った人の声をフィードバックして販売するものをもっと良くしたり、宣伝のためだったり
学習するのに使って欲しいみたいです
最後にExpressとそれ以外の違い
ExpressはVC#2005ではもっとも安く5000円程度で販売される予定です
高価なものは業務向けシステムを組むのに便利なコンポーネントなどが追加されています
ぶっちゃけた話、今のbetaって販売されるものとほとんど変わらんと思うよ
VC#2003向けの入門書が使えるのか?っていう話なら、細かい所は違うから読み替える自信があるなら大丈夫
206 :
201 :2005/09/14(水) 09:51:57
>>205 そうなんですか。有難うございます。
新しくでる2005を買うことにします。
207 :
デフォルトの名無しさん :2005/09/16(金) 10:46:29
ちょっとわからなくて困ってます。 数値をバイナリ形式でファイルに保存することを考えてるんですけど、 エクセルマクロでバイナリファイルを作った場合、 出来上がったファイルをメモ帳で開くと読めない文字 (wordファイルをメモ帳で開いたときみたい)になっているのですが、 C#で作成した場合、下の例ではHelloと文字になってしまします。 数値をバイナリ形式で保存したい場合、 どのようにコードを書けばいいんでしょうか? private void button1_Click(object sender,System.EventArgs e) { int [] mydata = {72,101,108,108,111} FileStream hoge = new FileStream(@"C:\testbin.txt",FileMode.OpenOrCreate,FileAccess.Write); foreach (byte mybin in mydata) { hoge.WriteByte(mybin); } hoge.Close(); }
誰か翻訳
そいつは難しい話だ。 207が何したいのか良くわからん。 0x48 0x65 0x6C 0x6C 0x6F という並びがあるとして、 これをそのままバイトデータとして書き込みたい? 書き込んだらメモ帳で開いたときに文字コード的にHelloになるのは当然だし。 バイナリ形式って何? どういう形になるのがお望みなの? バイナリエディタで開いたときにどう見えるのが希望の形?
>>207 とりあえずint配列をforeachでbyteで取り出すのはやめれ。
BitConverter.GetBytes()で得たbyte[]をStream.Write()に書け。
211 :
207 :2005/09/16(金) 14:20:33
int配列のデータをバイナリファイルに保存したいだけなんです。
いっそSystem.Runtime.Serialization.Formatters.Binary.BinaryFormatterでシリアライズというのはどうよ。 何も考えずに「int配列のデータをバイナリファイルに保存」できるぜ。
214 :
デフォルトの名無しさん :2005/09/16(金) 15:47:13
>>213 こういうことですか?↓
public static void SaveToBinaryFile(object obj, string path)
{
FileStream fs = new FileStream(path,FileMode.Create,FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
//シリアル化して書き込む
bf.Serialize(fs, obj);
fs.Close();
}
}
C#で自作の関数を宣言するには、 private static voidを使うというのを見たんですが、 private static void scan() { string path = textBox1.Text; string currentdirectory = System.IO.Directory.GetCurrentDirectory() + "\\setting.ini"; string pattern = textBox2.Text; //以下略 } のように、private static voidの中でtextBoxの内容をstringに突っ込むにはどうしたらよいのでしょうか? 上の例でやったらエラーになります。
private static void scan(System.Windows.Forms.TextBox textBox1,System.Windows.Forms.TextBox textBox2) { string path = textBox1.Text; string currentdirectory = System.IO.Directory.GetCurrentDirectory() + "\\setting.ini"; string pattern = textBox2.Text; //以下略 }
staticにする必要があるのか? ないだろな。 > C#で自作の関数を宣言するには、 > private static voidを使うというのを見たんですが、 どこで見たんだそんな馬鹿なこと ……いや215の読み間違いかもしれんか
218 :
215 :2005/09/16(金) 21:36:50
そもそも、システム設(ry
>>218 static の位置は間違って無いよ。アクセサは順不同。俺もその順で書くし。
private static て言うのがなかなかにレアな指定だが。 無くは無いかも・・
>>221 そのあとにexternがついてうえにDllImportがつくのは良く見かける。
フィールドは public static よりも private static の方がおおいお
224 :
デフォルトの名無しさん :2005/09/19(月) 23:03:43
完全にカスタムメイドなTextBoxを作ろうとControlから派生しているのですが 実際にテキストを入力するUIはどうやってつくるのですか?
自分で描画するしかないんじゃね
private void hoge() ってのと private static void hoge() って動作速度とかメモリ消費量に差が出ますか? hogeは確実にプログラム内でコールされるって過程でおながいします。
差は微々たるもん。千万回以上コールしないと違いなんてわかんないよ
228 :
226 :2005/09/19(月) 23:45:55
そうなんですか… 素人プログラマなんでstaticなぞ使ったことないのですよ。
hoge メソッドがインスタンスから意味的に独立しているのならば、static を使えばよろし ちなみに static の方が若干早いはず
230 :
226 :2005/09/19(月) 23:52:05
ご丁寧にありがとうございます。 意味的に独立している〜って判断が難しそうですが、 ほとんどの場合クラス自体Form1で終わってしまうので 中々C#の使いこなせてない感じです。
>>224 キーが押されたらTextを更新してInvalidateを呼ぶ。
で、OnPaintをオーバーライドしてTextを基にして描画。
みたいな感じかな
カレット操作も必要だな。
233 :
デフォルトの名無しさん :2005/09/20(火) 23:16:38
>>231 Controlから派生するとわかるけど、
そのTextを更新するところがないんですけど・・・
Text = (更新後のテキスト); Invalidate(); これが何か?
235 :
デフォルトの名無しさん :2005/09/20(火) 23:26:15
だから、更新後のテキストをどこに入力するの? テキストが入力できるところってキャレットがフリッカしてんじゃん そのキャレットがフリッカしているところがない
それを自分で書くって話じゃないのかよw
Control にはキャレット自体が無いじゃん Control を継承したのなら、自分でキャレットを作らないといけないし、作りたくなかったら Control の継承を止める
238 :
デフォルトの名無しさん :2005/09/20(火) 23:37:09
だからそれをどうやって書くんだよ まじ頭わりーな
テキストが入力できないのか、キャレットが作れないのか、どっちか選んでくれないか? あたま悪くて俺はわかんね
OnPaintで描画するんだからPaintEventArgsにGraphicsがあるでしょー? わかるかなー?
これはもうだめかもわからんね
242 :
デフォルトの名無しさん :2005/09/21(水) 00:16:17
TextBoxで描画されたこと(無効領域の発生)をどうすればわかりますか? TextBoxだとPaintイベントが発生しないんですが
こいつは何をしたいんだろう
244 :
デフォルトの名無しさん :2005/09/21(水) 00:56:35
TextBoxをつくりてーつってんじゃん
四角く白で塗って 縦棒点滅させとけ
とりあえず、C# から java に転向して、java.awt.Canvas を継承して作れ。 それから C# に戻ってきて作った方が早い。
なんのためにテキストボックスを > 完全にカスタムメイド で作る必要があるんだ
キーワードの色分けやルーラーとかを完全自作でやる気か
249 :
デフォルトの名無しさん :2005/09/21(水) 09:05:01
ホームページでウエブアプリとか簡単に作れるのかな? 閲覧者のパソコンに、.NETフレームワークが入ってて、 自分がウエブアプリを作っておけば、ホームページにアップすれば、 それだけで、良いの? それとも他に特殊な何かが必要なのですか? 昔、ちらっと,net用のサーバーが必要だとか聞いた気もするのですが。
250 :
デフォルトの名無しさん :2005/09/21(水) 09:11:16
ってことは、 .NET用のサーバーを探してこなきゃ、駄目とか?
ASP.NETを動かすには、IISを使うかmonoプロジェクトの成果物を使うか。 自前でサーバを用意するんでない限り後者はまず無理。 IIS/ASP.NETを使用できるレンタルサーバならMicrosoftに紹介がある。 なおWebアプリってのは処理をサーバ側が行うので、クライアントはWebブラウザさえあればいい。 ちょっと掲示板プログラム書いてみて公開したいってのには向かないね。
252 :
デフォルトの名無しさん :2005/09/21(水) 10:19:23
なるほど。ありがとうございます。 javaスクリプトみたいなことは今のところ、c#ではできないってことですね。 >なおWebアプリってのは処理をサーバ側が行うので、クライアントはWebブラウザさえあればいい。 これについては、もちろん、クライアントは.NETフレームワークが必要ですよね。
いらんよ。
ていうかなに、JavaScriptみたいなのを想定してたの?
それはWebアプリとは言わない。
.NET Frameworkではそういうのはサポートしていないな。
ノータッチデプロイメントという手法はある。
サーバに実行ファイルを用意しておいて、クライアントがIEから直接それをダウンロード&実行するというものだ。
インターネット越しの場合、普通はかなり強固にセキュリティに縛られるけどな。
ttp://www.gotdotnet.com/japan/team/windowsforms/iesourcing.aspx こういうのもあるけどユーザにセキュリティをゆるめて貰う必要がある。
何をしたいのか分からないことにはこれ以上言いようもないな。
254 :
デフォルトの名無しさん :2005/09/21(水) 11:08:07
なるほど。 ありがとうございました。
255 :
デフォルトの名無しさん :2005/09/21(水) 13:58:58
こんにちは。 独自のコンテキストメニューのようなものを作成したいと考えています。 Formをベースに作成しようと思ったのですが、普通にやるとフォーカスが ShowしたFormに来て、親ウインドウがアクティブではなくなってしまいます。 これをコンテキストメニューや、コンボボックスのように、親ウインドウ がアクティブなまま操作できるポップアップコントロールを作成したいの ですが、ベースとなるコントロールがそもそもFormで可能なのかもよく わかりません。 よろしければどのようなコントロールをベースにすればよいのか、 もしくはフォームを設定すればよいのか、アドバイスを頂けないでしょうか。 よろしくお願いいたします。
MenuItemをオーナードローした方が手っ取り早そうな予感
257 :
デフォルトの名無しさん :2005/09/21(水) 14:53:36
ちょっと説明不足でした。 一番近いのはVisualStudioのエディタのパラメータの 入力時に出るオーバーロードの一覧ToolTipみたいな感じ ( [▲] 1/5 [▼] ・・・←こんなの)で、ちょっと独自の 操作系を実装したいと考えています。 MenuItemはあまり挙動を弄れそうにないのです・・
>>251 Apacheのmod_aspdotnetでも可能
260 :
三咲 :2005/09/23(金) 12:07:07
ちょっとわからなくて困ってます。 ボタンを押したらサブルーチンを呼び出し、計算結果をラベルに表示することを考えてます。 それで以下のように書いたのですが、エラーになってしまいます。 計算結果をメッセージボックスに表示する場合はちゃんと動くのですが、フォームのラベルには表示できません。 static関数の中でラベルへの表示はできないんでしょうか? namespace test0921{ public class Form1 : System.Windows.Forms.Form{ private System.Windows.Forms.Label label1; private System.Windows.Forms.Button button1; //中略 private void button1_Click(object sender, System.EventArgs e){ double a=2,b=4; subroutine1(a,b); } static void subroutine1(double x,double y){ double MYsub; MYsub=Math.Pow (x,2)+Math.Pow (y,1/2D)+10; test0921.Form1.label1.Text=MYsub.ToString(); }
261 :
デフォルトの名無しさん :2005/09/23(金) 12:11:47
死ね
263 :
三咲 :2005/09/23(金) 13:04:00
264 :
デフォルトの名無しさん :2005/09/23(金) 13:06:24
その程度の知識じゃ遠い道のりですねw 外注にでも作ってもらったら?
265 :
三咲 :2005/09/23(金) 14:24:11
プログラミングしか能がないくせに偉そうで最低ですね。
266 :
三咲 :2005/09/23(金) 14:40:24
>>264 お試しC#で勉強している身なんで、外注はできません。
>>265 三咲を名乗るのはやめて下さい。
267 :
デフォルトの名無しさん :2005/09/23(金) 14:43:34
楕円を描くときって g.DrawEllipse(Pens.Black,rec); で描けますが、 逆にrecを与えたら座標リスト(point[])として楕円を返すようなメソッドってないでしょうか?
だからさ、サブルーチンでは計算だけさせて結果をどうするのかは呼出側が考えるようにしろと。 あと素直にオブジェクト指向について学んでこい。
>>267 GraphicsPathにAddEllipseして、FlattenしてからPathPointsプロパティかな。
PointF[]だけど。
270 :
267 :2005/09/23(金) 15:24:07
うわっどれもはじめて聞く単語だ… 早速調べてみます。 ありがとうございました。
272 :
デフォルトの名無しさん :2005/09/23(金) 16:16:42
>>267 そんなもん高校数学の知識があればすぐできんじゃん
274 :
デフォルトの名無しさん :2005/09/24(土) 03:10:02
275 :
デフォルトの名無しさん :2005/09/24(土) 17:30:16
教えてください。 ネットワーク上のコンピュータ(\\○○\)の共有フォルダ一覧を取得したいのですが、 どのようにすればよいのでしょうか。 System.IO.Directory.GetDirectories では取得できませんでした。 よろしくお願いいたします。
>276 むほっ。一筋縄ではいかなそうですね。 明日詳細に追って見ます。 ありがとうございます。
ここレスか? 初心者をいびるスレというのは。
愛の鞭です 基本サドなので
自作の関数を作りたいんですが、javaなどのfunctionにあたるのってないんですかね? voidとか何かの組み合わせでグローバル関数モドキは作れるってどっかに書いてあったんで試したんですが、引数0個指定出来ないとかなんとかって怒られてうまくいかないんですが
function なんてキーワードあるのは Java じゃなくて J(ava)Script だろ
この前から、何故か関数にこだわる奴がいるんだ。 メソッドで駄目な理由を説明しろ。
予想:だってどこからでも呼べるんじゃないと不便じゃないですか
>>280 クラスを1つだけにして総べてその中に書け。
class all
{
int a,b,c;
string str1;
void sub1()
{
}
:
:
:
void subXXX1()
{
}
void main(void)
{
}
}
ヒント: public static
>>285 そりは、前に 「オブジェクトのデータがアクセスできません!何で!!」
の質問がきてたぞ。w
mainについてないよ、ということでは
Main関数からインスタンスメソッド呼べないよとか言ってくるじゃん
「インスタンス」とか知っててそれはありえないから
>>282 vbからやって来たのが多いからじゃないのかな。
vb.netにするならc#って感じで。
292 :
デフォルトの名無しさん :2005/09/28(水) 19:59:34
staticを理解するには何を読めばいいでしょうか? 初心者用のバイブル本をおしえてくださるとありがたいです。 きたみあきこの「かんたんプログラミング」から始めたのが間違いだった。 あれではオブジェクト指向なんてまったく理解できない。
static を使わないことを先ず覚えろ
単に自分の選書ミスが原因なだけじゃん
本を読んだだけで理解できたら苦労しないよ
296 :
デフォルトの名無しさん :2005/09/28(水) 21:46:11
Point A //(10,10) Point B //(20,30) から Point C = B-A //(10,20) のような結果を得るため "-"に相当する演算を行いたいのですが、 どうすればいいのでしょうか? +,-がPointに対し定義されているらしいのですが どう使えばいいのかわかりません。
定義されてるらしいんなら Point C = B - A;
>>296 リファレンスでPoint構造体の演算子と型変換を見てみるとどういう型同士の演算ができるのか分かると思うよ
299 :
296 :2005/09/28(水) 21:53:43
Size sA = new Size(A); Point C = B - sA;
301 :
296 :2005/09/28(水) 21:58:42
>>300 !さん
ありがとうございました。
それで行けました。
Point - Pointは出来ないのに
Point - Sizeなら行けるのですね…ややこしい
>>301 むしろ
Point C = B - (Size)A;
303 :
296 :2005/09/28(水) 22:05:10
うほっいいキャスト。 PointからSizeにキャストできるんですね。 ますますすっきりしそうです。 ありがとうございました。
だからさーちょっとはリファレンスを見ろよー
明示的キャストだろうと new だろうとコストは変わらんと思う
SizeからPointにキャストすることって、newなみのコストかかるの?
そりゃ結局新しいインスタンスを作るんだから全くかわらんよ。 ildasmでSystem.Drawing.dllをあけて Point構造体のop_ExplicitメソッドとかSize構造体の.ctor(コンストラクタメソッド)とかみればすぐ分かる。 ま、いずれにせよ構造体をnewするコストなど考慮する必要も無し。
ウホッ op_Explicitの中で、newやってる。 キャストの方が高コストってわけなのかorz
>>292 staticはクラスのインスタンスが共通して使うけれども、インスタンスの内容に依存しないメンバーにつける。
例えば文字列をMSゴシックで描画するDrawMSGothicTextクラスを作る場合、
MSゴシックフォントはnew Font("MS ゴシック", 12)で作るわけだが、
すべてのインスタンスでFontクラスを生成してたら時間とメモリの無駄だろ?
だからあらかじめ
protected static Font _msgothic = new Font("MS ゴシック", 12)
みたいにstaticをつける。
こうすればFontクラスが生成されるのはDrawMSGothicTextクラスが初めて使われるときだけ。
以下のような使い方をされた場合、staticがついてるとFontクラスが生成されるのは@のときだけ。
staticがついてないとAのときもFontクラスを生成してしまってその分メモリと時間が無駄になる。
dw1 = new DrawMSGothicText("テスト1"); ←@
dw1.Draw();
dw2 = new DrawMSGothicText("テスト2"); ←A
dw2.Draw();
まぁいろいろ試して体で覚えるしかないけどな。
オブジェクト指向を実践的に覚えたいならこれ↓
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712288/ プログラムには手続き型で書くべき場合とオブジェクト指向で書いた方がいい場合があるわけだが、
むりやり手続き型で書かれてしまったコードをオブジェクト指向に書き直す手順が丁寧に解説されている。
自分のコードを上の本に従ってオブジェクト指向コードに直してみれば覚えられると思うよ。
>>309 親切な方有難うございます。
このスレにもあなたような方がいらっしゃるのですね。
いつも質問者はいびられてばかりで、そんな私もしょぼーんとしてしまいます。
早速買って勉強しますです。
>>310 サンプルコードがJavaだから気をつけて。(構文はほとんど同じだから問題ないとは思うが)
あと、この本はオブジェクト指向プログラマーのバイブルだけども
初心者のバイブルになるとは限らないから一応本屋で確認してね。
MenuItem.RadioCheck のようなものって ToolStripMenuItem にないですかね
ToolStrip〜〜 はどれも糞
なんか前からStrip系のアンチが一人いるな
テキストボックスのMouseHoverで ToolTip tt = new ToolTip(); tt.SetToolTip(textBox1, textBox1.Text); テキストボックスの内容を変更 再びtooltipを表示 とすると上手く反映されず前のままの内容が表示されたりするときがあるね
動的にメソッドを追加可能なオブジェクトって作れます?
動的にメソッドを追加可能なオブジェクト? JScriptのprototypeみたいなの? Rubyの特異メソッド(だったっけ)?
そそ。C# だとクラスがあるから、オブジェクトのクラスを後から変更できたかなって思って。 出来なければデリゲート格納する Hashtable 使うだけなんだけど。
そう言う仕様はないね。 C# 3.0で静的メソッドをインスタンスメソッドかのように呼び出す文法は追加されるようだけど、所詮シンタックスシュガーだし。
>>316 無理。
それやりだすと、開発規模が大きくなるにつれ、
どこでどのメソッド追加したかわけ分からなくなるし。
C# 3.0 で、拡張メソッドって機能が追加されて、
クラス定義とは別の場所で後からメソッドを追加する
(したかのような)ことができるようになるけど、
やっぱり動的(実行時)にってのは無理。
(そもそも実行時にメソッドを作る手段がないけど。)
あと、この拡張メソッドも、他に代替手段がない場合以外、
極力使わない方がいい非推奨機能と仕様書に明言されてる。
動的に作成ならともかく、動的に変更だとやっぱ辛いか。ありがとうございました。
>>321 っつーか、デリゲートでは駄目なん?<動的に変更。
>>320 CodeDomで動的にプロクシクラスを生成すればあたかもメソッドが
追加されたように振る舞う事はできるよ。
ただこれだけでは実用性がないから、呼び出し側はインターフェイ
スにアクセスする様にして、呼び出される側はDIコンテナによって
生成される様にするといった工夫が必要。
.netの仕組み等があまりよく分かっていないのですごく馬鹿な質問かもしれませんが、 C#でdllを作って、普通のC言語からそれを読み込んで使う、というようなことは出来るのでしょうか?
C#のDLLをCから読むのは難しい。 DLLをCOMに公開してそれを利用すると言うことになる。
COMって、正直よく分からないんですが、参考になるサイトとかご存じでしたら教えていただけますか? 「com」でググってもamazon.comとかが出てきて、まともに調べられないのです… 何でググれば良いのでしょうか
IUnknown
AxSHDocVw.AxWebBrowser を使用してデータを Post する方法がわかりません。 例えば、画面にテキストボックスと、ボタンと、AxSHDocVw.AxWebBrowserが あるとします。ここで、テキストボックスに何か入力し、ボタンをクリック すると、AxSHDocVw.AxWebBrowserのブラウザ画面には、テキストボックスに 入力された文字列をキーワードとして google で検索した結果の画面を 表示させたい。 のように、特定 URL のフォームにプログラムから値を代入し、 submit した結果を表示させたいのですが。。 アドバイスお願いします。
Navigateメソッドの第4パラメータがPOSTするデータなので、 そこにポストデータを文字列で書き込めばOKだったはず。 でもGoogle検索はPOSTじゃなくてGETでやってるぞ。
あ、念のために確認したらstringじゃなくてbyte[]を書き込む必要があるみたい。 System.Text.Encoding.GetBytesを。 UrlEncodeは、多分WebBrowserコントロールが勝手にやってくれるはず……?
332 :
329 :2005/10/04(火) 12:55:07
>>330-331 ありがとうございます。
POST する事ができました。postData は byte[] を渡す必要があることと、
URL は POST 先の URL を指定しなければならない事にはまっていました。
(From.html から to.html を POST する場合、URL には to.html を
渡さなければならなかったのに、ずっと From.html を…...)
Google は私の例がよろしくなかったですね、すみません。
あるフォーム(A)から別のフォーム(B)の処理を実行し A は B の中で処理が完了するのを待ちます。 B の処理終了は delegete で通知がきます。 B は Windows.Forms ですがフォームを show せずに、 B にかかれている public なメソッドのみを実行します。 ここまでは組めましたが、B の処理を行なっている間、 A では処理中である事をあらわす何らかの処理(画像をくるくるさせたり) したいと思っています。 FormB f = new FormB(); f.ActionComplete += new FormB.ActionCompleteEventHandler(f_ActionComplete); f.DoAction(); のように B の処理を実行すると A では処理がかたまってしまいます。 B の処理を実行中 A でも処理を行なうにはどのようにすればよいでしょうか?
335 :
デフォルトの名無しさん :2005/10/04(火) 19:18:49
vbaからc#で作ったDLLを呼び出すには、 COMやGACなどのめんどくさいことしないと駄目みたいですけど、 今後もこういうのが続くんでしょうか?
そもそもVBAからC#のDLLを呼び出す(事|人)自体がそんな多いとも思えないから良いんじゃない?
プログラムを今から勉強しようと思うのですが、基礎から始めようと思ってます。 一番最初にプログラムとは?を知りたいんですが、ここは、まだ俺の来れる所じゃないので 超初心者が見るようなサイト、教えて貰えませんか? プログラムとは?でぐぐっても、出てこなかったので・・・。 本気で勉強したいと思うので、宜しくお願いします。
本気で勉強したいと思ったら、ちゃんとした本を買ったほうが良いよ
>>338 分かりました。
今から本屋に急行します。
有難う御座いました。
340 :
デフォルトの名無しさん :2005/10/04(火) 19:53:47
>>338 どこかのスレにもありますが、独習シリーズはお勧めですか?
とりあえずぴゅう太から始めよう
System.Windows.Forms.Timer System.Timers.Timer これってどうやって使い分けるの
System.Windows.Forms.TimerはTickイベントでControl.Invokeする必要がないのでWinFormで扱いやすい。 ただし精度に多少難がある。9x系だと最悪で50ミリ秒程度だったかな? System.Timers.Timerはちょうどその逆。
344 :
デフォルトの名無しさん :2005/10/05(水) 10:21:22
質問です。 Console.ReadLine()でコンソール画面からone+twoと言う入力を受けた時に、 +だけを取り出したい時はどうすれば良いんでしょうか? Splitを使って取りだそうとしているのですが、煮詰まってしまってます。
いささか理解するには条件が足りないが、一般的にはSystem.Text.RegularExpressions.Regexクラス。 つまり正規表現。
>>345 ありがとうございます!
リファレンスと熟読します。
test
348 :
デフォルトの名無しさん :2005/10/05(水) 13:13:51
VisualStudioの問題なのかもしれませんが・・・ Windowsアプリケーションを作成して、一個ボタンを置いただけのフォームを作成したあと コンパイルしようとしたところ リソースを準備しています... C:ソースファイルの場所\プロジェクト名.resx: リソース ファイルへの書き込み中にエラーが発生しました。 指定されたパスが見つかりません。 といったエラーが出てコンパイルすることができません 今まで普通につかえてたのですが、急にこのエラーが出るようになりました・・・ 何か情報もってる方いませんか?
引数付きのプロパティを追加したいのですが、 C#では無理のようです。 こんなの↓ public int data(int index1, int index2) { get { return m_data[index1,index2]; } set{ m_data[index1,index2] = value; } } Set〜,Get〜とかのメソッドを書くよりないのでしょうか
そうだね でもそれならコレクションクラスをgetアクセサで返すプロパティにした方が自然じゃない?
351 :
デフォルトの名無しさん :2005/10/05(水) 18:13:05
c#を勉強していこうと思うだけど、 やっぱりコンソールからやっていくのが、 遠いようで近道なの?
352 :
デフォルトの名無しさん :2005/10/05(水) 18:23:28
実行時に、デバッグモードだと平気なんだけど、リリースモードだと落ちるっていう現象わかりますか?
354 :
デフォルトの名無しさん :2005/10/05(水) 19:08:05
今日からC言語の授業が始まったのですが分からないので質問します 宿題で「画面にクラス・番号を表示して次の行に名前を表示するプログラムを作れ」というのがでました まったく分からないので教えてくれませんか?
C言語はスレ違いです
>>351 いきなりWinFormをいじりだしても、デリゲートとかで躓くだろうから……。
やっぱりコンソールから始めるのを薦める。
357 :
デフォルトの名無しさん :2005/10/05(水) 19:17:37
359 :
デフォルトの名無しさん :2005/10/07(金) 17:45:48
C#を使うと、どの程度のプログラムなら作成できますか?
NASA World Windくらい。
むしろ昨今の言語であればどれを選んでもたいていのことはできるだろう。 もし、できないことがあるとしたらそれは言語ではなく自分の能力を疑ったほうがいい。
VB.NETとC#って結局、コードの可読性が違うだけなのか?
まあそんなとこでしょう
VBに足引っ張られて汚くなっていくC#が不憫だ
文字列の空白を代入するときは xxxx = ???? ????のところになんと書けばよろしいのでしょうか? 宜しくお願いいたします
String.Empty
>>366 お早い回答感謝いたします。
ありがとうございました。
インデクサとプロパティ、 インターフェイスと抽象クラス。 それぞれ、どのように使い分けるかを教えてちょんまげ。 ちなみにC#勉強してから、10日目。 @ITのC#入門は全部読んだ。 わたしに、わかりやすくよろしこ。
インデクサとプロパティは直ぐに判別できるだろうと思う。 C# ならインターフェイスを使う機会はあまり無い。単一継承で噛ませられない場合の補助だと思いねぇ。
>>370 下段
はい。だから 「単一継承で〜」 って書いたんです。
delegateがあるからjavaと比べると使う機会が少ない。しかし使わないわけではない、といったところか。
インターフェイスはライブラリを作ったり、他人の作ったライブラリを使ったりするときに使う機会が多い。
初めまして。 ダイアログボタンが押されたかチェックする場合は どういう記述で行えばよろしいのでしょうか? if(?????????.Checked) という記述でやってみたのですがビルドは通るものの 実行したときに別のところでエラーがでてしまいます・・・。 どなたか助言お願いいたします。
どんなエラーが出るのか書けば?
まずはその「ダイアログボタン」とはなにか、ということからだな。 RadioButtonやCheckBoxのことならCheckedでいいはずだが。 とりあえずそのエラーメッセージを書いてみようか。
NullRefrenceExceptionと予測。
ぬるり
379 :
374 :2005/10/08(土) 18:48:29
メニュー部分のチェックなのですが 『System.ArgumentException' のハンドルされていない例外が mscorlib.dll で発生しました』 とでてしまいます。 チェックする記述を入れなければ問題なく動くのですが・・・
そのまま引数がおかしいんだろうね まず別の場所がどこでどういうコードなのか書いてもらえないと何もいえない
381 :
デフォルトの名無しさん :2005/10/08(土) 22:47:21
C#が発表されてから3年程度経つが未だに 実用的なアプリケーションはVC+++MFCってところ のようだ。 C#に未来はあるのか???
>>381 業務でC#は結構使われてる。
つか、俺の会社で今、C#でプロジェクトやってる。
383 :
デフォルトの名無しさん :2005/10/08(土) 22:59:46
>>382 それはASP.NETでは?
もし、そうでなければ禿げしく疑問
C#がVC+++MFCより優位に立てる点があるのか?
383の理論ではVBはもっての他ってことかな? 早くて安く作らなければならんこともあるのだというのに
.NETの名前通りもともとWEBアプリ主眼だろ?
386 :
382 :2005/10/08(土) 23:24:27
>>383 いや違う。
>>384 の言うとおり、早く安く作れて
恒例のポインタ周りのバグや、
スレッド管理に余計な手間をかけずに済むから。
すいません。 一度に2度の質問失礼します。 1、XPスタイルにするときに、FlatStyleをSystemにしますが、 FlatStyleがPopupのときにでもXPのような形状にしたい。 2、Buttonが押されたときに、沈み込んだ状態にしたい。 ボタンは押されたらすぐに戻ってしまいますが、沈み込んだ状態のまま保つ、というやり方がわからなくて・・。 いいやり方を知っていましたらお教え願いませんでしょうか? よろしくお願いします。
>>387 1.無理。OSの問題だから。
2.CheckBoxクラスのAppearanceプロパティをButtonに変えてみたらどうよ。
>>387 > 1、XPスタイルにするときに、FlatStyleをSystemにしますが、
> FlatStyleがPopupのときにでもXPのような形状にしたい。
諦めろ。
> 2、Buttonが押されたときに、沈み込んだ状態にしたい。
> ボタンは押されたらすぐに戻ってしまいますが、沈み込んだ状態のまま保つ、というやり方がわからなくて・・。
ButtonじゃなくてCheckBoxを使用する。
AppearanceプロパティをAppeareance.Buttonに。
390 :
389 :2005/10/08(土) 23:32:21
丸被りか……orz
すごく早いレスありがとうございます。 こんなやり方があったとは・・・。 押すものはButton!!と決め付けてしまっていたようです。 絶対笑われますが、押した瞬間にThread.Sleepでも使うの?って思ってました・・。 ありがとうございました。
392 :
デフォルトの名無しさん :2005/10/09(日) 00:04:58
C,C++,C#とかれこれ6,7年程度やっているが 未だにネットで公開しても恥ずかしくないようなアプリがかけません? どのように勉強していけばネットで有名なアプリがかけるようになるの?
才能がないからじゃない? 何を作るか、というところができてないとみた
有名なアプリを探してとことん真似する そのアプリの掲示板をみて要望を先に反映 あとは2ちゃんねるのレスをうまく取捨選択できれば安泰 反応がなくなれば新しいアプリを探して真似すればいい
395 :
デフォルトの名無しさん :2005/10/09(日) 00:17:12
>>394 >そのアプリの掲示板をみて要望を先に反映
ってソースがないとダメでは?
仕事じゃないなら自分で使う欲しいものを作ってりゃできんじゃね。
397 :
デフォルトの名無しさん :2005/10/09(日) 00:20:27
>>393 才能のあるあなたはどのようなものを作られているのでしょうか?
私も才能なんてないよ。
丁度
>>396 の人がいったとおり、自分で使う欲しいものを作ってるだけ。
>>395 同じようなものを作れないなら実力が足りない
新規で作るのに比べて労力はずっと少ない
400 :
デフォルトの名無しさん :2005/10/09(日) 00:52:46
>>392 おそらく誰もが知ってるような、例えば秀丸などのソフトのことをいってるのであれば
それは無理。
誰でも作れないから、シェアウェアとして公開されているのです。
自分も欲しいのを自分で作るために勉強してんだけど、 何時も思いつきで作っていくので可読性が低いです。 で、最近フローチャートってのを知りました。 プログラムの本をよんでてもあまり出てこないですよね。
プログラミングはある程度できるのに、他人が作ったアプリを全然使ったことがない奴増えすぎ
今はUMLだからな
フローチャートとはまた懐かしい オブジェクト指向の言語にはあまり向かない手法だな
>>392 見せるの恥ずかしいとか言ってるから進歩しねーんじゃねーの。
とりあえず公開してみろ。
ありがたいご指摘受けれるかもしれないし、
人に見せてると言う意識を持つことで、スキルがあがるかもしれない。
407 :
デフォルトの名無しさん :2005/10/09(日) 02:15:29
魚心あれば水心
>>404 仕様とか大まかな流れを決めるのに良いかと思ったのですが、
フローチャートは向かないのですか・・・
フローチャートは内部仕様の最後のほうに使うもんじゃね
>>408 ソースを見た時に処理の流れが追えない様なメソッドは、処理内容を
メソッド抽出して処理の流れと分離して細分化すべき。
イベントを処理するモノがイベントハンドラ。
イベントハンドラってdelegateとdelegateに委譲したメソッド本体どっちを指すと取るのが妥当だろう……?
メソッド本体だしょ
>>413 返信ありがとうございます
>>412 は×ということですね
.netのコーディング命名規約のイベントの辺りを読んでいたら頭が混乱してしまったもので…
ハッキリ言ってdelegateの使い方が分かりません
んじゃ 3.0 のラムダ式まで待っててください
419 :
デフォルトの名無しさん :2005/10/10(月) 22:45:25
>>419 最初は誰でも初心者ですよ・・・
つか、僕も今まで使ったことないし
よく分かっていないけど・・・
421 :
デフォルトの名無しさん :2005/10/10(月) 23:03:56
初心者の次元が違う その程度の質問する初心者は5年、ソフトウェアで金をもらうことは ない。
423 :
デフォルトの名無しさん :2005/10/10(月) 23:11:10
サンプロ キタ━━━━━━(゚∀゚)━━━━━━ !!
424 :
デフォルトの名無しさん :2005/10/11(火) 03:47:35
質問です。 現在C#でドット絵(ピクセル画)を表示するプログラムを作っています。 それに拡大表示機能をつけたのですが補間モードが働いてドットがぼやけてしまいます。 e.Graphics.InterpolationModeの設定で補間モードを変更できると知り、 近い物は見つけましたが望む形にはなりませんでした。 >> e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; e.Graphics.ScaleTransform(Zoom,Zoom); e.Graphics.DrawImageUnscaled(imgBase,0,0); << この補間モードをOffにして、 単純(均等)倍表示のようなことはできないでしょうか。 よろしくお願いします。 わかりにくかったらすみません。
補間が問題以外に、拡大のほうにも問題があったようです。 3x3の画像を下のように描画したところ >> e.Graphics.DrawImage(imgBase,0,0,6,6); << なぜか5x5の画像になってしまいました。 GraphicsUnit.Pixel指定でも変わりませんでした。 なにかほかにも設定が必要なのでしょうか?
自己解決しました。 PixelOffsetModeの設定も必要なようです。 3レス消費してしまい申し訳ありません。
ソフトの設定を変更した時に、それを反映するために 自動で自分の再起動させたいのですが、どうすればいい でしょうか? 手持ちの本をあさって見ましたが方法等は一切乗って ませんでした。
自分を起動する別プログラムを立ち上げて再起動したら自殺する?
Process.Start("my_app.exe"); Environment.Exit(0);
430 :
427 :2005/10/12(水) 08:01:21
>>429 ありがとうございます
早速試してみます
えー そんな適当な奴でよかったのか
432 :
デフォルトの名無しさん :2005/10/12(水) 18:40:41
インデクサを勉強していて思ったのですが、 このテクニックが実際にどのようなところに使えるものなのか全く創造もできません。 インデクサじゃないと難しい処理ってあるの?
別にないけど、コレクションにインデクサでアクセスできなかったらイヤだろ? arrayList.SetItem(4, arrayList.GetItem(3)); とか書きたくない。 arrayList[4] = arrayList[3] の方がよほど直感的。
>>429 多重起動禁止にしてる場合でも、それで上手くいく?
駄目だろうね
Mutexで禁止してるんだったら、Process.Startする前にそれをCloseしてやればいいんじゃね?
なるほど
438 :
デフォルトの名無しさん :2005/10/13(木) 08:57:32
>>433 そーなんすか
ありがとう
よし、がんばるぞ
ある数字の範囲をランダムに並びかえるのによい方法はないでしょうか? 例えば、1 から 10 の範囲で並びをバラバラにしたいのですが、 その結果を配列に保持するような事がしたいです。 private int [] valOrder = new int [10]; で、valOrder[0] から valOrder[9] には、それぞれ 1 から 10までがランダムに入っている(重複はなしで) という事がやりたいです。 アドバイスを頂けると幸いです。よろしくお願いします。
0から9までそれぞれランダムな位置の要素と交換すればいいんじゃね
0 .. N-1 の整数でランダムな順列を O(N) のコストで作り 正当性と計算量の証明をしろってのを学生実験でやったことがあるぞ
AssemblyVersion について教えてください。 Visual Studio で、デフォルトでは、 [assembly: AssemblyVersion("1.0.*")] と定義されています。バージョン番号の内訳は、 メジャー.マイナー.ビルド.リビジョンだと思います。 で、A.EXE と B.DLL があり A.EXE は B.DLL を参照している場合、 B.DLL にバグがあり修正を行なってビルドした場合、 メジャー、マイナー、ビルドが上がる為、B.DLL を参照している A.EXE もリビルドしないと動きませんよね? (その時修正したのは B.DLL だけなのに、A.EXE もリビルドしなければ ならなくなる。) なので、バージョン番号は [assembly: AssemblyVersion("1.0.0.*")] のように、ビルド番号まで固定しておかないと、すごく不便じゃないかと 思っているのですが、このあたり、みなさんはどうされていますか? よろしくお願いします。
443 :
デフォルトの名無しさん :2005/10/15(土) 23:28:35
質問です。 データ検索のプログラムを作っています。 DataRow型というのがありますが、 DataRow r のように宣言してもうまく行きません。 これはどのように使うものなんでしょか? よろしくおねがいします
>>442 a.exe はコンパイルしなおさんでもいいでしょ
>>443 System.Data は参照に追加してあるか?
DataTableの列を表す。 で、何をしたいのかさっぱりわからん。 DataTableというかADO.NETは基本的にデータベースとの相互運用のためのライブラリだが。 別に単独で使っちゃいけない訳じゃないが。
>>444-445 ありがとうございます。
あれです、
>System.Data は参照に追加してあるか?
まさにこれでありました。まじ変な質問して時間とらせてすみませんですた。
ありがとうでしたー。
>445 列じゃなくて行では? 列は DataColumn。
質問失礼します。 ただいまC#を勉強しているものです。 ファイルを同時にダウンロード、アップロードできるソフトを作ろうと思いまして、 同時に処理するためにマルチスレッドを使おうと考えました。 そこで思ったのですが、マルチスレッドは限界はあるのでしょうか? 何個までしか作ってはいけない、などの規約というかルールがあるのかなと思いまして 質問しました。 何かおかしいこと言っていればご指摘くださいますようお願いします。
449 :
448 :2005/10/17(月) 00:29:29
なんか404の予感
451 :
448 :2005/10/17(月) 07:05:28
ふむ、jspか・・・・・・
453 :
デフォルトの名無しさん :2005/10/19(水) 15:29:14
質問です。 単純にテキストファイルを読み込んでConsole.WriteLineで出力したいのですが MSDNのガイドの例題通りにプログラムを書いて、ファイルの指定の部分を自分で 用意したTest.txtと指定してプログラムを実行すると指定されたファイルが見つかりません と出ます。 読みだしたいファイルの指定はどのようにすれば良いのでしょうか? また、文字コードや保存場所の指定にルールはあるんでしょうか?
MSDNと同じに書いてできないならtest.txtが同じディレクトリにないとか。 文字コードはStreamReaderコンストラクタのオーバーロード参照
455 :
453 :2005/10/19(水) 17:51:17
>>454 回答ありがとうございます。
ディレクトリに存在しないという事なのでcatchでエラーを拾うと
《ファイル "C:………\bin\debug\Test.txt"が見つかりませんでした》
と出てくるのでこの\debugのフォルダの中に、Test.txtを移動するとファイルを
読み込む事が出来ました。
ディレクトリに対する理解はこれであってるんでしょうか?
色々HPを探すんですがC#に関連づけたHPが見つからず不安です
>>455 フルパスでファイルを指定しない場合、ファイルは現在のフォルダからの相対パスで探索される。
んで、実行時には \bin\debug が現在のフォルダになってたんで、\bin\debug\test.txt を探しにいったという仕掛け。
ちなみに、VS から実行したときに何処を現在のフォルダにするかは、プロジェクトのプロパティで指定できる。
VS2003 なら、構成プロパティのデバック→作業ディレクトリの筈。
457 :
453 :2005/10/19(水) 18:12:33
>>455 丁寧な解説、ありがとうございます。
色々分からない単語もあるんで調べながらかみ砕きます。
本当にありがとうございます。
defとかlibとかがついていないDLLをVS2005b2から使うことはできるでしょうか?
なんのDLLよ? .NETのDLLなら元々そんなのないし、ネイティブC++のDLLはどのみちextern "C"されてないとC#からは使えないし。
>>459 >ネイティブC++のDLLはどのみちextern "C"されてないとC#からは使えないし。
なるほど。そうでしたか。ありがとう。
ハードウェアの制御用のDLLなので、おそらくネイティブC++のDLLだと思います。
ちなみに、C++からだとどうなんでしょう?
ポインタでかまいませんので、示してくださいませ。
だいぶ前から見かける言い回しだけど?
catch(NullReferenceException e) { // 閑話休題 }
ドラッグ&ドロップに対応している解凍ソフトみたいに ドラッグしたファイルをドロップした瞬間に処理→処理したファイルをエクスプローラにドロップ ということをしたいんだけど、どんなイベントを使えばいいの?
C#でASP.NETを使っているのだが、 「ASP.NET」の情報がネット上で、とっても少ないのは、なぜに?
>>464 お前がどこで詰まっているのかが分からん
>>465 JSPと違って簡単に使えるからじゃね
>>467 QueryContinueDragイベントでDoDragDropするってことでしょうか?
469 :
デフォルトの名無しさん :2005/10/23(日) 03:06:38
SourceGridなるものをダウンロードして使ってみたが糞だね すげー使いずらい 自力で作ったほうがよさそうw
470 :
デフォルトの名無しさん :2005/10/23(日) 09:39:29
VS2003 使っています。 Form1.cs の中で宣言した変数を Form2 で利用したいのですが どのようにすればいいのでしょうか?Public をつけるのかなと思い、 Form1 で public int x = 1; としましたが、コンパイル時にそこでエラーが出ました。
>>470 アドバイスその1: その行にはエラーはない。
アドバイスその2: せめてプロパティ越しに扱うようにしろ。
アドバイスその3: 同じことやろうとしている奴は結構いる。探してみると良いよ。
472 :
470 :2005/10/23(日) 09:56:31
>>471 ありがとうございます。
プロパティ越しですか。意味はよく分かりませんが(たぶんグローバル変数
を使うのはよくないみたいなことかな)調べてみます。
何か検索するためのキーワードを教えていただきたいのですが。
まずローカルのドキュメント読め。 話はそれからだ
Form 上で Console.WriteLine のような出力をするにはどうすればいいのでしょうか? for ( int i = 0; i < 5; i++) label1.text = i; こんな感じで Form1 上に 0 1 2 3 4 こんな風に表示したいのです。今は label1 〜 label4 まで作ってそれぞれに 表示させていますが、なんかイマイチです。
TextBox に AppendText した方がよくね?
>>474 1.直接描画する
2.縦長のLabelやTextBoxなどのコントロールに改行つけて渡す
477 :
474 :2005/10/23(日) 15:50:24
>>475 ,476 なるほど。ありがとうございました。
C#ひととおり勉強してみた。 レベルは、ASP.NETのDataGridコントロール使って、 一覧・更新画面とかは作れる。 でも、C#が完璧にできるとは全然思わない。 さて、次に何をすればいい? ASP.NET または、C#のお薦めのWebサイトがあったら、おしえてくれ。 たのむ、エロいひと。
MSDN
480 :
デフォルトの名無しさん :2005/10/24(月) 00:21:13
OSでも書けば?
>>478 プログラム作成と障害とは切っても切れない関係だ
従って障害管理ツールを作るとかが良いのではないか?
483 :
478 :2005/10/24(月) 01:28:38
>479-482 とんくす。 上記のサイト、はじめて知った。 面白そうなので、これから色々使うとおもう。 なんとなく、C#とASP.NETの日本のサイトって あまり充実していないような気がする。
484 :
デフォルトの名無しさん :2005/10/24(月) 01:31:34
C#とASP.NETに限らず日本のプログラマはレベル低いから 海外のサイトのほうが役に立つぞ
英語読めないからプログラマーの質が落ちるんだよなぁ 誰か俺に英語の勉強の仕方教えてください。
>>485 面白い本でも見つけれ。
読むだけならできるようになる。
487 :
デフォルトの名無しさん :2005/10/27(木) 10:42:46
C#やJ#はhandlesは使えないのでしょうか?
デリゲート。
489 :
デフォルトの名無しさん :2005/10/28(金) 00:07:02
>>488 やはり使えないんですね。
ちょっとだけVBがうらやましい。
なぜそうなるのかと
491 :
デフォルトの名無しさん :2005/10/28(金) 12:36:21
ComboBoxなどでエンターキーが押されたときのイベントは KeyPressedとKeyDownのどっちで定義するのがよいのでしょうか?
492 :
デフォルトの名無しさん :2005/10/28(金) 14:28:09
英文で入力された文章をchar配列とsplitを使って単語に分解する時はchar配列の 中に基本的に何を指定するんでしょうか? 今、自分が指定しているのは {' ', ',', '.', '\f','\v','\n','\t'} でsplitするようにしてるんですが、作ったプログラムとフリーソフトのOpenOffice.org の出力する結果にズレが生じてます。 色々とcharの中身を変更してみるんですが同じ出力結果にならないんです。
<>():;-"'/!?& あたりはどうしてるの?
494 :
492 :2005/10/28(金) 16:10:43
今、分割しなければならない文章にはそういった記号は含まれていないので 現状では、疑問符や感嘆符はまだ実装して無いです。 先程から自分の組んだプログラムの挙動をF11キーを連打して確認した所、 単語数は自分のプログラムの出力結果で合ってるんです。 どうも、フリーソフトの方は単語ではないchar型は飛ばして集計しているような 動作をしてる模様です。 果たしてどちらが合っているのか…
どちらが合ってるも何も、利用者が望む形にするのが必要なことだろ。 OOoの出力結果が望ましいのならそれに合わすのが良いし、そうでないのならそうでない。 で、具体的に例えばどんな文ならそれぞれどんな結果になるの?
496 :
デフォルトの名無しさん :2005/11/03(木) 03:38:27
Stringの末端文字の削除について質問です。 処理の途中で string hoge = "あああ\nいいい\nううう\n"; のような文字列が出来るのですが、最後の改行を削除したいのです。 そこで hoge.TrimEnd(ch); としたのですが、最後の改行が削除されて くれませんでした。(ch は char [] ch = {'\n'}; としています) 正しい方法を教えて下さい。 それともう1つ、配列はstringのようにその場では書けないのでしょうか? 例えばstring型の場合、hoge.equals("abcde"); のように””で括ってしまえば その場に直接書いても問題ないですよね? しかし配列を与える場所に Trim({' ', 'a', 'b', 'c'}); と書いてしまうと エラーが出ます。キャストなどもかけてみましたがコンパイラに怒られました。 こういう方法はできない仕様と考えていいのでしょうか? 文法のページなども調べましたが意外に載ってなくて・・・。 環境は WinXP, VisualStudio.NET 2003, C# WindowsFormアプリ です。
497 :
デフォルトの名無しさん :2005/11/03(木) 04:37:14
前半:ためしてみたけどちゃんと消えました。 hoge = hoge.TrimEnd(ch); とかしなくてはいけません。TrimEndとかは、hogeオブジェクト自体が操作されるのではなくて、 操作した結果を返り値で返してくれるメソッドです。 後半:配列の要素を初期化する前に配列をつくる必要があるので、以下のように書く TrimEnd(new char[]{'', 'a', 'b', 'c'}); 僕は以下のように書くのが簡単で好き。 TrimEnd(" abc".ToCharArray()); 続けて質問なんですが、描画のダブルバッファリングをControlにまかせたとき、つまり以下のように指定したとき、 Control.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); このとき、バッファを取得する方法はありませんか?最終的にはそれをBitmapにしたいです。 例えばOnPaintでもらえるPaintEventArgsから何とかなるか苦闘したのですが。
498 :
496 :2005/11/03(木) 20:10:35
>>497 教えていただいた方法でコードがすっきりしました。
どうもありがとうございました。
C#で作ったプログラムってソースが見えているようなもんだ って聞いたんですけど どうやったら他の人が作ったプログラムのソースが分かるんですか
500 :
デフォルトの名無しさん :2005/11/04(金) 02:21:17
あるクラスを一時保存しておき、後で復元する、ということはできないのでしょうか。 たとえば値型の変数なら。。。 int i; // 変数 int temp; // 一時退避編集用変数 int = 1; // 初期値 temp = i; // 初期値保存 i = 5; // 変数に違う値を代入 i = temp; // 保存した初期値を戻す とやると、変数iは初期値に戻りますよね。 同じことをクラスでやりたいんですがクラスって参照型ですよね・・・そもそもそんなことやろうとする設計自体がおかしいんでしょうか。 クラス AとtempA(一時退避編集用)が存在するとき。。。 A.str = "編集前"; // クラス内のstring変数strに初期値を代入 tempA = A; // クラスAの初期値保存 A.str = "編集後"; // クラス内のstring変数strに違う値を代入 A = tempA; // 保存した初期値を戻す としても、Aの変数strは"編集後"になっちゃいますよね。どうにかしてクラスの変数の値を一時保管しておきたいのですが。。。
今、楽天懸賞の「崩れ文字」読み取り自動応募ソフト 作って公開したら大儲けだろうなあ・・・ きっと何百万は行くと思う Let's try!
505 :
500 :2005/11/07(月) 00:56:54
みなさまアドバイスありがとうございます。
>>502 >>503 >>504 実現方法としてはいろいろな手法が考えられるのですね。
まずICloneableを使用してみて、クラスのコピー作成を試してみましたが、
他にもいろいろな選択肢があるんですね。
シリアライズ等に至っては、わたし個人で考えていてもは思いもつかなかったと思います……。
structにしてしまうのも一つの方法ですね。
ありがとうございました。
506 :
505 :2005/11/07(月) 00:59:05
>>505 考えていてもは思いもつかなかった
↓
考えていても、思いもつかなかった
失礼しました。
507 :
デフォルトの名無しさん :2005/11/07(月) 01:53:50
↓別スレで良い回答を得られなかったので再掲 C#プログラムで以下の機能を実装したのですが、どのようにすれば良いでしょうか? 1.ping(アドレススキャン) 2.traceroute(経路調査) 3.ポートスキャン(稼動ポートを割り出す) 4.ドメインネーム調査(IPからドメイン、ドメインからIPを割り出す) 5.文章からパスワード(大文字、小文字、数字、一部記号)生成
508 :
507 :2005/11/07(月) 01:55:08
少し修正します。 誤)実装した 正)実装したい
1-4 => 887 1-5 => 888 887 デフォルトの名無しさん [sage] 2005/11/06(日) 20:01:35 TCP/IPを勉強する 888 デフォルトの名無しさん [sage] 2005/11/06(日) 21:09:16 どっかのだれかが作ってるだろうから借りてくればいいよ。
510 :
デフォルトの名無しさん :2005/11/07(月) 02:06:16
>>509 クラスのソースコードとか落ちてないですかね?
ちょっとググってみたけど見つからなかったんですよ
512 :
デフォルトの名無しさん :2005/11/07(月) 11:21:25
誰か知ってたら教えてほしいんですが、 河西朝雄の「はじめてのVisual C#.net」という本で、 グラフィックスではどんなことを扱ってますでしょうか? 単に四角と丸描いて終りとかそんな感じですか? 本屋へ行ってもC#本自体少なくて・・・
C#初めてでよくわからないので、質問させてもらいます。 丸め処理(切り捨てや四捨五入)をどうやるのでしょうか? JavaならDecimalのメソッドを使えば出来ると分かるのですが、C#はさっぱりわかりません。 会社ではネットにも繋げる環境にないので、非常に困ってます。 回答をお願いします。m(__)m
>>514 java の標準ライブラリに Decimal なんてクラスは無い。
Floor とか Round があるのは、C# も Java も Math クラス。
ちょっとまて。C# には Decimai.Floor があるよな? ってことは俺釣られたんか?
517 :
デフォルトの名無しさん :2005/11/07(月) 19:12:20
>>514 ,r‐-、
. ,! _
. i, _,r‐''''''''''''''''ヾ,_`、_
,r'''''''ブ、 `.、`フ
\ ,r' .,f'´ ,r f .i 、 , i i`ト、
\ ,f ,f ,'´i ,'`、 ;`、ヽ,! .! Yi、
.\ i i, ' ' ヽ; ヾ,'`ヽi__ i、!``ー‐┐
.\'''''i ̄ ̄  ̄ ̄ ! .! ,ト、`ヾ;┘
. !\ ━━ ━━┿ .!' `ー′ ======
. i ,.\ , , i ,! そんなエサで騎士王である私がー!!
i ! `\ _________,,/i,`′
ヽ,! .f /人;!/ i, ======
ヽ,r`i___iヽ,/___! ====== (´⌒
. ,r`.、,!:.:.:レ':.:.:.:.:>-、 (´⌒;;(´⌒;;
,r:i;.:.:.:.:.:.:.:.:.:.:.:.:.:.':,ゞ-ゝ (´;;⌒ (´⌒;; ズザザザ
`ー--''´`ー--‐''´ (´⌒; (´⌒;;;
519 :
デフォルトの名無しさん :2005/11/09(水) 16:35:58
hosyu
520 :
デフォルトの名無しさん :2005/11/09(水) 17:02:57
C#初心者なのですが、質問させてください。 マイクからの音声を拾って、音量をリアルタイムにモニタしたいのです。 マイクから音を拾ったり、音に対して処理を行うクラスライブラリが見つかりません。 「sound」「音声」「録音」「wave」あたりのキーワードでMSDN検索してみたのですが、出てきません。 参考になるサイトや、キーワードがありましたらご教授ください。 よろしくお願いしますm(__)m
>>520 DirectX 使えばいいと思うよ。
音に対して処理するのはフリーのライブラリが結構落ちてる。
音声信号処理とかで検索してみ。
522 :
520 :2005/11/09(水) 19:08:00
>>521 なんかそれっぽいサイトがありました。
ありがとうございます!m(_ _)m
今日からC#をはじめたものです。 初歩的で恥ずかしいのですが、どうしてもわからずこまってるところがあるので、教えてください。 デザインタブで、ボタンなどを配置して、そのボタンをダブルクリックすると、 (form1).csのコードがかいてあるタブで、 private void button1_Click(object sender, EventArgs e) { } のコードが自動で書かれますが、 これを削除したい場合はどのようにして削除すればいいでしょうか。 手動で削除してデバッグすると”button_1 clickの定義がありません”とエラーメッセージが出てきてしまいます。 超初歩的な質問だと思うのですが、ここから進まないですおねがいします、、
>>523 ボタンのプロパティ⇒イベントの Click に button1_Click って書いてあると思うから、
そこを消してコード側も削除。
イベントは、プロパティがずらずら並んでいる部分の上に雷マークのアイコンがあるからそれをクリック。 プロパティ一覧の代わりにイベント一覧が現れる。
>>524 早速ありがとうございます。
できました。
ありがとうございました〜
事情によりC#(VS2003)を使うことになり、勉強中の者ですが質問があります。 静的変数・静的メソッドはクラス単位に実態を持ち、すべてのインスタンス間 で共有されるとのことですが、(理解が間違ってたらすみません) これらはC#のコーディングにおいて、どのような局面で使用されるのでしょうか? VB6でいうところの標準モジュールのような位置づけなのかとも思いましたが、 C#にはモジュールという概念が無いので、それは間違った使い方なのか、とも思います。 どなたかご回答お願いします。
>>527 全てのインスタンス間で共有したいとき。
>>527 俺の場合。
静的変数(フィールド)はreadonlyつけて、
configファイルのデータをいろんなところから読むのに使ってる。
静的メソッドはpublicの場合は、
クラスの性格にあってインスタンスを必要とする処理を提供するのに使う。
530 :
デフォルトの名無しさん :2005/11/11(金) 10:48:47
すいません、右も左もわからない者ですが、質問させてください C#でC++やCのクラスライブラリを使うには、どうしたらいいのですか? MSDNを検索してみたのですが、うまく答えに行き着かないので困ってます よろしくおねがいしますm(_ _)m
DllImport属性 C++のクラスはC#からは扱えない
>>530 Managed C++ やら C++/CLI で Managed なラッパークラスを書く。
tlbimp で出来ることもあるお
534 :
デフォルトの名無しさん :2005/11/11(金) 11:29:04
>>531 ,532,533
ありがとうございます。
そのへんのキーワードを調べて挑戦してみます!
C#が出た時から疑問に思っていたのですが、 C++があるにもかかわらず、何故C#が出てきたのですか? C++ではいけないのでしょうか。 C++でもいいとしたら、C#の存在意義ってなんなのでしょうか?
初心者向けのレスじゃねーなw
>>535 C++ は昔からの負の遺産もいろいろ背負っちゃってるから一度リセットしたかった。
それを最初にしたのは Java だったんだけど、
SUN が Java の仕様策定権を独占しちゃってたから、
やむを得ず Microsoft が Java のパクリ言語を作ったってのが C#。
C# は結局、.NET アプリを作るには、C++ の悪い面をそぎ落とした使いやすい言語。
C++ は(負のものもあれど)過去の遺産を使えるし、非Managedなコードを書くには C# よりも最適。
C#というのはJava的位置づけなんですか。 C++は悪者扱いみたいですけど、結局使う人次第ってことですよね。 包丁を善人が持てばおいしい料理を作ってくれるけど、悪人が持てば(ry C#ってそんなにいいんですか? だったらこれからの人はC++じゃなくてC#から勉強しているのかな?
>>539 そうだよ。
c++は罪だ。そして悪。そして糞。
>>539 いい人が必ずしももてるとは限らないだろう。
それと一緒だ。
542 :
デフォルトの名無しさん :2005/11/11(金) 17:48:36
>>539 これからはC丼の時代。
みんなc丼を買おう!
543 :
デフォルトの名無しさん :2005/11/12(土) 18:16:02
そんなにC#っていいんですか? C++じゃ開発に限界でもあるのですか?
>>543 そんなに乗用車っていいんですか?
F1マシンじゃ何か不便なことでもあるのですか?
に置き換えると多分理解してもらえないとおもう。
そんなに風俗っていいですか? 普通の恋愛じゃ何か不都合なことでもあるんですか?
レゴブロックとダイヤブロックで同じものを作ろうとするもんなんじゃねーの
547 :
デフォルトの名無しさん :2005/11/12(土) 19:39:09
Visual Studio .net 2003 で作成したソリューションファイルやプロジェクトファイルを 前バージョンである Visual Studio .net 2002 で利用することはできますか?
上位互換性なんてあるわけ無いだろうが …いや確信ないけども
これは下位互換じゃないのか?
結論:不可能 ちなみに2002のを2003で開けて保存し直したのも2002ではもう使えない
>>550 いや、可能だよ。
2002や2003、また2005で保存したもののプロジェクト変換してくれるツールが普通にある。
というか、プロジェクトファイルなんてタダのテキストの羅列なんだから、
それぞれがどういった形式か分かれば手動で変換も可能。
だからこそ、そういったツールも存在する訳だし。
基本的に動作しなくなるのは、上位バージョンで追加された機能なんかを使ったコードがある場合、
プロジェクトの変換とかは出来ても、コンパイルできないとかその程度。
monoって全然人気ないのな、、、。 マイクロソフトは嫌いだけどC#は好きな俺のようなLinux or OSXユーザーっていないのかな、、、。 monoスレ余りにも過疎でさ。さびしいからこっちきた。ごめん
>>553 monoの存在意義が、IIS高すぎw負荷分散したらライセンスだけで予算オーバーだぜもっと易くASP使えないのかよだから
何その暗号
#region チラシの裏 いままでテキストエディタ + コマンドラインコンパイルしてたから はじめてExpress EditionでIDE体験したら笑うくらい簡単だ〜 フォームとかトライ&エラーでやってたのがバカみたい #endregion
クラスFooBarやFooFooがクラスFooの子クラスであるとします Type typeが渡されたときに、typeがFooの子クラスのTypeであれば なんらかの処理を行いたいのですが、if文の条件式はどう書けばいいのでしょうか 一応typeはFooではなくFooBarやFooFooが来る事を想定してます public void doSyori( Type type ) { if (ここがわからない) 処理; } こんな感じです よろしくお願いします
IsSubclassOf/IsAssignableFrom
if ( type.IsSubclassOf( typeof( Foo ) ) ) ですよね ありがとうございました
( ´・ω・`)
( つ||⊂) =3 パタン
(_↑
>>556
VS C# Express Edition使ってるんですが デプロイメントプロジェクトは作れないんですか? インストーラ作りたいんですけど
Focus()とSelect()の違いってなんですか? 「フォーカスが移る」と「アクティベートされる」の違いってなに?
566 :
デフォルトの名無しさん :2005/11/17(木) 16:31:41
すいません、質問させて下さい 拡張子libのファイルと拡張子DLLのファイルは何が違うのでしょうか? MSDNのC++関連ヘルプで、 【LIB ツールを使って標準ライブラリやインポート ライブラリを作成する方法については、「LIB リファレンス」を参照してください。LINK を使ってインポート ライブラリを作成する方法については、「/DLL (DLL のビルド)」を参照してください」】 と書いてあったのですが、ライブラリを作成するツールが違うだけで、もともとのソースコードは一緒と思っていいのでしょうか? libファイルで配布されているライブラリを使おうと思ったのですが、うまくできませんでした。 Dllは[Dllimport("ライブラリ名")]で読み込めるようですが、ファイル名に.libファイルを指定すると、起こられてしまいます。 質問が連続で並んでしまって申し訳ありませんが、よろしくお願いしますm(_ _)m
567 :
デフォルトの名無しさん :2005/11/17(木) 17:52:26
vc#2005って今日発売って聞いたんですけど。 ガセですか?
>>566 libは静的リンク用のライブラリ。だから、君はそれを静的リンクしたDLLファイルを作らないとC#から関数を呼び出せない
>>566 DLLはダイナミックリンクライブラリ、実行時にここからモジュールがロードされる。
LIBはスタティックリンクライブラリ、コンパイル時(実際にはリンク時だが)に
必要なモジュールが静的にリンクされる。実行時には不要。
Dllimportで使用できるのはDLLのみ。
570 :
566 :2005/11/17(木) 18:36:43
>>568 >>569 ご回答、ありがとうございます
すこし理解できました。
僕がこのlibのライブラリを使おうと思ったら、
■DLLを作成して、Dllimport属性を使う
or
■C#でlibファイルを扱う方法を探す
のどちらかになるわけですね。
571 :
566 :2005/11/17(木) 18:36:16
>>568 >>569 ご回答、ありがとうございます
すこし理解できました。
僕がこのlibのライブラリを使おうと思ったら、
■DLLを作成して、Dllimport属性を使う
or
■C#でlibファイルを扱う方法を探す
のどちらかになるわけですね。
後者の選択肢が残っているのが謎なわけだが
573 :
デフォルトの名無しさん :2005/11/18(金) 03:39:06
ガセ。
>>566 マジレスすると、C#からC/C++用のlibは読めん。
どうしてもC#から使いたいなら、そのlibを作ったやつに頼むしかない。
574 :
573 :2005/11/18(金) 03:45:11
すまん。
スレの読み込みが中途半端になってて、変なレスしちまった。
せっかくだから補足。
>>571 C#でC/C++用のlibは扱えないから、そのlibに入ってる関数を
全部エクスポートするようなDLLを(C/C++で)作ってDllImportを使うしかない。
.DEFをファイル作ってコンパイルしないと変なエクスポート名になるから注意。
DOSプログラムを実行し、その結果を取得したいのですが パスの指定でうまくいきません。 動的に取得したフォルダのパスがあるとします、 そのパスにはスペースが含まれているのでDOSで実行するには " で挟まなければなりません。 しかしそのパスに " を追加するとどうしても "\"C:\\Documents and Settings\\\"" となってしまい これを引数として渡すと \"C:\\Documents and Settings\\\" が引数として 渡っているような気がするのですが解決策はないでしょうか?
気のせい。つかなんか見えないところで変なことやってる気がするが。 どうしても気になるのなら@""を使えば。//C#リファレンスの文字列のところに書かれてる
>>576 @"C:\Documents and Settings"を取得するための関数を GetDocPath() とします
これに " を追加するために string path = "\"" + GetDocPath() + "\"" とやっています。
また、 string arg = @"/c sample.exe " + path として
コマンドを送っているのですが・・・
短いパス名使ったらいかんの? C:\Docume~1\とか
メッセージボックスなりDebug.WriteLineなりブレークポイントの自動変数なりで値をチェック。 コマンドを送るってのが微妙な表現だが。
DOSで直接やってみたらどうやら長いパスを渡すと エラー起こすみたいでした・・・お騒がせしましたorz。
それはそうと、コマンド・プロンプト(もしくはコンソール)の事をDOSって呼ぶのやめてくれ。 何の話をしてるのか混乱する。
cmd
>>581 それは仕方無いんじゃ?
Windowsのバージョンによっては『MS-DOSプロンプト』な訳だし、
当然、フルで呼ぶなんてそんなに無いんだから、略せばDOSになるだろうし。
経験が長ければ長いほど、そういった呼び方するだろうしね。
逆だとおも
もともとはDOSのエミュレータって宣伝されてたからな
せめて DOS 窓と呼んで。
587 :
デフォルトの名無しさん :2005/11/20(日) 17:09:17
それならDOSでいこうよ。
そうどすか
catch (
>>588 ) {
ProcessBuilder builder = new ProcessBuilder("format", "c:");
Process process = builder.start();
}
catch (
>>588 ) {
ProcessBuilder builder = new ProcessBuilder("format", "
>>588 ");
Process process = builder.start();
}
トラックバーを三つフォームに貼り付けて 書くトラックバーのスクロールイベントに private void ColorChenge() { Color c = new Color(); int r = rTrackBar.Value; int g = gTrackBar.Value; int b = bTrackBar.Value; c = Color.FromArgb(r, g, b); this.BackColor = c; } を指定してスライダーが動いたらフォームのバックカラーを変えました。 そうするとボタンやトラックバーなど他のコントロールのバックカラーも 同時に変わってくれるのですが、かなりフォームがちらつきます。 なにかちらつかずスムーズに色を変える良い方法はないでしょうか
SuspendLayout/ResumeLayoutとか?
596 :
594 :2005/11/21(月) 17:50:33
>>595 さん
色々と試してみて、「this.BackColor = c」の影響を無くすため
コントロールだけ変えてみようと以下のようにやってみたのですが結果は変わらずでした。
private void ChangeColor()
{
Color c = new Color();
int r = rTrackBar.Value;
int g = gTrackBar.Value;
int b = bTrackBar.Value;
c = Color.FromArgb(r, g, b);
this.SuspendLayout();
foreach (Control ctl in Controls)
{
ctl.BackColor = c;
}
this.ResumeLayout(false);
}
597 :
デフォルトの名無しさん :2005/11/21(月) 23:09:06
ダブルバッファを使う setstyleがprotectなのでめんどいからAPI使うことを進める。
594じゃないですが APIつかうといいますと?? 継承して、オーバライドするほうが簡単じゃない? 何かデメリットでもあるんですか、API使う方法がどれだけ簡単なのかわからないもので
599 :
デフォルトの名無しさん :2005/11/22(火) 10:08:29
public interface A {} public interface B : A {} インターフェイスの上下関係がこのようになっている場合、 実装したクラスを利用する時にAをBにキャストしたりBをAにキャストしたりってできますか?
まず自分で試せよそんなの。
複数のクラスで共通の定数を使いたい場合、普通はどうするんですか? ・それぞれコンストラクタやプロパティで渡す ・public const ・列挙定数
定数ならconstだろう。
>>601 が言う定数とは多分定義が違うけど。
普通も何も、そんなの目的次第だ。
603 :
594 :2005/11/23(水) 17:30:39
>>597 フォームのロード時に
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
としても変わりませんでした。
もうこれは仕様として諦めるしかないのですかね。
あ、ごめん。Formがチラつくって話か。
606 :
594 :2005/11/23(水) 20:54:28
すいません・・・。
>>594 の訂正です。
フォームではなくトラックバーなどのコントロールがちらつくの間違いでした。
>>603 this意外には設定できないみたいなのですが・・・
>>606 えっと間違えた604ですけどね。間違ってねえのか。
俺あんまり詳しくないので合ってるのか知らんけど。
そのトラックバーとやらのコントロールの継承コントロールを作ってSetStyleでダブルバッファにして
描画(OnPaint)を自分で書くんです。トラックバーのコードでthisにSetStyleってことですよ。
違ってたらつっこんでください、識者の人。
CPUで解決してもなぁ・・ 継承コントロールって、ただ継承するだけなんでそんなに難しく考えなくても こんな感じで public DoubleBufferedTrackBar : TrackBar{ public DoubleBufferedTrackBar (){ this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); } } これだけでTrackBarがほんとにダブルバッファ化するのかは謎・・ Panelとかはなるんだけど 個人的にはTabControlのダブルバッファ化のやり方知ってる人いたらいいなぁ
594の問題を解決するには、コントロールがそれぞれ独自に描画するのを止めさせて フォームのOnPaintで一括描画するしか無いと思うんだな。 できるかどうか知らないけど。
611 :
594 :2005/11/27(日) 19:04:11
TrackBarのちらつきだけを何とかしようと色々トライしてみましたが
全く効果無しでした。
>>609 よく分からずコピペしてみたけどダメでした・・・。
何かヒントをもらえないでしょうか。
TrackBar継承して実験してみたけど、OnParentBackColorChangeとかいろいろいじったけど 無理だった。SupportTransparentして、TrackBar自身のBackColorをTransparentにしてもダメ Controlが各自に書き込むのをトラップできたらできそうなんだけどなぁ
613 :
デフォルトの名無しさん :2005/11/27(日) 23:47:46
NativeWindowでWM_PAINTを拾う
614 :
デフォルトの名無しさん :2005/11/30(水) 01:52:11
あほな質問ならすんません。 protected override void OnPaint(PaintEventArgs e) { うんちゃら } とあるとき、eからとったGraphicsはDispose()しなくていいんですか? すると実行時にエラーでるんですが
もちろん。 Disposeするのは自分で作ったものだけ。 ほかから参照として渡されたものはその渡した側が責任を持って処分する。 例えばそれの派生クラスがあったとして、 親クラスのメソッドでDisposeされてたらそれ以降使えなくなるだろう? protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); //e.GraphicsがDispose e.Graphics.Draw... //ObjectDisposedException! }
ありがとうございます。 仕組みがわかってすっきりしました。
やっぱりDisposeがらみなんですが ループのなかでBrushを初期化して使う必要にかられたんです SolidBursh br = new SolidBrush(...); for(...) { br = new SolidBrush( ...); ... } br.Dispose(); ↑ これはループのなかで一回ごとにすべきでしょうか? それとも最後に一回で済むんでしょうか。 どこかでnewしたらdiposeと書いてあったのを読んだ気がするんで
>>617 いちおうなにもしなくてもファイナライザがDisposeするからあんまり心配しなくてもいいんじゃないか。
リソースが枯渇するほど使うわけじゃなきゃ。
当然、newするたびにDispose そのコードのままじゃ先頭で作ったbrをDisposeする機会が失われてるぞ で、もっとお勧めはusing
forのなかでnewしそうなとき、どうしても再利用できないか考えてしまう漏れ
>>618 >>619 >>620 ありがとうございます
ループの中でdiposeすることにします。
先頭のはunasignだっておこられるんでつけたんですが
ようするにbrの再利用はできないということですね。
Dispose以前の問題だとおも
>>618 まったくDisposeしないで描画系のプログラムを書いたことがあるが、
ディスクトップが重くなって、アイコンの表示が黒抜けになったりと異常な状態になったことがある。
Disposeをきちんと入れたらまともに動くようになった。
メモリが不足してGCが走る前にGDIリソースが大変なことになるようだ。
そこで思ったのが、Disposeが必要なオブジェクト多すぎだよGDI+
>>621 SolidBrush.Color プロパティは?
625 :
デフォルトの名無しさん :2005/12/01(木) 19:59:48
あるよ。
627 :
デフォルトの名無しさん :2005/12/01(木) 20:07:40
あるはずなのになぜか無いんですよ VSのバグですかね?
単に表示しないようにデザイナが設定されているだけだろう 手で書けってことだな
629 :
デフォルトの名無しさん :2005/12/01(木) 21:05:53
レスありがとうです 現在リッチテキストボックス内のテキストをD&Dで移動できるようにしているのですが、 うまい具合にできあがりません といいますのも、 文字列選択→選択部分をドラッグ の操作でドラッグイベントが発生していない?(エフェクトが変わらない)ようなんですよ それでそのままもう一度ドラッグを行うと今度はエフェクトが変わるわけですが、 なぜ一回目のドラッグでイベントが発生しないのかが分かりません 分かりにくい状況説明ですが、何かご存知ないですか?
>>629 MouseDown、MouseMoveで自前でDoDragDropを呼んでる?
richTextBox.textから、 空行の有無を見つける方法を ご教授下さいませ
Linesをforeach
>>632 .Lines ありがとうございます
解決しました
634 :
デフォルトの名無しさん :2005/12/13(火) 23:10:42
多人数で一つのプログラムを作っていて問題が発生したので 助言をおねがいします。各単体のソフトは個々が完成しましたが 結合をするために同じフォルダにファイルを放り込んで既存を追加したら データアダプタは残っていますがデータセットなどが消えてしまいました。 C#プロジェクトファイルのよい結合の仕方または方法が載っているサイトを教えてください
>>634 名前空間変えた?
DataSetも名前空間を変えるかusingしないと見えなくなる。
636 :
デフォルトの名無しさん :2005/12/15(木) 12:32:07
FrameWork SDKを入れたのにコンパイル出来ません。なぜでしょうか?
パスが通ってないとかそんなんだろ 一昔前はPATHコマンドとか開発者には常識だったんだけどなぁ……
SDKなくてもコンパイルできるよ
639 :
デフォルトの名無しさん :2005/12/15(木) 17:59:25
パスを設定したら出来ました!常識なのか…もっと勉強しまス。ありがとうございました。
640 :
デフォルトの名無しさん :2005/12/15(木) 22:47:08
画像を読み込んで表示するプログラムを教えてください。(超素人です)
PictureBox の Load メソッドで一発です
642 :
デフォルトの名無しさん :2005/12/16(金) 00:57:05
データを保持するためだけのクラスってありですか? 例えば、こんな感じのクラスです。 public class MyData { private string myName; private int myAge; private string mySex; private string myRace; public string MyName { get { return this.myName; } set { this.myName = value; } } //行数の関係で省略。 }
俺はそういうクラスを山ほど作るぜ
644 :
デフォルトの名無しさん :2005/12/16(金) 01:10:29
レスありがとうございます。
データだったら値型検討してもいいかも
値型はやめとけ 扱い間違うのがオチだ
書いてるじゃん、と思って見てて違和感がそこかしこにあると思ったらCompactFrameworkか。 ・ユーザ定義型をマーシャリングする場合、StructLayout属性をつけ、LayoutKind.SequentialまたはExplicitを指定する必要がある。 ただしstructの場合はデフォルトでLayoutKind.Sequentialである。 ・固定長文字列をstringで定義する場合、MarshalAs属性をつけ、UnmanagedType.ByValTStrを指定し、SizeConstフィールドでで文字列長を指定する。 格納された文字列とバイト列の変換(エンコーディング)は、その型のStructLayout属性のCharSetフィールドで決定される。 ・DllImport宣言で、CharSetフィールドで文字セットを指定できる。Autoの場合は自動選択。 使用する構造体のCharSetとマッチしている必要がある。 ・外部関数宣言の引数に、byte[]やIntPtrでは無く直接ユーザ定義型を指定できる。 ただし、ユーザ定義型がstructかclassかで値の渡し方が異なるので注意。 ポインタで渡す場合、classならそのまま、structならout/refキーワードが必要になる。
649 :
647 :2005/12/16(金) 13:01:27
>>648 おおおお、アドバイスありがとうです!
もちょいがんばってみます!!
650 :
650 :2005/12/16(金) 21:32:24
かなり面倒くさいですが、どうしてもわからないのでよろしくお願いします。 以下のプログラムがエラーになる理由について。 実行すると、「Application has generated an exception that could not be handled.」 と表示されて止まってしまいます。 class Test : System.Exception { public override string ToString() { return "Test"; } } //651 に続く
class Hoge { static void Main() { int[] hoge = new int[3]; try { A(); } catch (Test err) { System.Console.WriteLine("最後 :" + err.Message); try { A(); // ここいらが多分まずい hoge[5] = 10; } catch (System.IndexOutOfRangeException exx) { System.Console.WriteLine("ラスト: " + exx.Message); } } System.Console.WriteLine("_END_PROGRAM_"); } static void A() { try { B(); } catch (Test err) { System.Console.WriteLine("中間 :" + err); throw; } finally { System.Console.WriteLine("finally"); } } // 652へ
static void B() { int zero = 0; int ans; try { ans = 10 / zero; } catch (System.DivideByZeroException err) { System.Console.WriteLine("例外検索開始 :" + err.Message); throw new Test(); } } } で終わりなのですが、例外のハンドル(?)が生成される量には限りがあると いうことですか? だとしたら、それはいくつぐらいなのでしょうか? それとも考え難いのですが、スタックオーバーフロー?? こんな糞コード書く人はいないかもしれませんが、気になりました…
いや何を悩んでいるのかさっぱり分からないが。 Application has generated an exception that could not be handled の訳はアプリケーションで処理できない例外が発生した、つまりcatchされていない例外が投げられたってだけだし。 Mainの初めのcatchでA()を呼ぶ以上自動的に例外Testが投げられるのにcatchしてないじゃん。 あとExceptionの派生クラスにはExceptionサフィクスつけろとか、ToStringをオーバーライドするんじゃねぇMessageを書き換えろとか。
本当だ…
System.Console.WriteLine("ラスト: " + exx.Message); } の下に
catch (TestException exx) {
System.Console.WriteLine("問題はここか" + exx.Message);
}
としたらいけましたデス。
>>653 さんの助言がなければ、『throw;実はでMainに処理が戻らず、A関数が残ったまま再びA()で呼び出したからっ』…と
訳のわからない自己解決してしまうところでした。ありがとうございました!
class A {} class B {} class Test { static void Main() { object objA = new A(); object objB = new B(); /* @@ [1] @@ */ if (objA is B) { objA = objB; } else { System.Console.WriteLine("ほげ1"); } /* @@ [2] @@ */ try { objA = objB; } catch (System.InvalidCastException err) { System.Console.WriteLine("ほげ2"); } } } is 演算子はキャストして例外が発生するか否かを調べるものと覚えました。 [1]と[2]では、[2]ではそれほど違いはないと踏んでいたのですが、 "ほげ2"が出力されないのはなぜなんでしょうか?
>>655 > is 演算子はキャストして例外が発生するか否かを調べるものと覚えました。
違う。そのクラスまたはそのクラスの派生クラスかどうかを調べる。
> [1]と[2]では、[2]ではそれほど違いはないと踏んでいたのですが、
> "ほげ2"が出力されないのはなぜなんでしょうか?
キャストして無いじゃん。キャストってのは
A objA = (A)objB;
ってのだぞ。
objA = objBじゃ単に代入してるだけ。
>>656 なるほど…is は基底クラス側に派生クラスの実装がない危険を回避するため存在しているのですよね(゚_ 。)?
しかし、色々試すうちちょっとパニくって参りました。
話は少しずれてしまうのdすが、今取り組んでいるサンプルプログラムに object test = new MyClass(); というような
System.Object にアップキャスト(?)する場面が多く見られるのですが、これの使い所がわからなくなってきました。
abstract class A { abstract public void Write(); }
class B : A { public override void Write(){ Console.WriteLine("おーばーらいど"); } }
class Test {
static void Main() {
object objB = new B();
objB.Write();
}
}
これでエラー< CS0117: 'object' に 'Write' の定義がありません。>が出る理由はわかります。
全てのオブジェクトは System.Object の派生ですよね。だから、object型にはなんでも new した
ものが入るわけですが、入るってだけで実用では全く使わない気がするのですが実際のところどうな
のでしょうか?
長文スミマセン
なんでも入れられるから、例えばArrayListが扱う型はobjectなわけだ。 そうでなければ特定の型しか入れられない限定的なコレクションになってしまうから。 その「特定の型」を、ArrayListを使う側が指定できればいいのだが(.NET 2.0/C# 2.0のGenericで実現される)、 指定できない以上object型で受け入れないと汎用コレクションクラスに使えない。
>>658 ありがとうございました。四苦八苦してなんとか飲み込めた感じです。
Generic の方は自分の環境ではコンパイルできずぼんやりとした理解ですが、色々
と勉強になりました。
class Test {
static void Main() {
System.Collections.ArrayList al = new System.Collections.ArrayList();
string hoge;
al.Add("aaa");
al.Add(19); // ●
hoge = (string)al[0];
System.Console.Write("{0},{1}",hoge ,al[1]);
}
}
●部分を回避できるのが Generic というやつっぽいですね。
新しいテクを今覚えたとです。
660 :
659 :2005/12/17(土) 14:52:20
hoge = (string)al[0]; の部分もだった…
そう言えば
>>657 も ((A)objB).Write(); とキャストすればコンパイル通った(^o^)
多態性となんかごっちゃになってたけど、
>>656 ,658様のお陰でどうにか落ち着きましたっす。 多謝
namespace H { class Tekito { } } namespace G { class H { static void Main() { H.Tekito a = new H.Tekito(); } } } この場合、namespace H の Tekitou クラスを作るにはどうアクセスしたらいいんでしょうか?
>>661 2.0 なら H::Tekito
1.0, 1.2 なら using Hoge = H.Tekito; としてから Hoge で使う
>>662 いけますた。namespace G の所で宣言して暫く詰まった僕は馬鹿だ… orz
1.2 のはずで下の方で出来たっす。有難う御座います。
別のクラスからフォームのテキストボックスの値を入力するにはどうしたらよいでしょうか? public class Form1 : System.Windows.Forms.Form { public System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button2; (中略) public void SetText1() { this.textBox1.Text = "abc"; } private void button2_Click(object sender, System.EventArgs e) { testClass1 tc1 = new testClass1(); tc1.TestSet(); } } public class testClass1 { public void TestSet() { Form1 fm1 = new Form1(); fm1.SetText1(); } } こんな感じでやってみても全然テキストボックスの値は変化しないのですがどうやったらいいのか教えて下さい。
>>664 fm1.SetText1();のあとにfm1.Show();を追加してみればどんな状態になっているかがわかる。
testClass1に操作したいForm1のインスタンスを渡すなりなんなりする必要がある。
>>665 ありがとうございます。
fm1.Show();
を追加したら新しく開いたForm1のTextBox2には"abc"と表示されていました。
testClass1にForm1のインスタンスを渡すというのは、testClass1内にTextBox2のインスタンスを
作成してやるということでしょうか?
>>666 いや、だから新たに作成するなと。
操作したいウィンドウのインスタンスを渡せ
private void button2_Click(object sender, System.EventArgs e)
{
testClass1 tc1 = new testClass1();
tc1.TestSet(this);
}
//
public void TestSet(Form1 fm1)
{
fm1.SetText1();
}
他人にやりたいことを理解してアドバイスするのって かなり高度な事だよなぁ
2005なんですがメニュー、Popupメニュー、ツールバーを統一的に扱うActionクラスみたいなものってないんですか?
674 :
673 :2005/12/18(日) 16:40:38
あぁ…意味不明なコメント消すの忘れてた (゚Д゚ll)
意味も考えずコード流し見ただけだが、 > if (num > 2) num = 2; // ここ… > else if (num < 0) num = 0; > dg = new CallBack[num]; dgはCallback[2]、つまり要素数2の配列。 > dg[id] = obj; // ユーザー定義変換 idが2の場合、配列インデックスは0スタートだからdgの3番目。 ほらOutOfRangeException。
>>675 わぎゃー、速攻でずっと悩んでたエラーが消えたとです。ありがとうございます。
dg = new CallBack[num+1] でしたか…。
System.NullReferenceException: というエラーは cout.WriteLine(test.dg[1]());
を test.dg[2]() にしたら直った。(*´o`)ホッ
ついでと言っては何なのですが、
>if (num > 2) num = 2;
>else if (num < 0) num = 0;
こういう似たような限界値チェックが沢山出てきました。Cなら #define のマクロ関数
使ってなんとかしていたと思うのですが、C#ならばどうすべきなのでしょうか?
新しいメソッドを作るべきですか?
using ステートメントで例外はキャッチできないのでしょうか
using は finally で Dispose を自動的に実行してくれるだけ catch したければ自分で書く
680 :
デフォルトの名無しさん :2005/12/19(月) 00:55:25
using System.Reflection; class Test { static void Main() { System.Type t = System.Type.GetType("System.Char"); MethodInfo[] method = t.GetMethods(); foreach(MethodInfo tmp in method) System.Console.WriteLine(tmp); } } これは、どうして new していないんでしょうか? オブジェクトは容量の確保するために、new は必須だと… MethodInfo クラスの中身でユーザー定義変換を行ってるいう事? けど、配列でそんな事可能なのですか? 一体どういう実装が… 想像がつかなくてこんがらがって来ました。どなたか解説キボソです
んん? 何が分からない? GetMethodsでMethodInfo[]のインスタンスを返しているが、そこにnewが見えないのはどうしてだってこと? foreachの実装がどうなってるかってこと? どっちもインスタンスはGetMethodsの中でnewしてるだけの話だが。
あぁ…なんだかそう言われてみれば… 少し落ち着きました
5行目でパニくってました。return new MethodInfo[]; みたいな感じでやれば行けるのかも…
return で返せるのは一つと思ってたばっかりに。後日試してみようと思います。
>>681 ありがとうございます、お騒がせしました。
return で返せるのは1つだけだよ
そうでした orz
>>685 > ★の部分なのですが、こう以外書きようがないものなのでしょうか
> なんと言うか、もう少し楽に…
3つくらいなら別に良いだろ。
それ以上になったらコンストラクタでforでも使えば。
というかコンストラクタでfor使ってるじゃん。ここでnewしていけば。
> event について
> バシっとしっくり来る解説になかなか出会えません。
> イベントハンドラって書いてあるけど、なんの事やら…
> マルチキャストのデリゲイトと違いもはっきり認識できませぬ。
イベントハンドラは実際に実行するメソッド。デリゲート/イベントに登録する。
デリゲートは実行するメソッドのシグネチャ(引数・返り値)を定義した型。
デリゲートは型なので当然インスタンスを作ることができる。でもこのインスタンスも一緒くたにデリゲートと呼ぶことも多い。
イベントはデリゲートインスタンスに対するプロパティみたいなもの。
宣言部では表に出てこないが、内部でデリゲートインスタンスを持っている。
マルチキャストデリゲートは、イベントハンドラを複数登録できるデリゲート。 delegateキーワードで宣言した場合自動的にMulticastDelegateから派生したクラスになる。 Delegateから派生させるのは許可されていないので、C#で扱うデリゲートは自動的にマルチキャスト。
>Delegateから派生させるのは許可されていない
どこかで見た覚えが(゚゚)ウーン
>メンバ変数に対してプロパティがあるように、デリゲートに対してイベントがある感じ。
何となく理解し易そうでした。これを手掛かりに色々考えていきます。
>コンストラクタでfor使ってるじゃん。ここでnewしていけば。
おぉ…なぜにそこに気が付かなかったんだろう ガクッ なるほど、助かりました。
>>686-688 ありがとうございます。他にも感謝すべきところはあるのですが、長くなりそうなのでこの辺でお許しを…
すぐ理解することが難しそうなので、何日か掛かるかもしれませんが、じっくり消化しようと思います。
690 :
685 :2005/12/20(火) 23:20:03
すみません
>>686 さんに紹介して頂いたページの最後のほうに
public KeyboardEventLoop() : this(null){} ← こういうのがあるのですが、これが良くわかりません…
一体どういう事でしょうか?
あうう…迂闊 初期化とごっちゃに考えてしまいました。
次のこれ→ this.OnKeyDown += OnKeyDown; で null なのになんでオチないんだろう…とか
C# の msdn も存在したのですね。じっくり目を通さねば…
>>691 ありがとうございました
全く意味がなさそうだな
なるほど 安心しますた
ではこれからは書かないようにしますです
>>694 お早いレスありがとうございました
696 :
695 :2005/12/21(水) 19:42:28
返事が来るかはわからないけど、一応メールを送ってみよう…
だったら聞くなよ。
698 :
デフォルトの名無しさん :2005/12/23(金) 00:01:33
属性についてですが、さっぱりわかりません。 [Conditional("TETETEST")] static void Test() { /* 何かの処理 */ } と #if TETETEST static void Test() { /* 何かの処理 */ } #endif の違いもわからないのがさる事ながら、他サイトで書かれていた 『アタッチする』なんて言葉の特別性(?)もよくわかりません。継承するのと さほど違いが見出せないのですが…初心者びっくり簡単な解説キボソしまっす!
アタッチってのは一般用語だから文脈が無いと分からんな。 ConditionalAttributeは、メソッド定義に影響するんじゃなくてメソッド呼び出しに影響する。 Conditionalで指定されてるシンボルを#defineしてない場合、そのメソッドの"呼び出しが"無かったことになるわけ。 つまり、 static void Main() { #if TETETEST Test(); #endif } と言う風に展開されるわけだな。 決して #if TETETEST static void Test() { ... } #endif と展開されるわけではない。
うーん…#if #endif の嵐でソースが汚れないのはかなりの利点なのかも… アタッチについてですは、管理人の方の許をも得ていないので載せるのは恐縮ですが <a href=
703 :
702 :2005/12/23(金) 01:58:10
×Fuge ○Christmas ミスです。レス消費すみません。 Hage はまずいと思って Fuge に変えたと思ったら Christmas でした。
そりゃ見えないものにアクセスはできまいて。 [Kitty(KittySup.ICHI, str = "なぜやぁああああ")] これは、 KittyAttribute kitty = new KittyAttribute(KittySup.ICHI); kitty.str = "なぜやぁああああ"; という意味になる。 で、strはKittyAttributeクラス内でしか見えないのだから、当然はじかれるわけだ。 こういうことがしたければ、 public KittyAttribute(KittySup sup, string str) { this.sup = sup; this.str = (str == null) ? "Kitty on your lap" : str; } などと複数引数をとるコンストラクタを作るべし。 そうすれば [Kitty(KittySup.ICHI, "なぜやぁああああ")] こんな感じで指定できるようになる。 > また、コマンドライン引数にFuga以外を入れた場合、自分で定義した例外が働いて > くれると思ったのですが、それも動いてくれません。なぜでしょうか? そりゃ誰もUGaaException投げてないし。 try { throw new Exception(); } catch (NullReferenceException ex) { //NullReferenceExceptionはExceptionから派生してるけど Console.WriteLine(ex); } これでcatchされるわけにはいかないだろ。 あと、属性クラスを定義する場合AttributeUsageAttribute属性を付加する。
KittyAttributeの引数supが、定義されている以外のものである可能性も考慮しとけよ。 [Kitty((KittySup)(-1), "SAF")] なんて渡し方もできるんだから。
なるほど、なるほど。あんなに苦労したのに嘘みたいでした。 >> 704 thx! m(_ _)m private でアクセス制限してたから []内がうまく働かなかったのですね 思いもよらなかったです NullReferenceException をオーバーライドというのも少しおかしかったと気付きました。 NullReferenceException はシステムか何かが throw してくれるからうまく働くとのですね AttributeUsageAttribute属性については出直して参ります 有難う御座いました!
>>705 OK! 理解しました。
流し読みされましたね いちおう uint で宣言してるので → [Kitty((KittySup)(unchecked((uint)(-1))), "SAF")]
みたいになりますた。 …というか、class名ひとつ Unko のままでした 申し訳なかったです
>>708 解決しました。
static Authorized atr; で宣言するか、
static 使わないなら Authorized atr = new Authorized(new CallBack(Chaaa));
で良かったのか (;´Д`) ウゥ 自己嫌悪…
お前はコンパイルエラーのメッセージを読めない文盲さんかい?
こんなC++脳に汚染されたコードをC#で書くな
case 文が readonly … 変数であるところが悪いのはわかったのですが CS0208 が… 英語で…
ならヘルプ見ろ キーワードでCS0208引けば出る
715 :
710 :2005/12/24(土) 03:39:59
/\___/ヽ
/ ::::::::::::::::\
. | ,,-‐‐ ‐‐-、 .:::|
| 、_(・)_,: _(・)_, :::| やっと消えたぁああ!
. | ::< .::::|
\ /( [三] )ヽ ::/
/`ー‐--‐‐―´\
class Kitty を struct Kitty に変えたらよかったみたい
CS0213 とかのエラーも出たのですが
>>714 さんの情報よりかろうじて読み解けますた
ヘルプにはエラー情報も載ってたのですね。 クラスの情報ばかりかと思ってました
マネージ型 = 移動可能変数 class に fixed は不可 など等 色々知れてよかったです
ありがとうござました
そのAAの使い方はあっているのかと小一時間
717 :
デフォルトの名無しさん :2005/12/24(土) 14:50:06
>>717 ・ベータのを全てアンインストール
・2.0 再頒布可能パッケージをインストール
・2.0 日本語Language Packをインストール
・2.0 SDKをインストール
Visual Studio 2005 Express Edition入れるって手もある。
その場合はベータアンインストール>VSインストール
その後SDKからMSDNだけインストール
なぜ最初にβのほうからインストールしたのかと。 最初に.NET Framework2.0入ってないとSDKはインストールできねぇぞ。
えぇっと…このサイト(
http://www.microsoft.com/japan/msdn/netframework/downloads/default.aspx )の
・Microsoft .NET Framework 2.0 再頒布可能パッケージ(32ビット版: x86)
・Microsoft .NET Framework 2.0 日本語 Language Pack (32ビット版:x86)
・Microsoft .NET Framework 2.0 SDK 日本語版(32ビット版:x86)
の順番でインストールっ コマンドラインからの命令は csc generics_test.cs とかで合ってますよね
なんでかコンパイル出来ないっす もしかして、Microsoft.NET\Framework\v1.1.4322 が残ってたのが
まずかったのかな… β版の方は消したんだけど、全部アンインストールしてまたやり直しでしょうか? orz
721 :
717 :2005/12/24(土) 16:43:25
パスが通ってないに一票 全てのプログラム>Microsoft .NET Framework SDK v2.0>コマンドプロンプト で開いたプロンプトでやってみな ちなみに.NET Frameworkは別バージョンが入っていても問題ない。 というかバージョンが違うものは別物であると考えた方が良い。
723 :
717 :2005/12/24(土) 16:56:32
>>722 いけた! いけましたです! ありがとうございます!!
なんかめっちゃ嬉しいっす! またインストールし直しかと…。・゚・(ノД`)・゚・。
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
725 :
717 :2005/12/25(日) 00:34:41
interface A<T> { T Read(); } interface B { void Write(); } class Setter : A<T>, B { T Read() {} void Write() {} } いきなり引っ掛かってしまった・・ これをうまく動かしたいのですが、どう記述すれば良いのでしょうか?
>>725 interface を実装するメソッドが public じゃないし
Read メソッドじゃ T を返してないし
コンパイルエラーのメッセージくらい読め
ちょ…え? なんで?? 意味がわからなくなってきました。 interface A<T> { /*public*/ T Read(); } interface B { void Write(); } class Tester : A<int>, B { int hoge; int A<int>.Read() { return hoge; } public void Write() {} }
で、一応コンパイルは通ってくれたのですが、↓のどこがいけないのでしょう? class Tester : A<T>, B { T hoge; int A<T>.Read() { return hoge; } public void Write() {} } sage.cs(29,25): error CS0246: 型または名前空間名 'T' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 とか出るのですけど、A<int> みたいに限定しちゃったら Generics の意味がなくなりませんか それに、名前空間どうのこうののエラーが出て、メソッド名に .(コロン) 付けてみたけど、その時 public 付けてるとなんか↓のようなエラーが出るんっす sage.cs(21,11): error CS0106: 修飾子 'public' がこの項目に対して有効ではありません。 ヘルプもなぜか英語に変わってたし、ゲンナリだす…
class Tester<T> : A<T>, B
>>730 あんれまー(; ゚Д゚)
ありがとうございます。無事いけました。
と、
>>727 はい、出来うる限り努力します
>>726 あっざいました!
こ…これが通りません。ちゃんと実装しているのに get set の実装がないと 言われてしまいます。 /* tes.cs(15,7): error CS0534: 'GenericsIndexer<TYPE>' は継承抽象メンバ 'Jit<TYPE>.this[int].set' を実装しません。 */ abstract class Jit<TYPE> { public abstract TYPE this[int list] { get; set; } // int list ? static void ChackRange(ref int in_val, int c_max, int c_min) { if (in_val > c_max) in_val = c_max; else if (in_val < c_min) in_val = c_min; } } // 次へ
class GenericsIndexer<TYPE> : Jit<TYPE> { TYPE[] index_value; private const int DEF_RANGE = 10; private const int max = DEF_RANGE, min = 0; public GenericsIndexer() : this(DEF_RANGE) { } public GenericsIndexer(int val) { index_value = new TYPE[val]; max = val - 1; } public TYPE this[int list] { get { Jit.ChackRange(ref list, max, c_min); return index_value[list]; } set { Jit.ChackRange(ref list, max, c_min); index_value[list] = value; } } } インデクサを Generics で継承しようと思っているのです。 Main は省略してあります。宜しくお願いします!
override
public override TYPE this[int list] とぉ…
・Jit<TYPE>.ChackRange(ref list, max, min); // c_min がエラー
・static void ChackRange(ref int in_val, int c_max, int c_min) に public をつける
・private readonly int max
だいたいこんな感じで無事終了。期待した動作もしてくれました。
>>734 さんの一言がなければ大変な間違い連鎖を引き起こすところだったと思います。
ありがとうございました
max/minをprotected abstractなプロパティにするとか CheckRangeは非static・protectedでいいんじゃないかとか
>>736 分かり申したです。心に留めておきます
ためになる助言サンクス!
ボクシングとアンボクシングについて疑問にぶち当たっています object box = new Fuge("testest"); Fuge unbox = (Fuge)box; // [1] unbox.str = "muu..."; Console.WriteLine(unbox); // muu... unbox = (Fuge)box; // [2] Console.WriteLine(unbox); // aaa Fuge は struct の値型です。[1]でなぜ new をしていないのか疑問に思いました。 ユーザー定義変換のように内部で new していると考えたのですが、そうすると [2] でも new している事になります となると [1] と [2] では unbox のアドレスが異なるのですか? では [1] で作ったインスタンスが物凄く無駄な気がします 確かめようと System.Console.WriteLine((int)&unbox); のコードを埋め込んでみたのです。 そしたら、 boxing.cs(16,33): error CS0208: マネージ型のアドレスの取得、マネージ型のサイズの取得、またはマネージ型へ のポインタの宣言が実行できません ('Kitty') 上のようなエラーが出てしまって確認のしようがありません。 実際のところをお伺いしたいのですが、よろしければご教示ください
739 :
738 :2005/12/25(日) 18:45:21
ちょっと上の文章ではわかりにくいですね(汗) 自分の見解が正しいのか否かが不安な状態なのです。 『[1]と[2]ではアドレスが異なる』が自分の考えなのですが…
異なるよ。 boxing/unboxingで値のコピーが発生する。 ArrayListに突っ込んだりしたときに問題が表面化したりするな。
>>740 問題に直面できるよう、これからArrayListを沢山使っていこうと思います。
お陰で安心できました。ありがとうございます。
class Hoge { static void Main() { char ch = 'A'; object obj = ch; // boxing 単なるポインタ渡し System.Console.WriteLine((int)obj); } } これを実行すると System.InvalidCastException の例外が発生するのはなぜでしょうか? 明示的な参照変換の際に発生するエラーとの事ですが、object は究極の型で何にでもキャストできそう だと思ったのですが… char から int へのキャストも問題なさそうなのに え、、System.Int32 も System.Object の派生では ないのですか 頭がコンガラガッチャッテマスデス //値型の入ったオブジェクトを、入っているのと異なる値型でキャストしようとすると駄目?
743 :
↑ :2005/12/25(日) 21:22:22
Ouch, やっちまった orz // の行は意味不明なのでスルーでよろしくです
素直に(int)(char)にしる
obj -> int に unboxing しようとしても obj が char だから失敗する ……んじゃないか?
746 :
742 :2005/12/26(月) 00:19:04
char ch = 'A';
object obj = ch;
int i = (int)obj;
(ll゚Д゚)はぁはぁ…
結局これと同じ現象が起こっていたのか…
どこかで、boxing/unboxing には互換性がないと駄目だとかいうのはこういう事だったんですね。
char と int のメンバは異なるものばかりでした。だからコピーしようにも保障されないからエラーになるのか
なぜ
>>744 さんのでエラーが起こらないのか不思議で考えてみたりしました
アンボクシングとは、
『new でインスタンスを生成し、いつでもコピー可能な過程にまで持っていった状態の事を指す』
と覚えておこうと思います
int i = (int) (char)obj // (char)obj の所ですでにアンボクシング済み この場合 'A' に等しい
>>745 さん、ありがとうございます。関数の引数の時でもアンボクシングが起こるのですね。
アドバイスがなければ、今頃大変な事になっていました。
あ…頭がクラクラして…ふぅ。僕にはだいぶ難しい…
つかchar->intは拡大変換だから、 オーバーロードを解決する必要が無い限り暗黙にキャストしてくれるけどな。
>>746 関数の引数のときじゃなくて、
(int)obj
を行った時点で unboxing
質問です。 Textbox.textで日本語を表示させると文字化けしてしまいました。 どうやら読み込んだテキストファイルがAsciiコードだった事が要因のようなのですが、解決法がわかりません・・・ 文字化けを解決する方法がありましたら教えて頂きたいです、よろしくお願いします。
>>749 標準は UTF-8 という文字コードで読み書きされるので、shift-jis 混じりのアスキーファイルを
読み書きしたいなら、文字コードを指定する。
使ってるWindowsの標準の文字コードなら次のように書く。
Dim xxx As StreamReader = New StreamReader("Test.txt", System.Text.Encoding.Default)
>>750 Dimって(笑)、VBのコードで書いてしまったけど代替一緒だからかんべんな
てっきりGotDotNetかドボンあたりにきたかと思ったぜ!
C#で、例えばlbl1に背景の写真、その上にlbl2・3・4に文字を入れてfont設定とかして画面を作った後、 その画面イメージ(lbl1の範囲)を印刷する事って出来ないのでしょうか? グラフィックス使って、imageとかFontとかを描画させれば、それをprintするように設定出来ますが、 lbl使った方が作りやすいのですが・・・。
>>754 それでいってみます。印刷範囲の設定も簡単でうまく出来そうです。
for ループの回し方について質問です。 static void Main() { Type[] t = { typeof(int), typeof(char) }; MemberInfo[][] mi = { t[0].GetMembers(), t[1].GetMembers() }; // ★1 for (int i = 0; i < mi.Length; ++i) { foreach (object tmp in mi[i]) { System.Console.WriteLine(tmp); } System.Console.WriteLine("-----------"); } } ★1の部分はどう記述すべきなのでしょうか? 数が2つだからいいけど、沢山あったら大変ですよね MemberInfo[][] mi = new MemberInfo[t.Length][]; for (int i = 0; i < t.Length; ++i) mi[i] = t[i].GetMembers(); // ★2 こう書けばいいかとも思ったのですが、それでは ★2 の部分の戻り値が new で取られていたはずだから ★1の new が無効になってしまうのは勿体無いと感じるのです。 { t[0].GetMembers(), t[1].GetMembers() } こう記述するしかないでしょうか
new A[3][] としたとき、作られるのは要素数3をもつ一個のA[][]インスタンスであって、A[]が作られることは無い。
string[] a = new string[]{"hoge"}; と string[] a = new string[1]; a[0] = "hoge"; はまったく同じだぜ。
…★1 も ★2 も同じと理解しました
MemberInfo[][] mi = new MemberInfo[2][];
mi[0] = t[0].GetMembers();
mi[1] = t[1].GetMembers(); // ここで領域確保 & 初期化 が行われている…
ふむふむ。MemberInfoが2次元だから1次元目の領域も取られていないとおかしいと見たりしたけど、
よく考えればジャグ配列とかいうのだったんだ
>>757-758 Thank you! ありがとうございました
int id = 10; string str = "abc"; System.Console.WriteLine("{0} それに ", id + " " + str); のように string型 と int型の混合を一行で書きたいのですが、不可能でしょうか System.Console.Write("{0} それに ", id); System.Console.WriteLine(str); と同じ結果になってはくれません(下の方が正しい結果)
{1}を使えよ
"{0} {1} それに", id, str
>>763 ありがとうございます {1} が str の引数に当たっていたということですね
>>764 僕のサンプルが屑だから仕方ないっす
>>765 そのサイト内からまんまコピペ。
↓
int m = 1, n =3;
Console.Write("m = {0}, n = {1}", m, n); // 文字や数値の出力
この出力の仕方はフォーマット出力といって、 {0} とある場所に m の値が、 {1} とある場所に n の値が書き込まれます。例えば上述のサンプルの出力結果は以下のようなものになります。
m = 1, n = 3
767 :
デフォルトの名無しさん :2005/12/27(火) 11:18:57
C#2005でwebにアクセスしてhtmllDocumentでsubmitをクリックしたいのですが、 複数あると上手くいきません。 ググってもヘルプ見てもダメなのですが、いい手ないですか?
768 :
デフォルトの名無しさん :2005/12/27(火) 13:59:00
>>750 しばらく外出しており亀レスになってしまいましたが解決しました。
ありがとうございました!
interface IA { void Write(); } class A<TY> : IA { public void Write() {} public static void Happy<T>() {} } class Gene<T1, T2> where T1 : IA where T2 : T1 where T2 : new() // ← エラー要因 { public void Osyougatu() { A<int>.Happy<int>(); } } class Hoge { static void Main() { Gene<A<int>, A<int>> gn = new Gene<A<int>, A<int>>(); gn.Osyougatu(); } } 型パラメータの制約でセカンダリ制約というのんの後に、コンストラクタは公開していなければ ならない、という制約を続けて記述するすればにはどう良いのでしょうか
770 :
769 :2005/12/28(水) 22:06:02
むがっ・・・意味がわからなかったらスルーでオネガイシマス(汗
>>769 class Gene<T1, T2> where T1 : IA where T2 : T1, new()
Microsoftのガイドラインでは、ジェネリック型パラメータの名前はTプリフィクスをつけた説明的な名前にせよ、と。
>>771 Oh! privateコンストラクタをちゃんと弾いてくれる。感激!
Tプリフィックの件、以後注意します ありがとうございました
あけおめ初投稿。 指定したサイズの中身がないビットマップファイルを生成するにはどうしたらよいのでしょうか?
Bitmapをnewすればいいだろ。 ちょっとは考えろよ。
うは、以下のしても、コンパイルできても何も表示されなくなった。 using System; class Test{ public static void Main(){ Console.WriteLine("test"); } } ネットに散らばってる、Hello, World も壊滅w 凄すぎ。 年末まで、VSC# で色々作れてたのにw とりあえず、Linux で起動しなして試してみよっと。
チラシの裏にでも書いてろ
Windowsアプリケーションになってるとか
起動した子プロセスの標準出力についての質問です。
実行ファイルを子プロセスとして開始し、
標準出力をTextBoxに書き込み、また、別のTextBoxの内容を標準入力に書き込むような、
Cで書いたプログラムの実行テストをするツールを作っているのですが、
int main(){
int num;
printf("数字を入力>");
fflush(stdout);
scanf("%d", &num);
printf("%d*2 = %d", num, num*2);
return 0;
}
このような、対話処理を行うコードをコンパイルしたものを実行させようとすると、
最初の「数字を入力>」が表示されず、標準入力に入力を書き込んでやったときにはじめて「数字を入力」が表示されてしまいます。
プロセスを開始し、標準出力の読み出しを行う処理は
ttp://codezine.jp/a/article.aspx?aid=83 こちらのコードを参考に…というか、結果をテキストボックスに付け足しし、プロセスが終了するまでReadLineメソッドのループを繰り返すようにしている、以外の点はほぼ同じです。
コマンドプロンプトで実行するのと同じように、結果を取得するにはどのようにすればいいか、よろしければご教示ください。
printfで出力されたのに改行が無いからReadLineが終了しない。
781 :
779 :2006/01/03(火) 00:35:16
>>780 ありがとうございます。
Readメソッドを利用するようにしたところ、思ったように動作するようになりました。
実装ミスがあって、別のところに問題が発生してしまいましたがなんとかなりそうです。
本当にありがとうございました。
初心者すぎる質問ですいませんが、 C#のコードで private void button1_Click(object sender, EventArgs e) { } object sender, EventArgs eはなにを意味してるのでしょうか? また、どういう時に使用するのでしょうか?
>>782 senderは、たいていイベントの送信側そのもの
この場合なら(Button)にキャストすればクリックしたボタンが取得できる
EventArgsはイベントにくっついてきた情報がまとめて入ってる。
この場合は特に使い道ないけど、KeyDownとかなからキー情報が入ってるとかいろいろ。
>>783 private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(sender.ToString());
}
こんな感じで取得できました。
ありがとうございました。
Visual C# expressを使ってます。 結果表示用にプロジェクト→ウィンドウズフォームの追加で新しいダイアログ ResultDialogを追加しました。そして、そこにTextBoxを張り付け。 最初からあるForm1で検索結果表示用ダイアログを生成してそこに結果を表示 しようとしてTextBoxのメソッドを呼び出そうとしたら、TextBoxはResultDialogで privateになっていてアクセスできません。対応として。 1)検索するためのデータをクラス外に出して、検索自体をResultDialogでやらせ る。 2)検索結果をResultDialogに送って、そっちで表示させる。 3)検索するためのデータをResultDialogに送ってそっちで検索させる。 4)ResultBox内のTextBoxをpublicにする。 5)その他。 作法としてはどれがいいんでしょうか。
787 :
デフォルトの名無しさん :2006/01/11(水) 14:53:33
現時点では呪文だと思っておけば問題ない。
stringに入ってるパスがファイルかディレクトリかを判別するにはどうしたら いいんでしょうか。
File/DirectoryクラスのExistsで実在チェックするとか。 File.GetAttributesでディレクトリ属性の有無を確認、は存在しない場合のハンドリングが必要だからなー。
>>791 なるほど。ありがとうございました。Existsでやっちゃえばいいのか。
ドロップしてきた物の判別なんで、存在しない場合は考えなくていいとは
思うんですが。
>>792 > ドロップしてきた物の判別なんで、存在しない場合は考えなくていいとは
> 思うんですが。
普通はしないが、できなくは無いからな。
ファイルを削除するタイマーを仕込む ドラッグ開始 タイマー発動でファイル削除 ドロップ
いや、普通にDataObject作れば良いじゃん? DataObject obj = new DataObject(DataFormats.FileDrop, new string[]{"cd:\\hge"}); DoDragDrop(obj, DragDropEffects.Copy);
メーラなんかについてる通知ウィンドウ?(メールが到着した時などに通知するために出す小さなウィンドウ)を作りたいんですが、みなさんどのように実装してますか? 子ウィンドウを予め用意しておいてVisibleをOn/Offでやるのが無難なんでしょうか・・・ 何か変な事言ってたらごめんなさい
>>797 だいたいそんな感じ。
Screenクラスか何かでデスクトップのサイズを取得できるのでそれでその子ウィンドウの位置を合わせて表示。
つか、CodeProjectあたりにそんなコード(Windows Messenger風)があるからそれを見てみたらどうだ。
>>798 ありがとうございます
早速探してみます
メッセの通知なら VB Power Pack があるじゃん
うむ
803 :
801 :2006/01/16(月) 21:57:38
>>802 適当にサーベイしてみた。
導入楽だし色々できるようで面白そうだね。
フォームとマウスイベントについて教えてください。 あるフォームの上にマウスがある間だけ、特定の処理をしたいと思い、 FormのMouseEnterやMouseLeaveイベントを使ったのですが思うような動作になりません。 具体的には、Form1のフォームが見えている所では問題ないのですが、 Form上のTextBoxやButtonの上にマウスを移動した際にMouseLeaveイベントが 発生してしまうようなのです。 Form上に配置したコントロールに関係なく、マウスがForm上にあるか 判定するにはどうすれば良いでしょうか? CursorやSystem.MousePozition?の位置情報を使って試してもみたのですが、 マウスを素早く動かした時などに確実に動かない場合がありまして・・・。
>あるフォームの上にマウスがある間だけ、特定の処理をしたいと思い、 フォームがアクティブな時 フォームの範囲内にカーソルがある時 その両方 のどれかなんだろうけど。 どれ?
>>805 804です。
「フォームがアクティブ かつ そのフォームの範囲内にカーソルがある間」
だけ特定の処理をしたいと考えております。
よろしくお願いします。
>>806 Form.MouseMoveイベントだけで解決する気がするんだが。
ダメならその都度Form.DesktopBoundsやForm.Visible辺りでも使って条件分岐させるとか。
>>807 MouseMoveの場合、フォーム内にカーソルがある時しかイベントが
発生しないようで、「フォーム外」という状態を判断できませんでした。
現在のところ、タイマーを配置して一定時間ごとにカーソルの位置を
取得して意図した動きをさせているのですが、他にスマートな方法は
無いでしょうか?
C#プログラミング参考書で何かオススメ教えてください。 Cはかなり長い間仕事で使ってますが、専用マシンでWindowsプログラム とかは初心者です。C++とかもさわり程度しかやってません。
質問です。 List<T>の指定範囲をComparisonデリゲートでソートしたいんですがいい方法はないでしょうか。 単純な比較なのでIComparerを実装したクラスを作りたくはないのですが。 List.Sort()、Array.Sort() のどのオーバーロードもソート範囲とComparisonを同時に指定できないように ないっています。 これって何か理由があるんでしょうか?
単純な比較ならComparer<T>.Default使うとかな。 ま、無いんだったら仕方あるまい。どうせ数十文字の差だ。
814 :
812 :2006/01/21(土) 07:13:09
>>813 レスどうもです。
単純といってメンバの比較なのでComparer<T>.Defaultは使えないです。
仕方ないので新しいクラス作って比較することにします。
どうもありがとうございました。
#なんか仕様のところどころに手抜きを感じてしまう・・・
List<T>のGetRangeとRemoveRangeとInsert使ったら?
816 :
812 :2006/01/21(土) 17:44:03
>>815 うーんそれだとコピーする必要があるのでオーバーヘッドが
馬鹿にならなそうです。
今回はIComparer<T>を継承する方法にします。
レスどうもありがとうございました。
spy++等でウィンドウのクラス名とか見れますが、VCSexpressで作った自分のアプリの クラス名見たら、なんだかよくわからないながーい名前が付いてました。 これってデフォルトの自動生成名でしょうか。 また、自分で名前付けたい時はどこで設定すればいいんでしょうか。
.NETの場合、ウィンドウクラス名を自分で決めるのは基本的にできない。 色々無茶をすれば不可能ではないけれど。
そうなんですか。残念。
820 :
デフォルトの名無しさん :2006/01/24(火) 22:22:50
やっとクラスの使い方が分かってきた。 頭の中でアルキメデスがエウレカ!と叫んでる気がする。
裸で走り回れ。
822 :
デフォルトの名無しさん :2006/01/25(水) 01:17:44
>>821 よく知ってたなw スルー覚悟の発言だったとのだがw
>>822 小学生の時にぴっぽ君のひみつシリーズで読んだ。
delegate void Hoge(); this.Invoke(new Hoger(hmm)); delegateを使ってみて思ったのですが、呼ぶたび関数から生成するのは コンパイラがなんとかしてくれているのでしょうか? フォームとかにインスタンスを持たせると少し早くなる気もするのですが
インスタンスの生成コストなんざゴミみたいなもんだ
826 :
デフォルトの名無しさん :2006/01/28(土) 13:25:10
起動時にプラグインを読み込むプログラム(統合ツール)を作っているのですが、 プラグインによっては初期処理に結構な時間が掛かってしまいます。 そこで、Eclipseのようにプラグインの読み込み状況をスプラッシュウィンドウの プログレスバー(?)で表示させたいと考えています。 どのようにすれば読み込み状況をバーに反映させられますか?
何がわからんのかわからんけど、 1つ完了するたびにプログレスバーを更新すればいいのでは
828 :
デフォルトの名無しさん :2006/01/28(土) 14:14:30
ありがとうです
passmieみたいに他のプロセスのウィンドウのプロパティ変更とかって どうやるんですか? 全部SendMessage()とかのメッセージでなんとかなるもんなんですか?
ほかにもSetWindowLongとかいろいろある が.NETとは無関係の話だな
>>830 SetWindowLong()って、他プロセスだとそのまま使えないんじゃない?
C#初心者ですが、教えて下さい 構造体のリストを定義してリスト内の 要素を直接変更することは可能でしょうか? 例えば、 struct TestRec { public int i; public string s; } みたいな構造体があって、 TestRec rec; List<TestRec> lst = new List<TestRec>(); rec.i=1; rec.s = "Hoge"; lst.Add(rec); lst[0].i = 100; // こいうことがしたい std::vectorの感覚でやりたいのですが
クラス(参照型)にすれば?
834 :
832 :2006/01/28(土) 17:02:54
>>833 あ、できました
なるほど、値型だから無理だったんですね
ありがとうございました。
ほぉ、Listは値型だと駄目なのか。 なんかうまいことやってくれんのかと思ってたんだが、 そうはいかないのか。
値型の動作を考えれば当然のことじゃんか
ListViewの詳細表示で特定の列の文字列の色だけ変更したいのですが ListView.OwnerDraw = true; DrawSubItem(...) { e.DrawDefault = true; } DrawColumnHeader(...) { e.DrawDefault = true; } ここまでで特定の列の色は変わったんですが ListView.Item[hoge].ForeColorの色を他のSubItemに反映させたいのですが どうすればよいでしょうか?
色かえるだけなら、わざわざオーナードローせずとも それぞれのListViewItem/ListViewSubItemのForeColor変更するだけでいけるはずだが。 まあそれぞれのListViewSubItemのForeColor変更すれ。 ListViewSubItemの派生クラスつくってコンストラクタで設定したりするとちょっと楽だぞ。
>>838 やってみれば分かると思いますが
ListViewSubItemのForeColorを変更しても
ListViewItemのForeColorで描画されてしまいます。
ひょっとしてListViewItem.UseItemStyleForSubItemsを知らないせいかね?>オーナードロー
>>840 そんなプロパティあったんですか・・・orz
ListViewSubItemの各スタイル用プロパティのヘルプにも一々書いてるんだけどなw
>>842 いやー。VS2003からずっとC#やってるんですが初めて知りましたわ・・・
C#勉強中のものです。以下のコードについてどなたか解説お願いします。 Sessionに"PARAM_KEY"というHashtable型の配列を追加して、 その中の"URL_LIST"というキーを削除するコードです。 ここでRemoveSessionParamの中でtableのキーを削除するだけで、 Sessionの中の"PARAM_KEY"の中の"URL_LIST"が削除される理屈が理解できません。 何について勉強すればよいかの手がかりだけでも教えていただけたらとおもいます。 初心者なのでお手柔らかにお願いします。 RemoveSessionParam("URL_LIST"); protected void RemoveSessionParam(string strKey) { Hashtable table = GetParamHash(); if (table.ContainsKey(strKey)) table.Remove(strKey); } protected Hashtable GetParamHash() { Hashtable table = new Hashtable(); Object objPara = Session["PARAM_KEY"]; if (objPara != null) table = (Hashtable)objPara; return table; }
じゃあどういう意図でこのコードを書いたんだと。 んー、「参照型」? インスタンスつまり実体は一つでそれの参照を渡しあってるということなんだが。
>>845 早速のお返事ありがとうございます。
すみません。会社の資産で勉強してたのですが、
これを書いた人がもう会社にいないので、一人で悩んでたところでした。
Hashtable型、Object型は参照型で、
> Hashtable table = GetParamHash();
> Object objPara = Session["PARAM_KEY"];
は参照渡しになっているという理解で間違いないでしょうか?
もしお時間があれば添削よろしくお願いします。
参照型/値型と参照渡し/値渡しは別物だけどな。 この場合は参照型の値渡し。この場合の値ってのはつまり参照の値、平たく言えばアドレスの値だ。 ま、Session["PARAM_KEY"]とobjParaとtableが同じ実体を指しているってことだ。 //GetParamHash呼ぶたびに毎回Hashtableのインスタンスを作るってのはどうなんだろう。 //存在しない場合はnullを返して、呼び出し側でnullチェックってのが自然だと思うんだが……。
848 :
844 :2006/01/29(日) 01:06:31
>>847 たびたびありがとうございます。
> ま、Session["PARAM_KEY"]とobjParaとtableが同じ実体を指しているってことだ。
この一文で、だいぶ明るくなりました。
教えていただいたキーワードを元に勉強してみます。
コメントしていただいている内容について、
Hashtable table = new Hashtable();
を
if (objPara != null)
の後に書けば、Sessionにキーが見つからなかったときに
余計なインスタンスを作成せずに済む・・・ということでよろしいでしょうか?
ついでといっては何ですがこの点についてもお付き合いいただければと思います。
んーとだな。 GetParamHashメソッドは、Session変数の中の"PARAM_KEY"をキーにしたオブジェクトを返すと思われるメソッドだ。 現在の実装では、もし"PARAM_KEY"にオブジェクトがない場合、新しいHashtableのインスタンスを返している。 そのため、このGetParamHashメソッドの呼び出し側、この例ではRemoveSessionParamメソッドは、 このメソッドを呼んだときに必ずHashtableが返ることは保証されているといっていい。 だから直接返ったオブジェクトのContainsKeyメソッドを呼び出している。 がしかし、毎回インスタンスを作るってのはまあメモリとか処理速度とかが犠牲になるわけだ。 //この例ではそれがボトルネックになることはないだろうから、この実装もそれはそれでありだろう。 //Nullオブジェクトパターンに近いかな。 仕様としては、"PARAM_KEY"にオブジェクトがない場合nullを返す、という方が自然だと考えることもある。 GetParamHashがnullを返しうるのなら、呼び出し元(RemoveSessionParam)は返り値がnullかどうかをチェックする必要がある。 もしnullならContainsKeyの呼び出しも当然失敗(例外が発生)するからだ。 この場合上のパターンとは違って呼び出し元が返り値のチェックをしなければならないという制約がかかるが、 代わりにわざわざ無駄なインスタンスを生成する必要がなくなるというメリットがある。 もう一つ重要なのは、最初のパターンでは呼び出し元が返ってきたHashtableが果たして"PARAM_KEY"にあったのか新しく作られたものなのか判断できないことだ。 例えばこの返り値に新しくキーと値を入れて"PARAM_KEY"に「入れたつもり」になってしまう可能性がある。 もちろん、新しく作って返されたHashtableの場合は"PARAM_KEY"とは別インスタンスになるのだから、"PARAM_KEY"には入らない。 ま、 > Hashtable table = new Hashtable(); > を > if (objPara != null) > の後に書けば、Sessionにキーが見つからなかったときに > 余計なインスタンスを作成せずに済む・・・ということでよろしいでしょうか? これは最初のパターンにするにしても妥当な改造だろうね。
850 :
844 :2006/01/29(日) 01:48:15
>>849 こんなに遅い時間に何度も分かりやすく丁寧に解説していただいて、大変感謝しております。
いただいたレスを宝物にして勉強します。
ありがとうございました。
SendMessage(hwnd, WM_SETTEXT, 文字列のサイズ. 文字列のポインタ); を使おうと思ったんですが、string型をどうやって文字列のポインタにしたものか よくわかりません。 Marshalとか使うしかないんですか?
>>851 string ss = "文字列";
IntPtr lpsz = Marshal.StringToHGlobalAnsi(ss);
SendMessage(hWnd, WM_SETTEXT, 0, (uint)lpsz);
でいけた
853 :
デフォルトの名無しさん :2006/01/29(日) 14:55:18
C#でDIBを扱いたいんですが超単純なサンプルはありますか? もしくは参考になるサイトなどなんでも
>>852 サンクス。試してみます。.NETなんですが、これってセキュリティーパーミッション
いじくらないと使えないっすよね。やったことないんで、ちょっち調べてみます。
あ、 Marshal.StringToHGlobalAnsi(ss).ToPointer() とかにしなければオッケーだった。 サンクスです。ネットで検索しても例が殆どないんで、めっちゃ悩んでた。
Marshal.FreeHGlobalを忘れるなよ。
ありがと。忘れてた。というか、最初はつけてたんだけど、いろいろテストしてる 間に削ってた。 _| ̄|○
858 :
デフォルトの名無しさん :2006/01/29(日) 22:41:35
IntPtr hBitmap = bm.GetHbitmap(); この後ってDeleteObjectは必須なのでしょうか?
タスクマネージャでリークしてるかどうか監視してみれば?
>>859 リークしてなきゃ今後もリークしない保障がありますか?
>>858 GDI ビットマップ オブジェクトが使用するメモリを解放するために、DeleteObject を呼び出す必要があります。
とMSDNに書いてあるが。
おまえはMSDNに書いてあることを全て鵜呑みにする気なのか! MSDNに氏ねと書いてあったら潔く氏ぬのか! ……って一瞬思っちゃったゴメンorz
863 :
デフォルトの名無しさん :2006/01/30(月) 08:31:16
>>858 やってみりゃわかる。
DeleteObjectしないと物凄いメモリリークを起こすぞ。
なんでDeleteObjectは標準で用意されていないんですか?
そんなもんがあったらC#を使う意味が薄れる
けど実際になくて困ってる人がいますよね
DeleteObjectを使うようなコードを書く人はDeleteObjectを知っている。 DeleteObjectを知らない人はDeleteObjectを使うようなコードを書いてはならない。
MSNMessengerのオン/オフの状態を 表示してるツリービューみたいなコンポーネントないですかね? 自分で作れるんなら作りますが如何せん どこをどうすればいいのか分からないので・・・ TreeNodeを継承したコントロール作って カスタム描画→ツリービューへぶち込みでいけますか?
よくわからんが、ノードの文字列の左にイメージを表示したいってこと? それならTreeView.ImageListとTreeNode.ImageIndexでいけるけど。
>>870 イメージではなくテキストを2行表示したいんです。
ならオーナードローだね。 2.0ならDrawModeプロパティで簡単にできるけど、1.0/1.1だとめんどくさそうだな。
BitmapDataってどうやれば使えるようになりますか?
Bitmap.LockBitsする 使い終わったらBitmap.UnlockBits
BitmapData使えたけどなぜかSetPixelのほうが早い 使い方間違ってる気がする 誰か使い方教えてください
どう使ってるかも分からんのに。 大体サンプルならちょっと検索すれば出てくるだろ。
>>876 int i, j, ofs, bw;
byte r, g, b;
bmp = new Bitmap(256, 256, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
BitmapData BD;
BD = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
bP = BD.Scan0;
r = 20;
g = 40;
b = 60;
bw = BD.Stride / BD.Width;
for (i = 0; i < bmp.Width; i++)
{
for (j = 0; j < bmp.Height; j++)
{
ofs = BD.Stride * i + j * bw;
Marshal.WriteByte(bP, ofs + 0, b);
Marshal.WriteByte(bP, ofs + 1, g);
Marshal.WriteByte(bP, ofs + 2, r);
}
}
bmp.UnlockBits(BD);
pea.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
大体こんな感じ。どっかのサイトをほぼそのままパクったんですけど。
そのままコピペしただけでも全ピクセルにSetPixelするより6〜8倍早かったが。 まるでCみたいなコードだなしかし。 4バイト境界考慮して無かったりと微妙。
>>878 >まるでCみたいなコードだなしかし。
すいません。もともとVBソースを即興で変換しただけなんで。
>そのままコピペしただけでも全ピクセルにSetPixelするより6〜8倍早かったが。
おかしいな。何秒くらい表示にかかります?
上のソースで5秒くらい。SetPixelで4秒くらいなんですけど。うちの環境で。
256x256でSetPixelで200ms、LockBitsしたら35ms程度だな。 1000x1000だと3000ms/520ms程度。
すいません、ようやくわかりました。 VC#から実行してちゃだめなんですね。 出来上がった実行ファイルを起動したらちゃんと行きました。
イベントに対する動作じゃなくて、たとえば常に何かをポーリングしたい時とか、 どういう風に書くもんなんですか?
どういう風にといわれても。 ループ回せば良いんじゃね? 抽象的過ぎると答えづらい。
すまんす。 つまり、メインループは大本ダイアログ起動して行きっぱなしだし、大本ダイアログは イニシャライズが終わったらイベント待ちで、要はアイドルループはどこでやってる んだろうかと。
ちなみに、VCSexpressです。
アイドルループ? メッセージループがどう実装されているかってこと? ループの中で呼び出すGetMessage関数がメッセージが来るまで待機するんだけど。
そのメッセージループが隠蔽されてて、表に出てないんですよ。 static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } メインはこんなんで、ループしてるとこがどこにもなくて。
Application.Run() のなかにある。Application には Idle イベントがあるはず。
>>889 これ使えるのかどうかわかんないんですが、解説ではアプリの処理が完了した時に
呼ばれるとだけあって、ポーリングには使えなさそうだったんで。
あと、これ使うとしたらデリゲートで呼び出してもらうんですか?
そう。ポーリングはタイマにしたら。
タイマで起動するのが一番よさげですね。 まあ、タイマセットして定期的に呼び出してもらう方法もわかんないんですが、 タイマ関係はまだ全然見てないんでもう少しいろいろ調べてみます。
Application.Run(new Form1()); の代わりに Form1 form = new Form1(); form.Show(); ってして止まらないようにして、メインループ作ってる人がいたな。
連続スマソ……って言わなきゃ分かんないのか。 これだ↓。 static void Main() { Form1 form = new Form1(); form.Show(); while (form.Created) { // フレーム処理 Application.DoEvents(); } } これにどんな副作用があるのかは分からない。
Main に Application.Run を複数書いたらそこらじゅうでおかしな動作をしたことならあった
おもいっきり自動生成コードの部分だしねー。
NotifyIconのShowBalloonTipについてですが MSDNには最小タイムアウトは10秒とか書いてあるんですが それより短くしたい(意図的に閉じたい)場合はどうすればいいでしょうか?
Application.Runの前に「ログインフォームを出したい」とか言って 別なフォームをShowDialogとかしてるのをよく見る。これはいいとおもう? 俺的にはメインフォームがアイドルになった時点で出すものだと思うんだけど。
いいと思うよ。
JRはC#で.ネット環境で開発してるんですか?
いきなりソースのないこと言われても困る
902 :
デフォルトの名無しさん :2006/02/15(水) 21:17:51
int[] test = new int[3]; test[0] = 11; test[1] = 13; test[2] = 15; Console.WriteLine("{0}", test[0]); int* a; a = (int*)test[0]; a = a + 1; 上のプログラムで結果が 11 15 となるのは、そんなもんなのでしょうか? Console.WriteLine("{0}", (int)a);
903 :
修正 :2006/02/15(水) 21:18:39
int[] test = new int[3]; test[0] = 11; test[1] = 13; test[2] = 15; Console.WriteLine("{0}", test[0]); int* a; a = (int*)test[0]; a = a + 1; Console.WriteLine("{0}", (int)a); 上のプログラムで結果が 11 15 となるのは、そんなもんなのでしょうか?
なんの意味がある計算なのかさっぱり分からんが。 11バイト目からInt32一つ分先に進めれば15バイト目になるのは当然だな。
>>903 初めて見たんですけど「int*」これって何ですか?
906 :
903 :2006/02/15(水) 21:42:05
aに1足したら13になると思ってたんですけど 何か思い違いしてるなぁ 誰か指摘して
君が期待しているのはこういう事なんだろうな。 int[] test = {11, 13, 15}; fixed (int* a = test) { Console.WriteLine("{0}", *(a + 1)); } ・.NETの配列をポインタにするには fixed ステートメントを使わないといけない ・ポインタが指す値を取得するのには * 演算子が必要。 ・このサンプルで a は変更不可なので、どうしてもこの値を変更したいのなら別ポインタにコピーする。
908 :
903 :2006/02/15(水) 21:49:00
ものすごく感謝です!! 一生下僕と呼んでください
試してみたが面白いな。 a = a + 2; にしたら19 a = a + 3; にしたら23 long* a; にしたら8ずつ増える。 バイト数がそのままtest[0]の中の値に足されてた。
つか、C#でポインタは使わない方がいいだろ。 少なくとも初心者のうちは。 C++ならいいけど。
911 :
デフォルトの名無しさん :2006/02/15(水) 23:10:49
今からC#の勉強をはじめたいのですが 1.1と2.0どっちからはじめたほうがいいでしょうか? 2.0をダウンロードして本屋にいってみるとまだ売ってないみたいなんです 新しいほうがいい気もするし本を買うのだったらバージョンを合わせたほうがいい気もするし 迷っています 先輩方のアドバイスよろしくおねがいしますm(_ _)m
画像を扱うようなクラスを作成するとき widthやheightはintとuintとどちらを使うべきですか? 気分的にはuint何ですけどいろんなサイトや本では intが使用されているのであわせるべきかなぁと思ったり。
uint(UInt32)はCLS非準拠なので、他の言語から扱えない可能性がある。 .NETにおいては問題なかろうけど。
915 :
911 :2006/02/15(水) 23:31:44
>>912 ありがとうございます
思い切って2.0からはじめようと思います
しかし、それってC#のバージョンじゃなくて.NETframeworkのバージョンだろ。 2.0のがいいのはおれも同じくだけど。
.NET2.0の正規表現の質問です。 正規表現で、ある文字(日本語)の前までを抽出する方法はありますか? Matchメソッドを2回使わないとだめでしょうか? 例えば、入力文字列の中で「12,345円」という形式の文字列を抽出したいときは Regex reg = new Regex(@"[,0-9]+円"); とすれば、数字(金額)の部分だけ抽出できますが、「円」を抜いた 数字だけを一発で抽出したいのです。 円ではなく、英数字のaの場合、Regex reg = new Regex(@"[,0-9]+[^a]"); とすればいいのですが、日本語の場合それもできません。 どのようにすればスマートに処理できますか?よろしくお願いします。
・グループ化 Regex regex = new Regex("([,0-9]+)円"); Console.WriteLine(regex.Match("12,345円").Groups[1].Value); ・名前付きグループ化 Regex regex = new Regex("(?<price>[,0-9]+)円"); Console.WriteLine(regex.Match("12,345円").Groups["price"].Value); ・ゼロ幅先読みアサーション Regex regex = new Regex("[,0-9]+(?=円)"); Console.WriteLine(regex.Match("12,345円").Value);
>>917 > 円ではなく、英数字のaの場合、Regex reg = new Regex(@"[,0-9]+[^a]");
> とすればいいのですが、日本語の場合それもできません。
いや、すれば良いんだが。
>>918-919 ありがとうございます
>>918 ありがとうございます!しかも3つも
目から鱗ですた
>>919 Regex reg = new Regex(@"[,0-9]+[^円]");
を試してみたらぜんぜんだめぽかったので、[^ ]の中は
日本語NGと思いこみましたがいけるケースもあるんですか。難しい。。
>>920 そもそも金額を示す部分の数字を抜き出したいってことなら、
Regex(@"[,0-9]+[^円]");
ではダメだろ。これだと"12,345円"を数字から全て弾いてしまう。
数字 + 円以外の一文字部分って意味になる。
>>921 > これだと"12,345円"を数字から全て弾いてしまう。
の意味が良く分からんが、
Console.WriteLine(Regex.Match("これは12,345ドル", @"[,0-9]+[^円]"));
だと「12,345ド」がマッチしちゃうからダメよんってことが言いたいのか?
923 :
921 :2006/02/16(木) 11:31:20
>>922 「タマゴは1パック120円です」
を [,0-9]+[^円] でマッチさせた場合、
「1パ」はヒットするが肝心の「120円」はヒットしないよ。
ってことです。「円」だけ取り除いた「120」が欲しいって
ことだったんでしょ。
924 :
921 :2006/02/16(木) 11:36:27
補足。
答えは
>>918 氏のところででている。俺は、
>>920 > 日本語NGと思いこみましたがいけるケースもあるんですか。難しい。。
のところ、そもそも正規表現が間違ってんじゃんっていいたかったわけ。
>>923-924 正規表現が間違ってるのは確かにその通りなんだが、
120円の120にはヒットするでしょ。「0」は「円」じゃないから。
1円の1にはヒットしないけど。
926 :
921 :2006/02/16(木) 12:45:26
モヤシは1袋10円です
(産地:中国)
929 :
デフォルトの名無しさん :2006/02/16(木) 17:42:43
質問なんですが、 どの程度実力が付けばここでタメ口で質問してよくなるでしょうか?
MVPでも質問するときは敬語使うと思いますよ。
相手を敬って語る。 コミュニケーションの基本でしょ。
932 :
デフォルトの名無しさん :2006/02/16(木) 21:05:03
皆さんは自クラスのフィールド、プロパティ、メソッドを呼び出すときに 頭に「this.」をつけますか? うちのプロジェクトではつけるのを強制されてます・・・
俺もつけるな。 インテリセンス効くし。
必ず this よ
936 :
932 :2006/02/16(木) 21:40:37
>>933 リンク先でもつける派が多いですね。
分かりやすい、バグが入りにくいのはその通りだと思うのですが、
見づらいんだよな・・・
メソッドが長いとメリットのほうが大きいと思うけど、
昨今のメソッド短めコーディングだとメリット小さいと思う。
けど少数派か。。。
俺の場合、C++ でも this-> とするのが習慣になってる。 グローバルは :hoge で。インテリセンス目的もあるが、何処に 所属するのか分かると、メンテナンスもし易いと思う。 フィールドをやっぱアクセサにするか、という時など特に。
静的メンバにアクセスするときもクラス姪を必ずつけるぜ
継承元クラスのメンバを使うときには付けてます。 自身のクラスで作ったものには付けてないですね。
すみません プロパティっていう機能は何の利点があるんですか? メンバー変数をpublicと宣言するのとどう違うのですか
エラーチェックとかができる
読み取り専用にできる
メンバ変数にアクセスするより、高度なことがで set get でできる。 実際メンバ変数に直接関係ないプロパティーも多い。
WMPをフォームに貼り付けるとショートカットキー(たとえばCtrl+P)が WMPに取られてしまうのですが、ContextStripへ渡す方法はないでしょうか? WMPのKeyPressイベントにそれなりの処理を書いても F9などのキーでは反応してくれませんでした。
>>944 ActiveXが絡むとややこしいな。
Form1(1かどうかは知らんけど)にIMessageFilterを実装して、
Form1のコンストラクタでApplication.AddMessageFilter(this)。
PreFilterMessageでは、m.Msgが0x100から0x108まで(だと思う)の時にthis.WndProc(ref m)してtrueを返す。
それ以外の場合はfalseを返す。
という乱暴なのはどうだ。
stviewコントロールで、各項目の高さの変更は どうすればいいのでしょうか? Heightプロパティがなくて困っています
無理 DataGridViewでも使え
>>945 詳しいことはよく分かりませんが、とりあえずやってみます。
>>946 DetailモードだとStateImageListにImageList設定して
そのImageListのHeight変更すればいけたような・・・
自作クラスのインスタンス破棄の方法はどの様にするのですか? using( ){ }で、自動的にdispose()したいと考えているのですが・・・ どなたか教えてください。m(・ω・`m)
まず「インスタンス破棄」の指す意味を聞こうか。
IDisposableを実装 外部とやりとりするようなクラスの他は大抵GCに任せとけばいいけど
実装ってこう? public class myClass : IDisposable でも、 インターフェイス メンバ 'System.IDisposable.Dispose()' を実装しません。 と、怒られた... (´_`ヽ)
インターフェイスについてヘルプを熟読しる
>>953 >インターフェイス メンバ 'System.IDisposable.Dispose()' を実装しません。
Dispose()を実装すればいいんでない?
と勘で言ってみるどうか?
>>945 PreFilterMessageでWM_KEYDOWNからWM_KEYLASTまでを
判別して WndProc(ref m) するようなコードは書いたんですが
いまいち WndProc(ref m) の意味が分かりません。
WndProc(ref m) しても、ショートカットキーが効かない・・・
どっかを取り違えてるんだろうけど・・・
実装って、これでいいの? public class myClass : IDisposable { public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } }
一般的にはそう実装するな。
>>956 ごめん、ContextMenuStripで試してなかった。
WndProcじゃなくてPreProcessMessageの方を呼ばないと駄目だな。
>>959 できました。ありがとうございます。
しかしこの辺異常に複雑になってますね・・・
961 :
デフォルトの名無しさん :2006/02/19(日) 22:48:41
Form1にForm2を開くボタンと、Form2のテキストに記入された受信ボタンがあった、 場合に、受信ボタンを押して、データを受信する時に、行が多い場合スクロール アウトしてしまうのですが、最後に受信した文字列が見えるようにしたいのですが、 どのようにすればよいでしょうか? --- Form1 --- public partial class Form1 : Form { Form2 f2 = new Form2(); private void button1_Click(object sender, EventArgs e) { f2.Show(); } private void button2_Click(object sender, EventArgs e) { this.richTextBox1.Text = f2.Date; } } --- Form2 --- public string Date { get { return richTextBox1.Text; } }
ScrollToCaret
963 :
961 :2006/02/19(日) 23:08:56
DataGridViewでセルの値の取得、プログラムからの更新方法がわかりません。
>>964 SDKのADO.net(system.data)あたりを読むべし
質問する前に少しは調べなよ
967 :
デフォルトの名無しさん :2006/02/22(水) 22:59:54
C#+DirectXでVC++並みのゲームを作成できますか?
お前には無理
columnが2つ、rowが10ぐらいあるデータを表示専用で表形式にしたいのですが、 このような少数のデータの場合、DataGridViewかListViewのどちらを使用したら良いでしょうか? ちなみに定期的に値を変更する必要があります。 実行速度(少数データなので大して変わらないと思いますが…)、メモリの使用具合、 プログラム的難度の観点から見て、アドバイスお願いします。
ListViewでいいんじゃね
>>969 メモリの使用具合は、わからんです。
難度はかわらんです。
ただ、ListViewはソート機能を使いたい場合、ああだこうだです。
なんでもかんでもDataGridViewにしとけば問題なし
とりあえずListViewにして問題ない 編集処理やDataSet系使うときだけDataGridView
複数列リストビューって無いんですね。 いろんなアプリで使われてるコンポーネントなのに(´・ω・)
複数列リストビューに該当するページが見つかりませんでした。
listview.View を Detail にすればいいんじゃないかと憶測で言ってみる
977 :
974 :2006/02/25(土) 08:51:45
あ、リストビューがそれやったんか。失敬。なんなんなんだ俺は。
int*をint[]に変換する方法を教えてください
980 :
デフォルトの名無しさん :2006/02/26(日) 16:36:55
というか、可能ですか?
Marshal.Copy でコピーならできるが。
>>981 えっと、どゆこと?
Marshal.Copy←この関数でint*をint[]にできるってこと?
とりあえず調べてみます。
>>982 int*の値をint[]にコピーすることができました
ありがとうございます。
ついでに質問ですが、この関数は
int*→int[]
int[]→int*
だけですか?
int*→int*をするには
int*→int[]→int*
の2段階が必要ですか?
そう。 それがいやなら CopyMemory を DllImport 。
985 :
デフォルトの名無しさん :2006/02/26(日) 23:28:08
すみません、ひとつ質問があります。 public int this[int, x,int y,int z] と public int* this[int, x,int y,int z] は同じクラス内では宣言できないのでしょうか。
C# 使っててポインタを他から見える作りにするな。
ポインタじゃなくても同じパラメータで違う型を返すインデクサは定義できない。
ポインタ使わなきゃいけないならC#はツライだけだよ。 おとなしくC++使ってた方がいい。
>>988 それも程度によると思うけどw
ポインタごりごり弄るならC++のがいいのは確かだね
990 :
デフォルトの名無しさん :2006/02/27(月) 14:28:01
今日からCを覚えようとする中学生ですが 何かお勧めのエディタや参考書などありませんか?
C言語ならスレ違い
Visual C# のインストール中に インストールコンポーネントを読み込んでいます。この処理には1〜2分かかる可能性があります。 って表示されたまま永久放置なんだけど、なんで? 常駐ソフトもサービスも全部切っても先に進まないんだけど・・
何かは分からないけど、良くあるパターンで何かのサービス切ってるんじゃないの?
995 :
994 :2006/02/27(月) 18:44:05
ありゃ書き込みあったのね
>>993 いろいろ構成変えて試してみますわー
どうもでした
996 :
993 :2006/02/27(月) 19:14:49
ふと思い出したけど、起動時に一時ファイルを消すソフトと(CCleaner)か入れてない?
997 :
デフォルトの名無しさん :2006/02/27(月) 22:35:05
>>984 半日がんばりましたがよく分かりません
使い方を教えてください(使うかどうかは別にして、今後の参考に)
998 :
デフォルトの名無しさん :2006/02/27(月) 23:18:07
>>997 今うまくいきました。
ご迷惑おかけしました。
新スレはないんですか?
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。