09/01/20 21:47:33
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
2:デフォルトの名無しさん
09/01/20 21:57:46
C#, C♯, C#相談室 Part50
スレリンク(tech板)
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
スレリンク(tech板)
初心者のためのプログラミング言語ガイド Part13
スレリンク(tech板)
3:デフォルトの名無しさん
09/01/20 22:00:22
参考サイト。まずはここで検索してから。
URLリンク(www.google.co.jp)
URLリンク(msdn.microsoft.com)
URLリンク(homepage3.nifty.com)
URLリンク(www.atmarkit.co.jp)
URLリンク(dobon.net)
URLリンク(jeanne.wankuma.com)
URLリンク(www.labasp.net)
前スレ
ふらっとC#,C♯,C#(初心者用) Part35
スレリンク(tech板)
4:デフォルトの名無しさん
09/01/20 22:59:45
ComImportを使って自作のDLLを読み込むのってどうやるの?
5:デフォルトの名無しさん
09/01/20 23:11:00
リモートのファイルサイズ取得方法について質問です
HttpWebResponse.ContentLengthでContent-Lengthヘッダ情報を取得できますが
Content-Lengthが設定されていない場合にリモートファイルサイズをHTTPで取得する方法はありますか?
フリーのダウンローダー(Irvine等)などはHTTPでファイルサイズを取得してるようなのですが
解決方法をご存知の方お願いします。
6:デフォルトの名無しさん
09/01/20 23:19:35
>>4
その自作のDLLとやらはどうやって作った何者?
>>5
HTTPだと一般的なのはContent-Lengthしかないよ
IrvineもContent-Lengthが存在しない場合サイズは0って表示してるだろ
7:デフォルトの名無しさん
09/01/20 23:27:36
bandObjectを使ってタスクバーに表示するツールバーを作成しました。
しかしcodeprojectのコードのままでは表示/非表示状態を記憶してくれません。
ログオンする度に毎度毎度タスクバーを右クリックして、
ツールバーを表示させなければいけません。
これをなんとかしたいです。
URLリンク(blog.mutantbunny.com)
URLリンク(www.eggheadcafe.com)
このへんを見るとIPersistStreamというのを使って状態を保存しなければならないみたいですが、
LoadやSaveがいつ呼ばれているのかさっぱりわかりません。
どなたか、教えて下さい・・・
8:4
09/01/20 23:51:27
>>6
Visual C++で、WindowsSDKのSampVidサンプルを改造して作った
DirectShowのレンダラーフィルタ
2つか3つぐらいメソッドが追加されている。そのメソッドも使いたい。
ComImportではGUIDを指定するみたいだけど、DLLの名前
指定してもいないのにどうやってDLLに定義してあるGUIDがわかるの??
その辺りがちんぷんかんぷん。
9:デフォルトの名無しさん
09/01/20 23:54:23
C++/CLIで作ればいいのに
10:デフォルトの名無しさん
09/01/20 23:58:02
そもそもCOMの仕組みをわかってないんじゃないか。
11:デフォルトの名無しさん
09/01/21 00:01:55
>>8
ComImport は印みたいなものであまり意味はないよ。
基本としてとりあえず2つ。
まずインターフェイスはこんな感じ
[ComImport]
[Guid("IID をここに")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
// ↑DirectShow らしいのでたぶんこう。違ったら変えて
interface IHoge {
// ヘッダ見て「同じ順番で」メソッドを並べる
// IUnknown メンバは必要なし
[PreserveSig] // ←戻り HRESULT がほしいときはこれを付ける。
// エラー時例外でいいならいらない
HRESULT Foo();
}
で、生成のコクラス
[ComImport]
[Guid("CLSID をここに")]
[CoClass]
class Hoge {}
これでこうやって使う。
IHoge hoge = (IHoge)new Hoge();
後は適当にスレッドモデルに気をつけて
12:デフォルトの名無しさん
09/01/21 00:02:22
>>8
そのDLLがCOMとして公開されてなきゃ使えないよ?
13:7
09/01/21 00:07:00
URLリンク(secure.codeproject.com)
こちらで解決してました。
14:デフォルトの名無しさん
09/01/21 00:30:03
データアダプターについて質問です。
データアダプターの使い方がわかりません。普通にSQLを記述するのと違うのでしょうか?
15:デフォルトの名無しさん
09/01/21 12:29:13
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
16:デフォルトの名無しさん
09/01/21 17:12:18
2008ExpressEditionSP1
ヘルプの一部が中国語になっているんですけどこれは直りませんか?
自分が確認できている範囲では以下の部分だけです
開発ツールと開発言語→Visual Studio→Visual C#→C# プログラミング ガイドの下の
「コレクション クラス」と「ファイル システムとレジストリ」の間にある項目です
ヘルプの左側のツリー表示してる目次部分と右側のタイトル部分が中国語になっています
17:デフォルトの名無しさん
09/01/21 17:16:05
前スレで既出
18:デフォルトの名無しさん
09/01/21 22:43:33
C#の質問なんですが、button2を押したときにpictureboxに描画するようにしたいのですがやりかたがよくわかりません。googleなどでも調べてみましたが、検索ワードが悪いのか思っていたようなものが引っかかりませんでした。超初心者ですいませんがお願いします。
19:デフォルトの名無しさん
09/01/21 22:53:48
//コンストラクタかどこかに追加
this.Button2.Click += new System.EventHandler(Button2_Click);
//メソッドを追加
private void Button2_Click(System.Object sender, System.EventArgs e)
{
//pictureboxに描画するコード
}
20:デフォルトの名無しさん
09/01/21 22:55:48
そして再描画で消えますって返ってくると
21:デフォルトの名無しさん
09/01/21 23:04:21
>>19ありがとうございます。
>>20はどういう意味なんでしょうか?
22:デフォルトの名無しさん
09/01/21 23:06:21
いいから先ずはやってみなされ
23:デフォルトの名無しさん
09/01/21 23:14:04
おい! 俺こそは超絶C#プログラマーだ!!っていうやつ出て来い!
俺とメールでソース交換して、どっちがすげえか白黒つけようじゃねえか!
24:デフォルトの名無しさん
09/01/21 23:16:28
いいよ。じゃ、まずお前から送れ。
25:デフォルトの名無しさん
09/01/21 23:19:26
>>23
うpすればいいじゃん
俺よりすごそうだったらちゃんとすごいって認めてやるから
正当な評価をする事を保証するよ
26:デフォルトの名無しさん
09/01/21 23:41:11
/ PictureBoxに直接描画することはできないので、
// コンストラクタかどこかでPictureBox.Imageに適当なImageオブジェクトをセットしておき、
pictureBox1.Image = new Bitmap(400, 400, PixelFormat.Format32bppArgb);
// イベントハンドラで、PictureBox.Imageに描画を行う
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
}
27:26
09/01/21 23:42:35
すまん、途中で書き込んでしまった。
// PictureBoxに直接描画することはできないので、
// コンストラクタかどこかでPictureBox.Imageに適当なImageオブジェクトをセットしておき、
pictureBox1.Image = new Bitmap(400, 400, PixelFormat.Format32bppArgb);
// イベントハンドラで、PictureBox.Imageに対して描画を行う
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
// ここで描画
}
pictureBox1.Invalidate();
28:デフォルトの名無しさん
09/01/22 00:12:56
揚げ足とるようでなんだが、
>// PictureBoxに直接描画することはできないので、
これは違うというかミスリード過ぎだろう。
描画できないんじゃなくて描画した画像を保持できないだけ。
29:デフォルトの名無しさん
09/01/22 01:32:29
ド初心者です。
はずかしい質問です。
オライリーとかを買ってきて勉強してるんだけど、純粋に言語の話ばかりで
初心者なのに、いきなりここまで必要かなあと思うんだけど。
C#を使う場合って、ほとんど、VisualStudio上じゃないの?だったら「VSの使い方」っていう
コンセプトの本が普通だと思うんだけど、そうでもないの?
自動生成されるコードもたくさんあるのに、初心者のうちからそういう仕組みをまったく度外視して
純粋に言語仕様の本を「初めてのC#」として売ってるから怖いんだけど。
そこそこ使う人はIDEに依存しないで使ってるんですか?
初心者にもIDEの使い方より言語そのものの仕様の方が重要だというのは常識なの?
30:デフォルトの名無しさん
09/01/22 01:37:15
>>29
C# がはじめての人対象であってプログラミング初心者対象ではないんだろ。
VS の使い方を目的にした本はいくらでもあるのにそういう本を選ばなかったのが悪いんだろ。
オライリーなんて初心者から見ていかにも難しそうなのによく買ったな。
31:デフォルトの名無しさん
09/01/22 01:51:16
>>30
べつに理解できないわけじゃないし
内容じたいは全然難しくないんだけど、
これをすぐに応用する機会ってあるのかなあ、
というのが疑問で。。
32:デフォルトの名無しさん
09/01/22 01:52:50
www
33:デフォルトの名無しさん
09/01/22 02:06:40
VSというよりそもそもWinに縛られてるような……
34:デフォルトの名無しさん
09/01/22 03:33:57
>>29
オライリーの初心者向けは「プログラミングC#」だが
35:デフォルトの名無しさん
09/01/22 03:55:30
>>31
URLリンク(www.amazon.co.jp)
目次見る限り、基礎の基礎しか書いてないんだから応用する機会しかないような気がするが
URLリンク(www.amazon.co.jp)
はじめからこういうの買えば良かったのにチョイス間違えただけだと思われる
36:デフォルトの名無しさん
09/01/22 04:51:09
ToString("むしろ、言語仕様のみに限定する事である程度慣れてからも手に取りやすくしてるんじゃ中廊下");
37:デフォルトの名無しさん
09/01/22 04:53:47
質問です。VS2008EEです。
UTF8エンコードのbyte列を文字列に変換し、string型変数(var1)に代入しました。
その文字列はXMLのデータです。これをXmlLoadし、UN要素のN0属性の値を取得したいのですが、できませんでした。
しかし、var1をTextBoxに表示させ、そのTextBox.TextをXmlLoadすると、値を取得できました。
何故このようになるかがわかりません。また、どのようにすればTextBoxを介さずに解決するのでしょうか。
var1 = Encoding.UTF8.GetString(mStream.ToArray());
XmlDocument doc = new XmlDocument();
doc.LoadXml(var1);
XmlElement root = doc.DocumentElement;
XmlNodeList nodelist = root.GetElementsByTagName("UN");
XmlElement UN = (XmlElement)nodelist.Item(0);
textBox2.Text = UN.GetAttribute("N0");
↑がうまくいかないパターンで、
途中に(たとえば1行目直後)textBox1.Text = var1;を挟み、doc.LoadXml(textBo1.Text)とすると値を取得できました。
38:デフォルトの名無しさん
09/01/22 06:58:57
>>37
doc.Load(var1) か
doc.Load(mStream); でどう?
39:37
09/01/22 07:21:07
>>38
レスありがとうございます。
Loadメソッドは
XmlDocument.Load(string filename)
なので、やはり使うのはLoadXmlメソッドだと考えています
今回の場合、XMLデータがgzipで圧縮されているファイルがあり、その中身を見るプログラムを書いています。
なので、ファイルを一度gzip解凍してからXMLとして読み込まないといけないので、ファイルの直接指定ができないのです。
40:デフォルトの名無しさん
09/01/22 07:23:35
zipならともかくgzipならGZipStreamで十分だが
Load(Stream)もあるだろ
というかうまくいかないってのは実行できるけどどこかでnullが返るのか
例外が出るのか出るのならどんな例外がどこで出るのか
41:プログラム歴2週間
09/01/22 12:25:09
①キャンセルボタンを押す
②ダイアログを出力して確認 OKかキャンセル
③キャンセルなら本処理終了 OKなら引数を渡して画面遷移する
プログラムを書きたいのですが、わかりません。よろしくお願いします。
42:デフォルトの名無しさん
09/01/22 12:28:56
何が分からないのかが分からない
43:デフォルトの名無しさん
09/01/22 12:29:51
>>42
いや自己紹介だよ。
>>41
こちらこそよろしくお願いします。
44:プログラム歴2週間
09/01/22 12:39:49
むしろわかっているのが
protected void ButtonCancel_Click(object sender, EventArgs e) //キャンセルボタン押すとき
{
Response.Redirect("遷移先のページ名"); //飛びたいページ
}
だけです。Visual Studio2005を使ってボタンとか配置しました
45:デフォルトの名無しさん
09/01/22 12:46:16
>>42-43
こういうくだらない皮肉をすぐにレスする奴って
何が原因でここまで卑屈になったのか疑問。
46:デフォルトの名無しさん
09/01/22 12:50:50
どっちが卑屈かな?
47:デフォルトの名無しさん
09/01/22 13:00:05
>>45
こういうくだらない皮肉をすぐにレスする奴って
何が原因でここまで卑屈になったのか疑問。
48:デフォルトの名無しさん
09/01/22 13:03:11
>>41
引数ってなんだ?
49:デフォルトの名無しさん
09/01/22 13:27:50
い・・・、引数
50:デフォルトの名無しさん
09/01/22 13:28:36
if (MessageBox.Show("キャンセルしますか?", "今やってることをやめる", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
Response.Redirect("遷移先のページ名");
}
51:プログラム歴2週間
09/01/22 13:29:54
>>48 企業用アプリケーションなので、うまく説明できないのだけど
とあるコードを渡してそのコードを選択する画面に戻る
編集画面ABCDE→Bを選択した(Bを編集したい)→Bの詳細画面 そこで編集ボタン押すと→B編集画面→B編集画面でキャンセルボタンを押すとBというコードを引数としてB詳細画面に戻りたい
初プログラミングで何がなんだかって感じなのですが。
52:デフォルトの名無しさん
09/01/22 13:38:41
引数でなければならない理由がわからない
どこぞの変数にでも放り込んでおけ
53:デフォルトの名無しさん
09/01/22 13:41:32
ManagedDirectXでもクラスはクラスで参照型ですよね?
{
Texture tex=null;
SetTexture(tex);
(ブレークポイント)
}
SetTexture(tex)
{
tex = new Texture(Static.device, w, h, 0, Usage.Dynamic, Format.A8R8G8B8, Pool.Default);
~
}
(ブレークポイント)のところで止めてもtexがnullになります。
SetTexture内ではその値を保持していますが…
54:プログラム歴2週間
09/01/22 13:47:08
>>50 ありがとう。埋め込んでデバックしてみます。
55:デフォルトの名無しさん
09/01/22 13:47:19
SetTexture(out Texture tex)
じゃないか?
56:デフォルトの名無しさん
09/01/22 13:52:46
>>55
これで出来たテクスチャを色々なところで使い回したいのです。
なので
Texture getTexture(){
retrun tex
}
として引っ張ってきたテクスチャをtex.Dispose()とした方が良いのか
全部描画後にtex.Dispose()とした方が良いのか…
tex1=getTexture();
(tex1描画)
tex1.Dispose();
tex2=getTexture();
(tex2描画)
tex2.Dispose();
とした方が良いのか
tex1=getTexture();
(tex1描画)
tex2=getTexture();
(tex2描画)
tex2.Dispose();
とした方が良いのか
57:デフォルトの名無しさん
09/01/22 13:56:06
おまえは何を言ってるんだ?
内容がさっきと全然違うじゃないか。
58:デフォルトの名無しさん
09/01/22 14:00:35
>>53で作ったテクスチャ(tex)を保持しておいて
そのテクスチャを>>56でgetTexture()で引っ張ってきて(tex1)描画した直後にDispose();すると
最初に作ったテクスチャ(tex)の方が消えてしまうのでしょうか?
59:デフォルトの名無しさん
09/01/22 14:02:40
tex = が入った時点でインスタンスは別のものになってるよ。
60:デフォルトの名無しさん
09/01/22 14:04:59
ということはtex1.Dispose()としても元のtexの方は生きていろということで良いのですか?
61:デフォルトの名無しさん
09/01/22 14:07:17
ソース見てないから順番がよくわからん、、、
疑問ならメッセージ出力するようにしておいて観察してみるといい。
62:デフォルトの名無しさん
09/01/22 14:10:03
分かりましたTraceで頑張ってみます。
63:デフォルトの名無しさん
09/01/22 18:55:40
VC#2008EEでメソッドにかかった時間が表示できるいい感じのプロファイラはないですか?
64:デフォルトの名無しさん
09/01/22 19:40:20
チームエディシオン買えよ。
65:デフォルトの名無しさん
09/01/22 20:31:41
>>49
それも合ってるんだけどね
66:デフォルトの名無しさん
09/01/22 21:00:21
C#最強だな・・今までの中で最強だ・・
67:デフォルトの名無しさん
09/01/22 21:02:02
立ち上がりの速さとかS級だよな
68:デフォルトの名無しさん
09/01/22 21:04:20
これで.netがUNIXで動けば・・・
69:デフォルトの名無しさん
09/01/22 21:06:25
つ mono
70:デフォルトの名無しさん
09/01/22 22:05:04
URLリンク(www.atmarkit.co.jp)
ここに、Bitmapの内容を読み書きするときは
Bitmap.LockBits
Marshal.Copy
処理
Marshal.Copy
Bitmap.UnlockBits
とするのが基本と書かれていますが、コピーしないで処理するのは無理でしょうか?
71:デフォルトの名無しさん
09/01/22 22:08:57
>>70
自分で張ったリンク先くらい全部読んでから来い。
72:デフォルトの名無しさん
09/01/22 22:09:44
Marshal.ReadInt32とか使えばコピーしなくて済むけどコピーするよりも大幅に遅くなる
コピーせずに速いのはunsafeでポインタ使う方法
73:デフォルトの名無しさん
09/01/22 22:32:32
unsafe スコープで
T* p = (T*)bitmapData.Scan0.ToPointer();
T は好きな blittable な型で。
74:70
09/01/22 22:55:51
>>71
すいません、読んでいませんでした・・
>>72-73
回答ありがとうございました。
NiVEのサンプルのプラグイン、
Marshal.Copy使っているのをunsafe使ったコードに変えたら速くなるかな
75:デフォルトの名無しさん
09/01/22 23:04:37
処理自体はポインタ使った方が遅くなるよ
コピーのコストが無視できるような重い画像処理なら一回マネージ配列にコピーした方が速い
76:デフォルトの名無しさん
09/01/22 23:09:57
buttonを押すとちゃんとと舞踊になりました。ご教授ありがとうございました。
77:デフォルトの名無しさん
09/01/23 04:17:17
見よう見まねでやっと一つ自分なりの小さなアプリを作ったんだけど、
できあがったファイルに、わけわからんのがあるんだけど。
メインのexeファイルの他に、--.vshost.exeとかいうexeファイルもできてるし
--exe.configとかいうファイルが二つも出来ちゃった。
こんなの全部まとめて一つのexeファイルにするのが本当なんじゃないの?
一応アプリは正常に動作してるみたいだけど、何か気に入らない。
将来もっとスキルがあがってちょい立派なソフトを作って人に使ってもらうときに
なんかこういうのは格好悪い気がするんだけど。
ベクターのソフトとかは、exe以外だとbinとか、なんかいろいろ意味がありそうなファイル
ばかりじゃん。
どうして俺の場合はへんなファイルばかりなの?
何かやり方が間違ってる可能性はない?
78:デフォルトの名無しさん
09/01/23 04:22:47
ない
79:デフォルトの名無しさん
09/01/23 04:54:54
以下のコードにおいて、Triangleオブジェクトを参照するt1を作った上で、その参照変数をTriangleクラスの同クラス
のオブジェクトを受け取るコンストラクタに渡して、Triangleオブジェクトt2を作成しているのですが、その際
t2を作る過程で、コンストラクタ内で、t1の“private”なはずのstyleにアクセスできてしまうの理由が分からず
悩んでいます。
同じクラスから生成されたインスタンス同士なら、privateな部分も見れるってことなのでしょうか・・・。
ご教授お願いします。
(独習C#第2版という本の抽象クラスの部分を読んでいるときに出くわした疑問ですが、抽象クラスには関係ないので、
370-373ページのコードを参考に短いコードを書きました。)
class Triangle {
string style;
public Triangle(string s) {
style = s;
}
public Triangle(Triangle ob) {
style = ob.style; //t2のインスタンスを作っているとき、t1のprivateなメンバにアクセスできてしまう!
}
}
class Demo {
public static void Main() {
Triangle t1 = new Triangle("right");
Triangle t2 = new Triangle(t1);
}
}
80:デフォルトの名無しさん
09/01/23 05:15:24
>同じクラスから生成されたインスタンス同士なら、privateな部分も見れる
うん
81:77
09/01/23 05:20:26
読み返してみてあまりにバカっぽいので、
少しバカ度を下げて質問しなおします。
ビルドによって--.vshost.exeというようなファイルができるのは正常なんですか?
あと、初心者から脱した人には、生成される各ファイルがどんな働きをするものなのか
たいてい想像できるもんなのですか?
--.vshost.exeとか--exe.configはどういうファイルなんでしょうか?
申し訳ありませんが、できるだけ長い回答をお願いします。
82:デフォルトの名無しさん
09/01/23 05:26:36
>>79
privateはクラスプライベートであってインスタンスプライベートではないから
83:デフォルトの名無しさん
09/01/23 05:33:43
>>81
質問する手間でなぜぐぐらない・・
84:79
09/01/23 05:34:10
>>80
>>82
なるほど、クラスプライベートですか。お二方、どうもありがとうございました。
85:デフォルトの名無しさん
09/01/23 05:39:45
>>81
VSホスト・プロセス(*.vshost.exe)とは何か?
URLリンク(www.atmarkit.co.jp)
難しいことは他の人にまかせる。
誰かレスよろ。
86:デフォルトの名無しさん
09/01/23 10:58:23
exe.configはアプリケーション設定のデフォルト設定だったかな
87:デフォルトの名無しさん
09/01/23 10:59:06
public partial class ページ名: System.Web.UI.Page
って何をやっているんですか?
88:デフォルトの名無しさん
09/01/23 11:05:01
class ページ名 … ページ名 という名前のクラスを宣言します
public … クラスがアセンブリ外から参照できます
partial … クラスの定義が複数のファイルにまたがっています
: System.Web.UI.Page … クラスはSystem.Web.UI.Pageクラスを継承します
89:デフォルトの名無しさん
09/01/23 11:12:19
ありがとうございます。おおぉ・・・クラスとかアセンブリとか定義、継承 全部わからない・・・;;
適当にぐぐったのを翻訳すると、
「ページ名という名前のデータと処理を宣言して、コンパイル済みのコード群外から参照でき、複数のファイルのデータと処理を扱い、System.Web.UI.Pageのデータと処理を使えるようにする」
???????頭が壊れる。これがないと何ができなくなるのでしょう?
90:デフォルトの名無しさん
09/01/23 11:15:27
C#ではすべてのコードはクラス(というか型)の中に書かないといけないので
クラス定義がないと何もできない
91:デフォルトの名無しさん
09/01/23 11:21:03
そのページ処理すべて=クラス ということなんですかね?
すみません、「クラス定義」すら理解できていません・・・
92:デフォルトの名無しさん
09/01/23 11:26:18
それくらいは理解できてないとC#は使えないので
入門サイトや入門書読んで勉強しましょう
93:デフォルトの名無しさん
09/01/23 12:02:03
Firefoxのオプションダイアログのようなもの(上部のボタンでウィンドウの中身を
切り替える形のもの)を作成したいのですが、
その実装方法がわからず悩んでいます。
MDIにして子フォームのFormBorderStyleをnoneに設定し
切り替える方法でやってみたところ、ちらつきが出てしまいダメでした。
Firefoxのオプションダイアログにかぎらず、ウィンドウがひとつで中の描画だけ
切り替えるようなアプリの実装方法には、MDIの他にどういったものがありますでしょうか?
長文ですみませんが、よろしくお願いいたします。
94:デフォルトの名無しさん
09/01/23 12:10:41
そんな長文でもないと思うよ
・TabControlを使う
・Panelを重ねて置いて、ボタンを押したら該当Panel.BringToFrontで最前面にもってくる
とか
95:デフォルトの名無しさん
09/01/23 12:11:30
public partial class ページ名: System.Web.UI.Page
{
なんらかの処理
}
これがクラスで合ってますか?C#ではこれが必要だと。
publicは他のページでこのページの処理を使えるようにしている。
partialの意味がよくわからないのですが、1つのクラスを2つのファイルに分けると何かいいことあるのですか?
あと、System.Web.UI.Pageってなんでしょう?ぐぐってもよくわからなかったのですが、そういう処理名ですか?
96:デフォルトの名無しさん
09/01/23 12:20:52
>publicは他のページでこのページの処理を使えるようにしている。
これは違う。クラスの前に付くpublicについては今は気にしなくてもいい。
クラスライブラリを作ったりするときに重要になる。
>1つのクラスを2つのファイルに分けると何かいいことあるのですか?
VisualStudioのデザイナが自動生成したコードを分離できる。
>System.Web.UI.Pageってなんでしょう?
あらかじめ用意されてるクラスの名前。継承元として指定してる。
こんなところでいちいち聞いててもキリないでしょ?
まとめて勉強した方が早いよ
97:デフォルトの名無しさん
09/01/23 12:42:20
ありがとうございます。キリがなくてもいまいち入門サイトとか本見ても理解できないもので・・・
partialを使う事によって「ページ名.aspx.designer.cs」が生成されるって事ですかね?
System.Web.UI.PageはASP.NETが用意していて、それを基盤に動かしたいと。
98:デフォルトの名無しさん
09/01/23 13:17:34
>>97
partialを付けなくても「ページ名.aspx.designer.cs」は生成されるが、
その場合、「同じクラスが2つもあるぞゴルァ!!」と怒られてしまう。
partialを付けることで、二つのファイルに分かれたクラス定義を1つにまとめることが可能になる。
> 1つのクラスを2つのファイルに分けると何かいいことあるのですか
コードジェネレータが生成するコードと、ユーザーが編集するコードを分けることで、
ユーザーが編集したコードがコードジェネレータに上書きされてしまう危険性が無くなるし、
ユーザーが編集するコードに余計なものが混じらないので、コードも見やすくなる。
ところで、本見ても理解できないって、どんな本を読んでるんだ?
99:デフォルトの名無しさん
09/01/23 13:28:56
知り合いの人が、「これからはC#の時代だから一番つぶしがきくのはC#だよ」
と言ってたのですが、同じ人が、「いつまでもWindowsの時代ではない。他の
OSがたくさんでてくるから誰もWindowsなんて使わなくなる」とも言ってました。
これ矛盾してないですか?
C#はWindows上でしかコンパイル(というの?作ること)できないできないですよね?
100:デフォルトの名無しさん
09/01/23 13:33:21
LinuxでもOK
101:デフォルトの名無しさん
09/01/23 13:33:52
全く矛盾してません
102:デフォルトの名無しさん
09/01/23 13:34:02
(´・ω・`)しらんがな。次。
103:デフォルトの名無しさん
09/01/23 13:34:33
Monoってのがあることはあるからぐぐるといいよ
基本的には聞き流しておけばおk
104:デフォルトの名無しさん
09/01/23 13:42:17
>>101
もっと詳しく解説して
>>102
知らないなら黙ってろばか
105:デフォルトの名無しさん
09/01/23 13:53:27
>103で十分だろ
しかし
> 「いつまでもWindowsの時代ではない。他のOSがたくさんでてくるから誰もWindowsなんて使わなくなる」
これはもう10年以上前から聞いてるような台詞だな
106:デフォルトの名無しさん
09/01/23 13:58:48
>>104
失せろゴミ
107:デフォルトの名無しさん
09/01/23 13:59:11
ごめんなさい。
103さんのでよく分かりました。
108:デフォルトの名無しさん
09/01/23 14:00:19
>>105
安心しろ
新しいハードウェアが出なくなってみんなが同じ構成のマシンを使うようになったら
俺がパーフェクトなOSを作る
109:デフォルトの名無しさん
09/01/23 14:24:47
>>98 ありがとう
作って覚えるVisual C#2005exples edition入門だと
クラス…共通の目的を持ったデータと処理を集めたもの
public…外部に公開する。他のクラスから呼び出すことができる
System.Web.UI.Page…本にないのでぐぐってもよくわからず
partial…1つのクラスを2つのファイルで分けて管理できるようにする宣言
ハァ!?!?って感じですた。
110:デフォルトの名無しさん
09/01/23 14:30:56
ちなみに猫でもわかるC#プログラミングだと
「クラスとは、オブジェクトの性質や動作を規定するDNAです。」
「DNAの遺伝情報をもとに生命が形成され、生命は活発に活動することができます。この、実際の生物がオブジェクトに担当します。」
「つまり暮らすを具体化して、物理的な実態となったものがオブジェクトです」
はあ?死ねよって感じでしたね・・・なにいってんだこれ
111:デフォルトの名無しさん
09/01/23 14:38:21
自分が馬鹿だって全世界に向けて叫ばないでいいから
112:デフォルトの名無しさん
09/01/23 14:49:02
>>110
そんな感じの説明って多いよな。
人とか動物とか例えている・・・。実際、人とか動物とかプログラムに関係ないのにな。
113:デフォルトの名無しさん
09/01/23 14:57:03
>>109
ハァ!?!?と思ったら本屋に行くといい。
ハァ!?と思った部分の解説を見比べることで
良い本と悪い本の見分けがつくよ。
全ての本でハァ!?と思うなら・・・ご愁傷様と言うしかないな。
114:デフォルトの名無しさん
09/01/23 15:15:50
変数宣言で
Aaa aaa = new Aaa(Global.WebConfig);
のGlobal.WebConfigってなんですか?
()の中が何もないのは、aaaの箱を作って使えるようにしてるってことだと思うのですが
115:デフォルトの名無しさん
09/01/23 15:20:26
こっちが聞きたいけどおそらくこういうこと
WebApplication webApp = new WebApplication(設定ファイル)
116:デフォルトの名無しさん
09/01/23 15:27:02
Aaa = クラス
aaa = インスタンス変数
Global.WebConfig = 何らかの値
aaaというオブジェクト(インスタンス変数)を作る際にGlobal.WebConfigの値で初期化しているもの。
インスタンスの生成時にコンストラクタが呼び出されるため、そのコンストラクタの引数として渡す。
日本語でわかりやすく説明すると、 赤色で軽自動車を生成するには、こんな感じ。
自動車 自家用車 = new 自動車(赤色,軽自動車);
そんなことよりaaaとかいう名称は、つけてはいけない。
今だけではなく、あとからデバッグする時に何これ?になる。
117:みんなどっちの書き方が好き?
09/01/23 15:35:42
private static bool TryGetAttributeValue(HtmlNode node, string xpath, string attrString, out string value){
value = default(string);
if(node == null)
return false;
HtmlNode aNode = node.SelectSingleNode(xpath);
if(aNode == null)
return false;
HtmlAttribute attribute = aNode.Attributes[attrString];
if(attribute == null)
return false;
value = attribute.Value;
return true;
}
private static bool TryGetAttributeValue(HtmlNode node, string xpath, string attrString, out string value){
value = default(string);
if(node == null)
return false;
HtmlNode aNode = node.SelectSingleNode(xpath);
if(aNode != null){
HtmlAttribute attribute = aNode.Attributes[attrString];
if(attribute != null){
value = attribute.Value;
return true;
}
}
return false;
}
118:デフォルトの名無しさん
09/01/23 15:41:25
>>117
インデントがされていないのでどっちも嫌。
上のほうが改行がされてて見やすい。
if(aNode == null)
return false;
という書き方は、どうも嫌なので…
if(aNode == null){
return false;
}
と書いてる・・・。
119:デフォルトの名無しさん
09/01/23 15:43:13
>>118
自分は
if(~){
}
でなれた頃にその構文知ったから
ほとんど↑
120:デフォルトの名無しさん
09/01/23 15:44:12
>>115-116 なるほどうありがとう
121:デフォルトの名無しさん
09/01/23 15:46:44
1行でかけるときは { }なしにするが、
たとえ1命令でも2行にまたがるときは{ }をつけることにしてる。
122:デフォルトの名無しさん
09/01/23 15:50:42
取り敢えずネストはできる限り深くしない
123:デフォルトの名無しさん
09/01/23 15:52:58
ループも条件もネストは一回までと決めてる
あとはswitch使う
124:デフォルトの名無しさん
09/01/23 16:00:14
一回まではやりすぎ
125:117
09/01/23 16:39:21
ネストが浅くなるので上のほうが好まれるのかしら?
まあ{つけるかとか{の位置とかは別の話として
126:デフォルトの名無しさん
09/01/23 16:41:47
ネストの深さとはずれるけど
「出口は一つであるべき」とか言って
returnを複数書くのを嫌ったりする人もいるね
127:デフォルトの名無しさん
09/01/23 16:49:22
foreachで使う列挙体の項目をfoeach内でDisposeしたら即刻エラーになるので
該当項目をすべてDisposeするといった便利な使い方が出来ないのは言語的なバグですか?
128:デフォルトの名無しさん
09/01/23 16:49:35
どうも ブロックは、{ } で囲むという癖がついてる。
129:デフォルトの名無しさん
09/01/23 17:00:05
ネスト一回まではさすがに厳しいかもしれないけど
どんどんだらしなくなる性格だし後から読むとき楽なので、あえて決め事してる
コード量増えることもあるのはご愛敬
130:デフォルトの名無しさん
09/01/23 17:08:28
>>127
列挙体って何のこと。俺様用語は止めてくれる?
Disposeすることは例外発生の原因じゃないよ
どうせコントロールコレクションから要素をDisposeしようとしたんでしょ。
DisposeするとコレクションからRemoveされる実装もあるから。
while( collection.Items.Count > 0 ){
collection.Items[0].Dispose();
}
みたいにしたらどう
131:デフォルトの名無しさん
09/01/23 17:08:38
>>127
>列挙体
なのか?用語間違ってないか?
132:デフォルトの名無しさん
09/01/23 17:12:25
>言語的なバグですか?
自分の無能は棚上げですか?
133:デフォルトの名無しさん
09/01/23 17:13:28
ずいぶん厳しいインターネッツですねw
察してやれよw
134:デフォルトの名無しさん
09/01/23 17:15:42
>>132->>133
性格に難あり
どういう環境で育ったんですか?
135:デフォルトの名無しさん
09/01/23 17:21:35
>>134
アンカー間違えてんじゃねえよksg
136:デフォルトの名無しさん
09/01/23 17:29:00
>>135
性格に難あり
どういう環境で育ったんですか?
137:デフォルトの名無しさん
09/01/23 17:44:43
>>127
バグがあるのは、おまえだ。
138:デフォルトの名無しさん
09/01/23 19:56:22
脳にバグ持ってる人は大変だねぇ
139:デフォルトの名無しさん
09/01/23 21:20:09
いやバグだな
0
1
2Dispose
3
4Dispose
5
C#ではこういったことが出来ない
140:デフォルトの名無しさん
09/01/23 21:42:09
>>139
分かるように実行可能なソースをアップしてくれんか
141:デフォルトの名無しさん
09/01/23 22:02:00
C#でOS作ったんだけど、フレームワークインストールして無いと動かないんですよね?
どうしたらいいっすか?
142:デフォルトの名無しさん
09/01/23 22:03:46
C#という言語自体は.NET Frameworkとは無関係です
自分でネイティブコンパイラ作るなりCLI実装しちゃうなりすればおk
143:デフォルトの名無しさん
09/01/23 22:05:59
ネイティブで C# が動く、って OS があったな・・・
144:デフォルトの名無しさん
09/01/23 22:07:39
ネイティブでC#が動くというよりCLIを組み込んだOSだったような
145:デフォルトの名無しさん
09/01/23 22:12:18
それWindowsじゃん
146:デフォルトの名無しさん
09/01/23 22:39:52
singularity
147:デフォルトの名無しさん
09/01/23 22:41:03
Type.GetType(string)ではなくてType.GetType(class)って書けないのかな?
""で括ると候補でないし
148:デフォルトの名無しさん
09/01/23 22:41:40
typeof(型名)
149:デフォルトの名無しさん
09/01/23 23:06:04
>>148
ありがとうございます
150:デフォルトの名無しさん
09/01/23 23:07:46
>>141-145
ワラタ
151:デフォルトの名無しさん
09/01/24 03:43:08
NumericUpDownコントロールのMinimumを1に設定してもフォーム起動時には0になってしまいますが何故だろう
152:デフォルトの名無しさん
09/01/24 05:28:05
C#でのExcel操作(自動化)について質問があります。
C#からExcelのセルの幅や高さを変更したり、新しいシートを追加して
そのシートの名前を変更、新しく追加したシートを操作するにはどうすれば良いのでしょうか?
153:デフォルトの名無しさん
09/01/24 09:35:53
"C#でExcel"でぐぐった上の発言であろうな?
154:デフォルトの名無しさん
09/01/24 10:52:01
>>153
色々やってシートの追加と名前の変更はできたのですが、Sheet1しか名前の変更ができない上に
セルの幅、高さの変更、追加したシートの操作ができません。
Sheet1のみの操作と名前の変更だけしかできないです。
155:デフォルトの名無しさん
09/01/24 11:12:33
VBA ではできてんの?
156:デフォルトの名無しさん
09/01/24 11:17:19
VBAは使った事がありません。
157:デフォルトの名無しさん
09/01/24 11:19:04
まず VBA でできることを確認してから、C# に書き直した方が早いよ。
158:デフォルトの名無しさん
09/01/24 11:26:49
>>157
URLリンク(www.officepro.jp)
上記ページを読んでいるのですが、このVBAをどのように書き換えたら
C#で使えるようになるのでしょうか?
159:デフォルトの名無しさん
09/01/24 11:29:18
名前付き引数を使わずにやってみたら?
160:デフォルトの名無しさん
09/01/24 11:37:04
>>159
すいません。まったく意味が分かりません…
コードでこのように書き換えたら良いという例を挙げてはいただけないでしょうか?
161:デフォルトの名無しさん
09/01/24 12:15:19
159氏じゃないが、エクセルの起動法は分かるよね?
とりあえず、シート2の名前を変更して、それらのセルを操作する例
シート1は既に起動している物として話を進める
自分で設定したシートコレクション名を以下のコードに置き換えて試してみて
//シート2を追加
Excel.Worksheet sheet2 = (Excel.Worksheet)シートコレクション名.Add(before, after, 1, Excel.XlSheetType.xlWorksheet);
//シート1とシート2の名前を設定
シートコレクション名.Name = "シート1の名前です";
sheet2.Name = "シート2の名前です";
//セルに文字を入力自動化
シートコレクション名.Cells[1, 1] = "シート1のセルA1";
sheet2.Cells[1, 1] = "シート2のセルA1";
162:デフォルトの名無しさん
09/01/24 12:15:38
質問です。C#でバイト配列から部分バイト配列を探すには
どうしたらいいでしょうか。
Cのstrstr()や、Pythonのbuf.index(sub_buf)のような処理です。
163:デフォルトの名無しさん
09/01/24 14:46:09
>>162
バカ正直に検索する作業に戻るんだ。たとえばこんな風に。
private static int FindSubArray<T>(T[] array, T[] subArray) where T : IComparable
{
int match = 0;
for (int i = 0; i < array.Length; ++i)
{
if (array[ i ].CompareTo(subArray[ match ]) == 0)
{
match++;
if (match == subArray.Length)
{
return i - match + 1;
}
}
else
{
match = 0;
}
}
return -1;
}
164:デフォルトの名無しさん
09/01/24 14:48:43
IComparable使ったらボックス化が発生しちゃうからジェネリックにした意味がないぞ
IComparable<T>にするんだ
165:デフォルトの名無しさん
09/01/24 14:51:27
というか大小比較する必要はないんだからIEquatable<T>のほうがいいな
それもwhereで指定すると単純に参照比較で探したいときなんかに困るから
EqualityComparer<T>.Default使えば
166:デフォルトの名無しさん
09/01/24 14:53:17
対象がbyte[]と決まっているなら、文字列に変換しておいてIndexOf()という手もある。
string s1 = Encoding.ASCII.GetString(buf);
string s2 = Encoding.ASCII.GetString(sub_buf);
int p = s1.IndexOf(s2, StringComparison.Ordinal);
167:デフォルトの名無しさん
09/01/24 15:05:43
工エエェェ(´д`)ェェエエ工
168:162
09/01/24 15:38:37
>>163
関数丸ごと書いてもらえるとは・・・感謝です。
バカ正直に検索する作業に戻ります。
>>164-165
すいません、マニュアルを読んでみましたが
不勉強でまともなレスが付けられません。
メモしたので後日振り返りたいと思います。
>>166
そういう方法もあるんですね。
byte[]からStringの変換にEncodingを使うとは
思っていなかったので参考になりました。
169:デフォルトの名無しさん
09/01/24 15:41:29
>>166
byte[]の途中に0が入ってたら?
170:デフォルトの名無しさん
09/01/24 15:47:33
>>163に>>165を適用するとこう
>>163よりは桁違いに速いはず
private static int FindSubArray<T>(T[] array, T[] subArray)
{
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
int match = 0;
for (int i = 0; i < array.Length; ++i)
{
if (comparer.Equals(array[ i ], subArray[ match ]))
{ //あとは同じ
171:デフォルトの名無しさん
09/01/24 15:52:15
>>169
無問題
172:デフォルトの名無しさん
09/01/24 16:30:20
だな。今回の場合、むしろASCIIEncoingが0x80-0xffのデータを受け付けないほうが問題だ。
無理矢理でもnew string(a.Cast<char>().ToArray())とか、
a.Aggregate(new StringBuilder(a.Length), (sb, c) => sb.Append((char)c)).ToString()とかで持っていくほうがいい。
173:デフォルトの名無しさん
09/01/24 16:35:14
BitConverter.ToString
174:デフォルトの名無しさん
09/01/24 21:45:07
>>172
受け付けるよ。
175:デフォルトの名無しさん
09/01/24 22:28:03
\u003fに置き換えられるのをもって受け付けるといわれても…
176:デフォルトの名無しさん
09/01/24 22:28:04
Dictionary<AAA, BBB>のコレクション中から、BBBの条件によって要素を削除したいのですが
foreachで列挙しながらRemoveすると、列挙子が無効になって例外が発生します。
あらかじめ削除する要素を全部列挙してから、その後にRemoveするしかないんでしょうか?
177:デフォルトの名無しさん
09/01/24 22:39:52
一旦Keysを配列にコピーするとか
178:デフォルトの名無しさん
09/01/24 22:40:34
>>176
それ以上にスマートな方法は思いつかないなあ。
List<AAA,BBB>に投射しておいてRemoveAll()とか、考えられなくもないけど。
179:178
09/01/24 22:41:06
間違えた、List<KeyValuePair<AAA,BBB>>だ。
180:デフォルトの名無しさん
09/01/24 22:44:29
> あらかじめ削除する要素を全部列挙してから、その後にRemove
を静的クラスに書いておけば拡張メソッドで呼び放題だよ!
181:デフォルトの名無しさん
09/01/24 22:56:48
foreachのin ○○の後に.ToArray()と書けばおk
182:デフォルトの名無しさん
09/01/24 23:02:46
>>180
こんな感じか? メモ帳で書いただけで検証してないけど。
public static void RemoveAllByValue<TKey, TValue>(
this Dictionary<TKey, TValue> dictionary, Predicate<TValue> match)
{
List<TKey> keys = new List<TKey>();
foreach (TKey key in dictionary.Keys)
{
if (match(dictionary[key]))
{
keys.Add(key);
}
}
foreach (TKey key in dictionary.Keys)
{
dictionary.Remove(key);
}
}
183:176
09/01/24 23:27:22
列挙しながら削除はできませんか。
削除するのに別途メモリ確保するのは違和感あったのですが、仕方ないんですね。
184:デフォルトの名無しさん
09/01/24 23:33:23
>>183
削除するんじゃなくて最初から条件を満たす要素を Dictionary に入れなければいいんじゃね?
185:デフォルトの名無しさん
09/01/24 23:35:11
(゚ε゚)キニシナイ!!
186:デフォルトの名無しさん
09/01/24 23:35:48
━━━━━━━━━━━━━━━━━━━━
そんなことよりyahooきっず「どんな''ジャンボ''が食べたい?」に投票しようぜwwwwwwwww
ジャンボピーマンを一位にして餓鬼共を泣かせようwwwwwwwwww
現在1位 yahooの工作開始までに2位のたこ焼きを突き放す
URLリンク(kids.yahoo.co.jp) _人人人人人_
>鶴職人募集中<
 ̄ Y^Y^^Y^Y^ ̄
↓本スレ
スレリンク(news4vip板)
━━━━━━━━━━━━━━━━━━━━
187:デフォルトの名無しさん
09/01/25 00:20:01
コピペ君って馬鹿だな、まで読んだ。
188:デフォルトの名無しさん
09/01/25 00:30:05
ThreadPool.QueueUserWorkItemで実行されるスレッドで
Thread.CurrentThread.PriorityをデフォルトのNormal以外に変更してみたところ
問題なく変更でき、優先順位もちゃんと反映されているようです。
終わった後はNormalに戻されてました。
この挙動を期待して書いてもいいのでしょうか?
MSDNをざっと見たところ、この事について書いてないようなのですが…
189:デフォルトの名無しさん
09/01/25 02:50:47
>>188
文書化されてない以上その性質に頼るべきではない。
ちなみに.NET1.1では再利用したスレッドに変更したプライオリティやスレッド名は引き継がれている。
あとMonoの場合はLowestから変更できなかった。いろいろ複雑だ。
190:188
09/01/25 17:50:04
>>189
ガビョ~ん、そうなんですか。
ありがとうございました
191:デフォルトの名無しさん
09/01/25 21:02:05
VisualStudioが自動で書いたコードなんだけど、
using System;
using System.Windows.Forms;
というのがあったんだけど、一行目だけでよくないですか?
Systemの中にWindowsもあるんでしょ?
192:デフォルトの名無しさん
09/01/25 21:06:29
ないよ
名前空間はそれぞれ独立してる
見易さのためにピリオドで区切ってるだけ
193:デフォルトの名無しさん
09/01/25 21:07:20
名前空間ってその名の通り名前の一部にすぎないんだよ
194:デフォルトの名無しさん
09/01/25 21:09:41
>>191
ダメ。
195:デフォルトの名無しさん
09/01/25 21:15:29
using System; だけで System.* がすべてインポートされるなら、
名前空間を分けた意味がないじゃないか。
196:デフォルトの名無しさん
09/01/25 21:18:25
そもそもグローバル名前空間はすべての名前空間を含んでるんだから
何も書かなくても全てインポートされるはずだな
197:デフォルトの名無しさん
09/01/25 21:20:03
>>195
ごもっとも
198:デフォルトの名無しさん
09/01/25 21:33:05
SystemだけってのはExplorerでいうマイコンピューターみたいなもの?
199:デフォルトの名無しさん
09/01/25 21:35:05
PCのCPUみたいなものでは
200:デフォルトの名無しさん
09/01/25 21:36:57
Systemで指定されるものにSystem.Windows.Formsは入ってないとするなら
Systemだけで指定されてるのって何だとなるわな。
201:デフォルトの名無しさん
09/01/25 21:39:09
ためしにusing System;を抜いてみればわかるお
202:デフォルトの名無しさん
09/01/25 21:55:23
>>198
コレッ。 手元にVSない状態で、妄想で会話するな。
203:デフォルトの名無しさん
09/01/25 21:58:21
これ、自称非初心者の俺様も実はよくわかってない
204:デフォルトの名無しさん
09/01/25 22:10:43
リフレクションは遅いと聞くと
MethodInfoとかを静的フィールドにいちいち持っておきたくなるけど、
システムでキャッシュしてるそうだから効果なかったりする?
使うたびに作り直すのとどっちがいいかな?
205:デフォルトの名無しさん
09/01/25 22:12:25
そこら辺は言語によっていろんな考え方があるよね。
C++だと、using System;相当のものを書けば、Windows.Forms.Hogeと使えるという風に
入れ子の名前空間にもusingの効果が及ぶ。
C++から来た人間としてはそこにはまりそうになった。
206:デフォルトの名無しさん
09/01/25 22:12:47
>>204
CreateDelegateで取得したデリゲートをキャッシュするのが最速
207:デフォルトの名無しさん
09/01/25 22:13:18
だから、System も System.Windows.Forms も System.Collections も、
全部同じレベルなんだよ。
208:デフォルトの名無しさん
09/01/25 22:18:12
なんかフォルダみたいだね。
Systemフォルダの中にWindowsがあってその中にFormsがある。
SystemフォルダにアクセスしたからってFormsにアクセスするわけではない。
209:デフォルトの名無しさん
09/01/25 22:20:50
一応フォルダ状の構成なんだよね?
でも宣言はさらに下位のフォルダの中には及ばないってことなんだろう。
210:デフォルトの名無しさん
09/01/25 22:21:19
違う。C#ではあたかもネストしてるように見せかけてるだけ。
211:デフォルトの名無しさん
09/01/25 22:21:32
>>208
だからマイコンピューターなんだよ
212:デフォルトの名無しさん
09/01/25 22:25:00
namespace System { namespace Windows { この中ではSystemの型にアクセスできる } }
C#でこういう風に書けるのは単なるシンタックスシュガーみたいなもの。
本当に階層になってるわけではない。名前空間はあくまで型の前に付く名前。
213:デフォルトの名無しさん
09/01/25 22:26:28
だから、今、開いてるフォルダの中のファイルしか使えない。
例えば、C:\Windows\System\ を開いてるなら
その中のファイルにしかアクセスできない。
その下のC:\Windows\System\Form\ にあるファイルを開きたいならC:\Windows\System\Form\を開かないといけない。
ただ、わかりやすいようにカテゴリーに分けられているだけ。
極端に言えば
System.Windows.Forms ではなくWindowsForm という名前でも良かった。
・・・しかし、それではわかりにくく管理しにくいことからSystemのWindowsのFormsというように分類したまでの話。
214:デフォルトの名無しさん
09/01/25 22:28:13
どっちなんだよw
ネストしてるのか(フォルダ的)
別もんなのか
215:デフォルトの名無しさん
09/01/25 22:29:04
System_Windows_Forms
なら理解してくれるんじゃまいか?
216:デフォルトの名無しさん
09/01/25 22:29:54
難しく考えずに、フォルダとその中でいいんじゃない?
コンソールでパスを通したことがあるなら、イメージ的にはusingはそれと同等って感じ。
217:デフォルトの名無しさん
09/01/25 22:32:28
フォルダの中にフォルダはあるけど名前空間の中に名前空間は無いの
もっといえば,名前空間なんてものは単なる飾りなの
218:デフォルトの名無しさん
09/01/25 22:35:18
それよりギガ株を自社株買いで半値を割らせないようにしているけど
その評価でBPSを出してくるのは認められているの?。
グレーゾンも粉飾紛いに見えてしまう。
219:218
09/01/25 22:35:50
スマソ、ごばく
220:デフォルトの名無しさん
09/01/25 22:38:07
SystemとSystem.Windowsは同じ列なんだな。
Systemの下にSystem.Windowsがあるのかと思ってた。
221:191
09/01/25 22:38:53
たくさんの方に答えていただきありがとうございました。
というか、ここの人でも議論になるような疑問を持ててちょっとうれしかったです。
222:デフォルトの名無しさん
09/01/25 23:12:57
>>214
C#の概念ではネストしてる(フォルダ的)
MSILの概念(=リフレクションで扱える情報)ではネストしていない
(SystemとSystem.Windowsの間に親子関係はない)
223:デフォルトの名無しさん
09/01/25 23:14:11
usingの効果は、たとえば
using System.Text;と書いておけば毎回System.Text.StringBuilderと
書かなくて済むというだけの話でしょ。
で、using System;とだけ書いても、Text.StringBuilderと書けるようには
ならない、と。
224:デフォルトの名無しさん
09/01/25 23:23:22
>>206
おお
確かにDelegate実行は大分速いみたいですね
だけどこれMethodInfoにしか使えませんね
プロパティだって結局メソッドなのにPropertyInfoに使えないというのは
225:デフォルトの名無しさん
09/01/25 23:26:37
>>224
プロパティにも使えるよ
PropertyInfoのGetGetMethodやGetSetMethodでアクセサのMethodInfoが取れる
フィールドの場合は面倒だけどEmit使ってメソッドを動的に生成してやるしかない
226:デフォルトの名無しさん
09/01/25 23:34:12
EventInfo も同じ感じだな。少しは ILDASM あたりでメンバが
各々どうなっているか眺めてみれ
ちなみに >>225 のフィールドの場合のヒントは DynamicMethod な
227:デフォルトの名無しさん
09/01/25 23:40:36
フィールドの値の取得だけならExpression.Field使えば簡単だけどな
228:デフォルトの名無しさん
09/01/26 04:22:23
.NET製のソフトってそれ自体ではなく、JITコンパイラの起動が遅いの?
229:デフォルトの名無しさん
09/01/26 04:51:02
BinaryFormatterでシリアライズしたデータをデシリアライズしようとすると、
TypeLoadExceptionHolderがなんとかというエラーが出てきてデシリアライズできないのですが、
シリアライズができてデシリアライズができないというのはどんな原因が考えられるのでしょうか?
230:デフォルトの名無しさん
09/01/26 08:22:32
他で開きっぱなしで、開く権限がないとかかなぁ。
それか、テスト用として、保存直後に読み込んでて、
using とか Close とかしてなくてちゃんとフラッシュされてないか。
あとは、保存する時に、
ファイルを Create とか Truncate じゃなくて、
Append とか Open で保存しちゃってて不正なバイナリになってるとか。
231:デフォルトの名無しさん
09/01/26 09:59:07
>>230
多分そこら辺は問題ないと思います。というのも、それが起こるのがこのアセンブリで定義した
型をシリアライズした時のみで、それ以外の本体やプラグインで保存したデータについては全く問題ない
ためです。試しに、
[Serialize]
class TestData { }
というクラスをシリアライズして保存してみましたがそれでも上のエラーが飛んできます orz
BinaryFormatterを使っていてSerializeAttributeをつけ忘れてSerializationExceptionが飛ぶ
ということはありますが、ArgumentExceptionなんて飛んできたことないよ orz
232:デフォルトの名無しさん
09/01/26 10:22:23
>>231
[Serialize]→[Serializable]
でした orz
233:デフォルトの名無しさん
09/01/26 10:27:37
例外を正確に書いてみそ
234:デフォルトの名無しさん
09/01/26 11:09:20
>>233
エラーメッセージは
型 'System.Runtime.Serialization.TypeLoadExceptionHolder' のオブジェクトを
型 'PluginTest.IPluginData' に変換できません
と…
変換先の型名はちょっと変えてますが、それ以外は全く一緒で、SerializationExceptionではなく
ArgumentExceptionで飛んできます。InnerExceptionはnullでした。
235:デフォルトの名無しさん
09/01/26 12:24:02
>>234
そのコードを新しいプロジェクトとかで書いても同じ例外が投げられるの?
だったらそのコードをさらしてくれ。
236:デフォルトの名無しさん
09/01/26 16:26:58
>>235
新しくプロジェクトを作成し、すべて同一にすると同じ例外が飛んできますが、
名前空間を変えると飛ばなくなりました。
プロジェクト全体を確認してみましたが、名前空間とクラス名がダブっている訳でもなかったのですが…
なんだこれ orz
237:デフォルトの名無しさん
09/01/26 16:39:38
よく分からんけど関係するアセンブリをGACに登録してるとかない?
ローカルのアセンブリよりGACのが優先してロードされるので、
期待したのと違う動きをすることがある。
238:デフォルトの名無しさん
09/01/26 17:07:14
>>237
してないです。ngenとかも動かしてないのでキャッシュされたのがロード
されてるわけではないと思います。
.NETのインストールでもミスったんでしょうか…
239:デフォルトの名無しさん
09/01/26 17:12:49
VS2008でソースとかシンボルとか落としてきてSerializeの中追っかけてみたら何か分かるかもね
240:デフォルトの名無しさん
09/01/26 19:22:56
ある別の型(T)に変換できることを表すインターフェイスは無いの?
IConvertible<T>みたいな
241:デフォルトの名無しさん
09/01/26 19:53:38
標準ライブラリには無いな
242:デフォルトの名無しさん
09/01/26 21:12:35
is T じゃだめなのか?ダメだな。
243:デフォルトの名無しさん
09/01/26 23:19:27
クラス名にOfとか使うのってどうなんだろう。
たとえばContainerOfImage、ContainerOf3D、といった感じの名前の付け方。似た機能のクラスの頭文字が統一されて見やすいとは思うんだけど。
244:デフォルトの名無しさん
09/01/26 23:25:42
不自然
英語としてどうかは置いといて,普通は見かけないから激しく違和感を感じる
Ofのかわりにアンダーバー使ったりする方がまだ綺麗な気がする
245:デフォルトの名無しさん
09/01/26 23:25:56
それなんてVB.NET
List(Of T) URLリンク(msdn.microsoft.com)
Of キーワード URLリンク(msdn.microsoft.com)
246:デフォルトの名無しさん
09/01/26 23:31:14
○○Of(引数)の形を除けば,メンバ名にもOfってあんまり見かけないよね
247:デフォルトの名無しさん
09/01/26 23:32:15
別に Of なくてもいいと思う。
先にカテゴリを記述する命名スタイルは普通にある。
Of を名前に入れるのは、Of 込みで1つの熟語になってるようなものくらい。
248:デフォルトの名無しさん
09/01/26 23:35:22
DialogColorやStreamStringじゃ全然違う意味になっちゃうよ
249:デフォルトの名無しさん
09/01/26 23:51:31
全部そう言う命名で統一されていれば気にならないもんさ。
250:デフォルトの名無しさん
09/01/27 00:09:30
>>240
変換出来るかどうかを知るだけなら、TypeConverter拾ってきて
CanConvertTo(), CanConvertFrom()で良いと思う
251:デフォルトの名無しさん
09/01/27 00:37:45
C#で複数ファイルを一つに暗号化した上で纏めるツールを作ろうと思っているのですが、
例えば、次の3ファイルを1ファイルに纏めるにはどうすれば良いでしょうか?
※また、一纏めにするだけではなく、パスワードを入力する事により暗号化した上で1ファイルに纏めたい
と思っています。当然複合化もしたいです。
【暗号化_前】
AAA.xls
BBB.xls
CCC.xls
【暗号化_後】
ABC.xls
【パスワード】
abc_dayo
252:デフォルトの名無しさん
09/01/27 00:43:07
7zip32.dllでも呼べば?
253:デフォルトの名無しさん
09/01/27 01:01:41
>>252
あざーす。ぐぐってみます。
254:デフォルトの名無しさん
09/01/27 01:02:41
ふぇ…
255:デフォルトの名無しさん
09/01/27 10:13:08
ふぇっくしょん!
256:デフォルトの名無しさん
09/01/27 12:26:20
if なんらかの条件
{
なんらかの処理
}
ボタン処理
のプログラムでなんらかの条件に当てはまったときにボタン実行が行えないようにするにはどうすればいいでしょう?
プログラム自体わけわかめで日本語でおkは重々承知ですが、エスパーさん助けて;;
257:デフォルトの名無しさん
09/01/27 12:40:25
if なんらかの条件
{
なんらかの処理
}
else
{
ボタン処理
}
258:デフォルトの名無しさん
09/01/27 12:59:42
まさにそのとおりのプログラムなのですが
if なんらかの条件 ①
{
if なんらかの条件②
{
なんらかの処理A
}
else
{
なんらかの処理B
}
}
ボタン処理
となっていて、なんらかの条件②のときにボタン処理させないようにしたいので、頭ぐちゃぐちゃーとなっています。
259:デフォルトの名無しさん
09/01/27 13:02:41
なんらかの処理②の最後でreturn;すればヨイヨイ
260:デフォルトの名無しさん
09/01/27 13:05:03
リターンよくわかってないです。調べてみます。ありがとう
261:デフォルトの名無しさん
09/01/27 13:05:44
if なんらかの条件 ①
{
if なんらかの条件②
{
なんらかの処理A
}
else
{
なんらかの処理B
}
}
else
{
if なんらかの条件②
{
なんらかの処理A
}
else
{
ボタン処理
}
}
262:デフォルトの名無しさん
09/01/27 13:20:29
なんらかのがゲシュタルト崩壊した
263:デフォルトの名無しさん
09/01/27 13:38:36
まあreturnで解決できる場合もあるし関数分ける手もあるが、
どんな場合でも対応したいのならば、
bool b = なんらかの条件 ①;
if (b)
{
なんらかの処理
とかいろいろ
}
if (b)
{
ボタン処理
}
みたいに保存しておいて後で使ったりできるぞ。
264:デフォルトの名無しさん
09/01/27 13:39:14
if (!b)
{
ボタン処理
}
だった。。。
265:デフォルトの名無しさん
09/01/27 13:48:20
>>258
bool ボタン処理するフラグ = true;
if なんらかの条件 ①
{
if なんらかの条件②
{
なんらかの処理A
ボタン処理するフラグ = false;
}
else
{
なんらかの処理B
}
}
if (ボタン処理するフラグ)
{
ボタン処理
}
266:デフォルトの名無しさん
09/01/27 13:57:51
結局、>>258のやりたいことがなんなのかよく分からんかった。
単純に牡丹を押した時の処理を分岐させたいだけだったのか、
それとも一定条件下ではボタンそのものを押せないようにしたかったのか・・・
なんだっけ、MVCの類似だか発展版みたいなやつで
こういうのをスマートに解決する方法があったような。
267:デフォルトの名無しさん
09/01/27 13:59:42
ご飯行ってました。ありがとうございます。参考にして書いてみます。
268:デフォルトの名無しさん
09/01/27 14:02:57
>>266 一定条件下ではボタン押しても処理させないようにする ですね。
具体的に言うと、保存ボタンなので、データベース更新させないようにする、ですかね。
権限チェックをして、誰々なら見ることはできるけど、保存はできないという。
269:デフォルトの名無しさん
09/01/27 14:12:37
つーか押しても何も起きないんだったら押せなくすべきじゃね?
と思ったら何か起きるのか
でも保存ボタンで保存されないのは嫌ね
270:デフォルトの名無しさん
09/01/27 14:18:52
押せなくする方法がわからんとです
271:デフォルトの名無しさん
09/01/27 14:19:34
権限管理を、そんなあちこちでアドホックにやってたら漏れるぞ。
272:デフォルトの名無しさん
09/01/27 14:37:51
ButtonSubmit.Attributes.Add("onclick", "return confirm('ダイアログに出るメッセージ');");
で、ダイアログに出るメッセージを変数に変えて、変数の中身を表示させるにはどうすればいいのでしょう。
ButtonSubmit.Attributes.Add("onclick", "return confirm('MSG01');");
でMSG01の中身をメッセージとして出したいのですが
273:デフォルトの名無しさん
09/01/27 14:56:00
>>260
do { ... } while(false);
にして、breakすれば良い
274:デフォルトの名無しさん
09/01/27 14:57:36
>>270
ボタンのEnabledプロパティをfalseにするんだ
275:デフォルトの名無しさん
09/01/27 15:09:47
>>272
ButtonSubmit.Attributes.Add( "onclick", "return confirm('" + MSG01 + "');" );
276:デフォルトの名無しさん
09/01/27 15:13:09
おおお
ButtonSubmit.Enabled = false;
たったこれ追加すれば使用不可にできました。ありがとう~
277:デフォルトの名無しさん
09/01/27 15:17:02
データグリッドビューで質問があります。
データグリッドビューの列を1から10まではユーザーが任意で追加する事ができるが、
それ以上は追加できなく(メッセージなどで「追加できません」と表示)するにはどうすれば良いのでしょうか?
278:デフォルトの名無しさん
09/01/27 15:20:51
void hoge(EventHandler handler) { }
引数で渡されたデリゲートが、匿名メソッド・ラムダ式かそうでないかを判別する方法って無いですよね・・・?
279:デフォルトの名無しさん
09/01/27 15:22:29
>>275 できましたー!ありがとうー!”++”が必要なのかぁ。こういうの載ってる本ないですかねー。
280:デフォルトの名無しさん
09/01/27 15:24:08
C#の解説書で載ってないものは無いだろう
281:デフォルトの名無しさん
09/01/27 15:36:59
>>278
それを判別してどうしたいんだ?
282:デフォルトの名無しさん
09/01/27 15:40:35
>>278
メソッドを持つ型の名前でも見れば
283:282
09/01/27 15:54:54
ああ、型名だとstaticなときに駄目だな
じゃあ、メソッド名の方で
284:デフォルトの名無しさん
09/01/27 16:04:28
>>277
this.dataGridView.AllowUserToAddRows = false;
1~10まではあらかじめデフォルトの数値を入力しておけばおkだと思う。
285:デフォルトの名無しさん
09/01/27 18:02:13
テキストボックスで入力された値を変数に入れる
A=~; B=~; C=~; ・・・
変数が正しいかチェック (日付や金額の桁)
正しかったらBoolでTrueを返す
if全部正しいとき
保存処理を行う
else
本処理終了
みたいな感じでプログラムを組みたいのですが、全部正しいときって
A==True && B==True &&・・・・・
みたいな感じでやっていくのですか?
またもうまく説明できない(´ω´)
286:デフォルトの名無しさん
09/01/27 18:05:34
A && B && Cでいい
287:デフォルトの名無しさん
09/01/27 18:10:03
全部False 日付も金額も合ってないときも保存処理行われちゃいません?
288:デフォルトの名無しさん
09/01/27 18:12:06
おまえは何を・・・
&&でつないだら全てtrueの場合だけ条件に一致するよ
289:デフォルトの名無しさん
09/01/27 18:13:25
おまえは全部ここで質問するつもりか
仕事じゃねーのそれ?
本でも買って読めや低能
290:デフォルトの名無しさん
09/01/27 18:25:11
>>288
どうして&で繋ぐとtrueになるかわからないのですが、そういう仕様なのですか?
291:デフォルトの名無しさん
09/01/27 18:28:44
&&は論理積の演算子どれか一つでもfalseならfalse
292:デフォルトの名無しさん
09/01/27 18:30:21
A && B AとBが両方trueのときtrue でなければfalse
A || B AかBのどちらかがtrueのときtrue 両方falseならfalse
293:デフォルトの名無しさん
09/01/27 18:31:27
>>291 なるほど。どこかで見た&&は、かつ ||は、または と日本語変換してたのがいけなかったですね。
294:デフォルトの名無しさん
09/01/27 19:09:05
日付チェックは
public static bool IsDate(int iYear, int iMonth, int iDay) {
if ((DateTime.MinValue.Year > iYear) || (iYear > DateTime.MaxValue.Year)) {
return false;
}
if ((DateTime.MinValue.Month > iMonth) || (iMonth > DateTime.MaxValue.Month)) {
return false;
}
int iLastDay = DateTime.DaysInMonth(iYear, iMonth);
if ((DateTime.MinValue.Day > iDay) || (iDay > iLastDay)) {
return false;
}
return true;
を参考にしようと思うのですが、どう自分で作った変数を当てはめていいのかわからないのですが、わかる方ご教授ください。
295:デフォルトの名無しさん
09/01/27 19:16:20
new DateTime(year,month,day)
ってやれば間違ってた時例外かなんか投げてくれるんじゃないの
296:デフォルトの名無しさん
09/01/27 19:17:14
変数なんか一つも作る必要ないんじゃないか?
297:デフォルトの名無しさん
09/01/27 19:23:26
自分もそう思うのですが、データベースを直接扱うのはよくない。エラー原因やチェックがしやすい。
という理由で、テキストボックスとかで入力した値を変数に入れるそうです。あんまりよくわかってないですが
298:デフォルトの名無しさん
09/01/27 19:55:57
>>297
>>289
299:デフォルトの名無しさん
09/01/27 20:04:36
>>291-293
その覚え方は危険。
&&と||は論理積ではなくショートカット演算子。
まずAを評価して、その結果によってはBも評価する。
A&&B デフォルトはfalse。Aがtrueの時のみBが評価される。Bがtrueならtrue。
A||B デフォルトはtrue。Aがfalseの時のみBが評価される。Bがfalseならfalse。
300:デフォルトの名無しさん
09/01/27 20:11:50
>>299 なるほどー。わかりやすいですね。ありがとう。
わからない単語とか検索すると、たいていトップにマイクロソフトのヘルプみたいな解説が出てくるけど、すごいわかりにくいですな
301:デフォルトの名無しさん
09/01/27 20:15:22
MSDNは英語で読むに限る
302:デフォルトの名無しさん
09/01/27 20:50:57
>>299
論理積は論理積だよ
ショートサーキット評価するだけで
303:デフォルトの名無しさん
09/01/27 22:53:39
去年買っておいたデザインパターンの本(C#)を読んでるんだけど目から鱗だ
何でもっと早く読まなかったんだろう
304:デフォルトの名無しさん
09/01/27 22:58:09
>>299
ということは
if(A()&&B()){
~
}
とあったとき
A()でfalseが帰ってきたら
B()が呼ばれないんですか?
305:デフォルトの名無しさん
09/01/27 23:00:55
そうだよ
if( A() & B() )
ならBも呼ばれる
306:デフォルトの名無しさん
09/01/27 23:02:08
>>304
そのとおり。
if (A()) {
if (B()) {
~
}
}
と等価です。
307:デフォルトの名無しさん
09/01/27 23:03:07
>>305
成る程
順番によっては値が変わることもあるのか…
ありがとうございます
308:デフォルトの名無しさん
09/01/27 23:03:44
>>303
だからってobserverとかinterpreterとかはそのまま使っちゃダメだよ
イベントやforeachとしてC#に組み込まれてるからな
他にもデリゲート使うと非常に簡単になるパターンは多い
309:デフォルトの名無しさん
09/01/27 23:06:14
A()&&B()の場合、A()の結果次第でB()が呼ばれるかどうか決まる。
A()&B()の場合、両方呼ばれるが、(結合規則とは無関係に)どちらが
先に呼ばれるかは不定。
310:308
09/01/27 23:07:42
×interpreter→○iterator
311:デフォルトの名無しさん
09/01/27 23:08:15
いまさらだけど
A == B
と
A.Equals(B)
ってどっちがお勧めなの?
312:デフォルトの名無しさん
09/01/27 23:10:06
>>305
逆じゃないの?
313:デフォルトの名無しさん
09/01/27 23:12:35
&&や||の場合が両表評価するじゃなかったっけ?
314:デフォルトの名無しさん
09/01/27 23:16:14
>>311
目的による
参照比較したいならObject.ReferenceEqualsが確実
値の比較がしたい場合は
==, IEquatable<T>.Equals, Object.Equals (左ほど優先)
の中から実装されているものを使えばいいと思う
315:デフォルトの名無しさん
09/01/27 23:17:00
>>312
>>313
コード書いて確かめりゃ一発だろハゲ
316:デフォルトの名無しさん
09/01/27 23:19:29
>>303
オライリーのやつ?
317:デフォルトの名無しさん
09/01/27 23:20:00
>>315
めんどくさいんじゃチンカス
318:デフォルトの名無しさん
09/01/27 23:20:59
質問です。
開いたウィンドウを閉じたいと思います。
アプリケーションの場合は、
Process hProcess = Process.Start("Notepad");
if (! hProcess.CloseMainWindow()) {hProcess.Kill();}
でできるのですが、エクスプローラの場合、
Process hProcess = Process.Start("explorer");
とすると、ハンドルされていない例外が発生し、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」となります。
どのようにしたらよいか教えてください。
319:デフォルトの名無しさん
09/01/27 23:22:05
>>317
ならばヘルプ読め。あるいは他人の解答を信じるか。
|| URLリンク(msdn.microsoft.com)
&& URLリンク(msdn.microsoft.com)
> ただし、x が true の場合、y は評価されません。この場合、OR 演算の結果は y の値にかかわらず true になるためです。
> ただし、x が false の場合、y は評価されません。この場合、AND 演算の結果は y の値にかかわらず false になるためです。
> これは、"ショートサーキット" 評価と呼ばれます
320:デフォルトの名無しさん
09/01/27 23:25:30
>>318
hProcessがnullなんじゃね?
Process.Startの戻り値は
>プロセス リソースに関連付けられた新しい Process コンポーネント。
>プロセス リソースが起動されなかった場合は null (既存のプロセスを再利用した場合など)。
シェル(explorer.exe)の場合、新しいフォルダを新規プロセスで開く設定にしてないと
プロセスは作られないよ
321:デフォルトの名無しさん
09/01/27 23:26:05
だっふんだ!m(__)m
322:デフォルトの名無しさん
09/01/27 23:27:54
2つ以上の評価をするときに使えそうだな
323:デフォルトの名無しさん
09/01/27 23:34:01
>>316
これだけど、糞味噌に書かれててワラタ
URLリンク(www.amazon.co.jp)
アレな感じのコメントもいくつかあるけどw
324:デフォルトの名無しさん
09/01/27 23:43:52
>>323
たしかにレビューはあれだw
でも書名出してくれてありがとう
325:デフォルトの名無しさん
09/01/27 23:49:35
>>320
おお。なるほど。explorerを新規プロセスで開く方法は?
326:デフォルトの名無しさん
09/01/27 23:53:26
(´・ω・`)しらんがな
327:デフォルトの名無しさん
09/01/28 00:12:24
>>244-250
レスサンクス。参考になった。
328:デフォルトの名無しさん
09/01/28 05:02:41
C#でのExcel操作(自動化)について質問をさせてください。
dataGridViewから入力した内容を取り出し、Excelに出力をしたいのですが
以下のコードの時、数値を入力した場合のみ、「数値が文字列として保存されています」と表示され、エラーが発生します。
どのようにすれば文字列ではなく数値で出力をする事ができるのでしょうか?
string[,] table = new string[10,1];
for (int c = 0; c < 10; c++)
{
table[c, 0] = dataGridView1.Rows[c].Cells[0].Value.ToString();
}
sheet.get_Range("A1", "A10").Value2 = table;
329:デフォルトの名無しさん
09/01/28 08:15:48
object[,] tableにしてToString()しなきゃいいんじゃね?
330:初心者
09/01/28 14:28:58
C#.NETについて質問させてください。
MVCアーキテクチャでWebサイトを構築していますが、XMLファイルより、
使用クラス名を読み取り、動的に使用クラスのインスタンスを生成する為に、リフレクション
機能を使用したいのですが、Type.GetType()メソッドやAssembly.GetType()メソッドなどの
戻り値がNULLになってしまいます。GetType()メソッドを使用するクラスと同じファイルに、
インスタンス生成したいクラスのクラス定義を書くとうまくいくのですが、別ファイルにすると、
うまくいきません。
詳しい方ご教授お願いします。
331:デフォルトの名無しさん
09/01/28 14:41:07
完全限定名で書いてないとかそんなんだろ
初心者名乗る奴がリフレクションとかどうよと思うけど
332:デフォルトの名無しさん
09/01/28 15:31:31
Dictionary<Key, Value>と同様な追加/削除/検索が行えて
ValuesプロパティがObservableCollectionみたいに変更通知機能がある
そんなコレクションってありませんか?
333:デフォルトの名無しさん
09/01/28 16:52:04
Dictionary<,>とObservableCollection<>の両方をラップした
IDictionary<,>の実装クラスを作ればいいよ
ほとんど丸投げだからそんなに手間はかからない
334:デフォルトの名無しさん
09/01/28 17:22:34
パラメータをバインドする機構がない
ってどういう意味ですか?初心者にはさっぱり
335:デフォルトの名無しさん
09/01/28 17:31:18
コンテクスト(文脈)って知ってる?
336:デフォルトの名無しさん
09/01/28 17:51:08
文脈って意味じゃないでしょうか?!!!!
337:デフォルトの名無しさん
09/01/28 20:22:00
そういえばインデクサやStreamのサイズ指定はint型だけど
64bit環境だとどうなるの?
アドレス空間が64bitになっても4GBに縛られるの?
338:デフォルトの名無しさん
09/01/28 20:37:22
>>337
uintでないから2Gだな。
しかし、ストリームなら2GBずつRead/Writeすればいいし、
List<T>でもTが例えば16バイトの構造体なら全部で32GBまでいける。
もっとも、そんな大量のメモリを一度に扱おうというのなら、
まだまだネイティブなコードのほうがいいだろうと思うのは俺だけか?
339:デフォルトの名無しさん
09/01/28 20:43:20
インデクサはどんな型でも使えるだろ。
340:デフォルトの名無しさん
09/01/28 21:49:42
配列の添え字はlongでいけなかったっけ?
341:デフォルトの名無しさん
09/01/28 22:02:41
NativeIntなんで64bitプロセスなら可能のはず
342:デフォルトの名無しさん
09/01/29 01:22:12
>>340
配列の添え字にはlong型の値も使える。
そのため、配列にはint型のLengthプロパティに加えてlong型のLongLengthプロパティもある。
32bit環境でも一応、
int[] arr = new int[ long.MaxValue ];
と書けるし、コンパイルもできるのだが、>>341の言うとおり、NET.Framework内部では配列の
添え字をNativeIntで処理しているので、実行するとOverflowExceptionが発生する。
内部でNativeIntの範囲を超える添え字を扱えるようにしても、そんな配列を確保した時点で
メモリ不足に陥るのは自明なので、合理的な仕様なんじゃないだろうか。
343:テラ初心者
09/01/29 17:01:11
引数・・・メソッドを呼び出す際に渡す情報のこと。
なんのことかサッパリわかりません。メソッドもなんかの処理なんだろうなあ位にしかわかってません。
何がなんのために何に何の情報を渡しているのですか????
344:デフォルトの名無しさん
09/01/29 17:04:07
まず@ITのC#入門でも読め
345:デフォルトの名無しさん
09/01/29 17:05:56
釣りでしょ
346:デフォルトの名無しさん
09/01/29 17:41:47
TVのリモコンでチャンネルの上下は引数なしだが、一発選局はチャンネル数が引数といえる。
347:デフォルトの名無しさん
09/01/29 17:46:24
tv.SelectChannel(-1, CURRENT) とか書きうるわけだが
348:デフォルトの名無しさん
09/01/29 17:51:56
せっかくメソッドにしてるのだから Up() Down() だろ。
なんで使いにくくするんだ。
349:デフォルトの名無しさん
09/01/29 17:52:47
リモコンのボタンで、CURRENT、-1、チャンネルチェンジと押すわけですね、その形式だと。
350:デフォルトの名無しさん
09/01/29 17:55:29
ほむほむ。ありがとう。Voidとかで引数を返さないっていうのはどういうメリットがあるというか、どういうときに使うのでしょう?
チャンネルでいうと、8ちゃんボタン押しても数字が入っていないので何も起こらないのかな。
351:デフォルトの名無しさん
09/01/29 17:57:23
voidで値を返さないメリットがあるかじゃなくて
値を返すメリットがないからvoidなんだろ
352:デフォルトの名無しさん
09/01/29 18:04:06
それ引数じゃなくて戻り値では
353:デフォルトの名無しさん
09/01/29 18:10:46
private void CalcButton_click(object sender,EventArgs e)
{
}
作って覚えるC#の本より引用なのですが、これからVoid取っちゃうと何か不具合ありますかね?
354:デフォルトの名無しさん
09/01/29 18:11:34
やってみればわかる
355:デフォルトの名無しさん
09/01/29 18:11:51
イベントから学習しろ
356:デフォルトの名無しさん
09/01/29 18:12:01
>>353
戻り値が分からなくてエラー出る
357:デフォルトの名無しさん
09/01/29 18:15:19
なるなる。ありがとう。やっぱり読むだけじゃ覚えれなそうですね
6年前のPCにVisualStudio入れたら重くなって挫折してしまいました
358:デフォルトの名無しさん
09/01/29 18:17:08
デフォルトのvoidさんは無いのか。
2CHよりひでーな。
359:デフォルトの名無しさん
09/01/29 18:18:33
>>357
csc.exeのあるディレクトリにPATHだけ通せば
あとはコマンドプロンプト+エディタで最低限の環境が揃うぞ
ネットで適当に調べてやってみるといい
360:デフォルトの名無しさん
09/01/29 21:40:32
頻繁に呼ばれる関数で
newを使うのって速度かなり落ちますか?
画像データ用の領域で、一度に640*480*4バイト確保します。
361:デフォルトの名無しさん
09/01/29 21:42:02
関数を呼ぶのに new は必要ない。
362:デフォルトの名無しさん
09/01/29 21:44:47
>>361
日本語読めますか?
363:デフォルトの名無しさん
09/01/29 21:45:07
落ちますか? ってやってみればいいじゃない
newを使うかどうかよりも1MBを頻繁に確保するのは重いかもね
ワーキングセットも大きくなるだろうし
364:デフォルトの名無しさん
09/01/29 21:48:19
コンピュータの性能が良すぎて問題ないという可能性もある。
まずは率直な書き方で作ればいい。
365:デフォルトの名無しさん
09/01/29 21:49:23
キャッシュしても問題ない構造ならとりあえずキャッシュするようにしといてもいいとおもうよ
手間かかるものでもなし
366:デフォルトの名無しさん
09/01/30 01:03:05
>>362
日本語で書いてどうする?
367:デフォルトの名無しさん
09/01/30 01:18:14
>>366
日本語通じてなくてワロタ
368:デフォルトの名無しさん
09/01/30 08:50:41
>>366
アイちゃん乙
369:デフォルトの名無しさん
09/01/30 08:52:34
安価ミス
>>361な
370:デフォルトの名無しさん
09/01/30 10:57:19
ArrayListやList<T>において、
list.Add(new T())
といった感じで配列に追加している場合、
削除系メソッド(Clear、Remove、RemoveAllなど)実行したときに配列内のクラスのインスタンスは
開放されないのでしょうか?
371:デフォルトの名無しさん
09/01/30 11:01:05
その要素を他が参照してなかったらGC対象になる
372:デフォルトの名無しさん
09/01/30 11:09:48
>>371
そういうことなのですね。ありがとうございました。
373:デフォルトの名無しさん
09/01/30 15:09:36
"バイト"や"キログラム"のような単位を表す文字列を
設定されたカルチャに応じて取得できるクラスないですか?
374:デフォルトの名無しさん
09/01/30 15:22:26
標準ライブラリには無い
複数形とか考えると多分作るのは不可能に近い
375:デフォルトの名無しさん
09/01/30 18:15:54
不可能ってこたねえだろ
376:デフォルトの名無しさん
09/01/30 18:46:52
>>375
渦中って読めますか?
377:デフォルトの名無しさん
09/01/30 18:51:34
俺もそんなクラスほしい
標準であってもいいよね
関係ないけど「OK」「キャンセル」「適用」 とかも欲しかった
378:デフォルトの名無しさん
09/01/30 19:14:29
ってか、C#おもろいけど、GUI案件がないからモチベあがんないんだよね。言語的にはいいんだけど。
しょうがないから、ASP.NETもじもじやってる。
379:デフォルトの名無しさん
09/01/30 19:47:32
C#とついでにSilverLigitもやったんだけど、案件が全然ねえ(;´д`)俺は馬鹿だったのか?
380:デフォルトの名無しさん
09/01/30 19:54:31
わざわざ.netを指定してくる企業って皆無では・・・
381:デフォルトの名無しさん
09/01/30 20:20:23
おれずっとc#でやってたよ。MSとちょっと関係ある会社だけど
382:デフォルトの名無しさん
09/01/30 20:21:56
VS2008 + .net2.0
dirフォルダ内のサブフォルダの中身も含めたファイルの個数を出したいです。
using System.IO;
string[] files = Directory.GetFiles( dir, "*", SearchOption.AllDirectories);
として、files.Length を数えてるんだけど、ファイル数が5000とかあるフォルダを
検索しなくちゃならないので、さすがに遅いです。
この段階ではファイル名のstringは使わないので、個数だけで良いのですが、
サクっと出せるような方法ありませんか?
383:デフォルトの名無しさん
09/01/30 20:48:30
ないよ
遅いのは結局IOであってファイル名とかはほぼ関係ない
384:デフォルトの名無しさん
09/01/30 20:49:49
>>383
了解しました。
我慢します。
385:デフォルトの名無しさん
09/01/30 21:01:30
Rectangle rect;
rect = null;
としたところ、Rectangle 型なのでnullは入れられないと言われました!
VB.NETだと、どんな型の変数にも Nothing を入れられるのでつい同じかと
思っていました。どうやったら同等の処置が可能でしょうか、よろしくお願いします。
386:デフォルトの名無しさん
09/01/30 21:04:19
VBでも本当にNothingを入れることはできないよ
Rectangle? rect;
rect = null;
※使うときはRectangleにキャストすること
387:デフォルトの名無しさん
09/01/30 21:05:31
>>385
Rectangleは値型だっけか。これでどうだ。
Rectangle? rect = null;
388:デフォルトの名無しさん
09/01/30 21:13:03
>>385
VB の Nothing は null じゃなくて Zero Fill な値(既定値)だからな
C# 的には null と既定値は区別される。C# 的には VB の Nothing
は default(T)。
なので VB の Nothing 代入に近いのは
var rect = default(Rectangle);
だぁね
389:デフォルトの名無しさん
09/01/30 21:15:16
>>386-387
どうもです。やってみましたところ、キャストを入れた上で一応解決かと思った
のですが、一つだけ問題がでました。Contains()メソッドを使っているところで
'System.Nullable<System.Drawing.Rectangle>' に 'Contains' の定義がありません
というエラーとなりました。これは
if ((Rectangle)rect.Contains(e.Location))
{・・・}
のように使ってみたのですが、他の書き方しないとだめでしょうか。
390:デフォルトの名無しさん
09/01/30 21:18:27
>>388
ご教示どうもです、知りませんでした。
>なので VB の Nothing 代入に近いのは
>var rect = default(Rectangle);
こういうのもあるんですか!この場合は
if (rectG != null){・・・}
のように使えるでしょうか。そうだ、やってみます。
391:デフォルトの名無しさん
09/01/30 21:19:56
((Rectangle)rect).Contains
>>390
できません
rectG!=default(Rectangle)ならできるけど(0, 0, 0, 0)とは区別できないよ
392:デフォルトの名無しさん
09/01/30 21:23:29
defaultはgenericで使うことを前提に作られているんで若干癖がある。
Rect(0,0,0,0)に初期化することが目的なら
var rect = new Rectangle();
未初期化のRectangleが欲しいのなら
Rectangle rect;
でいい。
393:デフォルトの名無しさん
09/01/30 21:24:41
>>390
おおっと。
いや VB 使っているうちは VB の流儀でいっていいと思うんだが
C# に来たんだから C# の流儀にあわせて区別しような。
Rectangle? val = null;
のほうを使えってことだけど。
>>389 のほうは rect.Value.Contains(e.Location) な。
null だったら例外出るが。例外がいやなら
if( rect.HasValue && rect.Value.Contains(e.Location) )
かね。
394:デフォルトの名無しさん
09/01/30 21:24:56
>>391
>((Rectangle)rect).Contains
早速ありがとうございます、これで大丈夫でした、助かりました。
>rectG!=default(Rectangle)ならできる
わかりました。いろいろご教示ありがとうございました!
皆様本当にありがとうございました!またよろしくお願いします!!
395:デフォルトの名無しさん
09/01/30 21:26:18
うぽ!
(rect ?? new Rectangle()).Value.Contains(
396:デフォルトの名無しさん
09/01/30 21:26:39
っていうかVBでも値型をNothingと比較するのはダメだろ
ゼロ初期化されたものと同じとわかっててやるならいいけど,>>394はわかってなさそう
397:デフォルトの名無しさん
09/01/30 21:31:15
>>392
>>393
>>395
C#の凄い表現のバリエーションにびっくりです、またこれから勉強致します。
>>396
わかってなかったです。すみません・・・。
ではまた。
398:デフォルトの名無しさん
09/01/30 21:33:38
Rectangleをnullと初期化したあとにどう使うんだろう・・・
399:デフォルトの名無しさん
09/01/30 21:40:02
フラグ代わりだよ
Rectangle rect;
bool isRectAssigned;
みたいなのってよく出てくるだろ
これを一つにまとめたのがnullable
400:デフォルトの名無しさん
09/01/30 21:43:05
IList<T> list = new List<T>();
とかやってたら、IListの方にはForEach()がなくて涙目なんだけど、そういうもんなの?
401:デフォルトの名無しさん
09/01/30 21:55:52
ForEachぐらい自分で書けばって
402:デフォルトの名無しさん
09/01/30 22:07:07
nullable ってキモいからまだ使ったことがないな
すこし慣れてみるか……
403:デフォルトの名無しさん
09/01/30 22:09:46
拡張メソッドで自作するのは簡単
でもEnumerable.ForEachが無いことを考えると,素直にforeach書けということなんだろうと思う
404:デフォルトの名無しさん
09/01/30 22:26:01
WPFではShowDialogの戻り値がbool?になってたりするね
405:デフォルトの名無しさん
09/01/30 22:48:24
正確に20msで処理をしてFORMのPictureBoxを触りたいときは、
BackgroundWorker+System.Timers+AutoResetEventでいいですか?
他にもっといいやり方があるんなら教えて欲しいのですが…orz
406:デフォルトの名無しさん
09/01/30 22:57:49
>>405
> 正確に20ms
まずこれが難しい。timeBeginPeriod か MMCSS 使えば
ある程度いけるかもしれないけど、あくまである程度。
さらにいいやり方となると Forms 使うのが間違ってる。
407:デフォルトの名無しさん
09/01/30 22:58:20
20msは厳しいんじゃないの
更新間隔は20msよりも長くして,
そのつど経過時間を計測してそれから計算してその結果をもとにしてPictureBoxを更新したほうが
408:デフォルトの名無しさん
09/01/30 23:06:23
コールバック間隔は,Application.Idleイベント使うなり自分でメッセージループ回すなりして
その中でStopwatch使って時間計測すればある程度正確にできるけど
フォームの更新が20msでは絶対無理
409:デフォルトの名無しさん
09/01/30 23:27:55
20msってどこから来たの?
測定機械のタイミングとか?
GUIの更新は後回しにした方がいいんじゃね?
410:デフォルトの名無しさん
09/01/31 00:53:40
20msってWindowsのインターバルタイマーで拾えるの?
割り込み上がっても、処理が間にあわん気がするんだけどね
リアルタイムOSでというのなら分からんでもないけど。
#組み込み用が対象なのかな?
割り込み->データをFIFOQueueに追加->queueのデータをGUI処理
になるんだろうけど(sharedメモリ経由か)
#割り込みコンテキストってWinにはあるのかな?
411:デフォルトの名無しさん
09/01/31 02:40:33
いつも思うんだが、なんか2chって日本語として成立してない質問でも適当にESPを働かせて、
(というより、回答する側も他人の文章を正確に読解する能力がないだけ、という方が
より真相に近いと思うんだが)回答する奴が多すぎないかね。
>>405
「正確に20msで処理をして」とはどういう意味?
正確に20ms間隔でイベント処理をしたい、って意味なの?
いずれにしても、「正確」という表現はもっと定量的な表現にする必要があるだろ?
仮に20ms間隔でGUIを更新したい、って意味だとしたら、
今時のPCなら単純にSystem.Timers.Timer使っても±5ms以内の誤差で可能だと思うけど。
少なくとも、平均速度として50回/秒が実現できればいいということなら
(意味があるかどうかは別として)ほぼ確実に出来ると思う。
もちろん糞重い描画処理をしてたらあっという間に破綻するけど。
いざとなったらスレッドでThread.Sleep(0)と、Stopwatchをポーリングして
20msごとにControl.BeginInvoke()を実行する無限ループで実装したっていいし。
412:デフォルトの名無しさん
09/01/31 04:51:35
えらい自信だからためしに作ってみたけど
System.Timers.Timerなんて無茶苦茶ばらつくじゃないか
413:デフォルトの名無しさん
09/01/31 09:07:32
エスパーで解釈すると、
20msecでコントロールのアップデートはありえないから、
CreateGraphics()で得たGraphicsで直接描こうとしている。
CreateGraphics() + GDI+メソッドは別スレッドからでも使える。
こういう用途にはFormかPanelが適当なのだけどVB6以来の伝統かPictureBoxを使いたがる人が多い。
Timers.Timerはタイマーイベントの処理時間分、間隔がずれてゆくはずだからその分の解消をしたい。
そんなとこだろ。
414:デフォルトの名無しさん
09/01/31 11:17:09
>20msecでコントロールのアップデートはありえないから、
>CreateGraphics()で得たGraphicsで直接描こうとしている。
じゃあオフスクリーンにも20msecで描画する必要ないじゃん
415:デフォルトの名無しさん
09/01/31 11:41:59
へっぽこエスパーばっかりだな
とくに>>411
416:デフォルトの名無しさん
09/01/31 11:52:58
>>414
オフスクリーン
というのはどこから出てきたんだ?
417:デフォルトの名無しさん
09/01/31 11:58:29
まあ>>405が来るのを待とうじゃないか
418:デフォルトの名無しさん
09/01/31 11:58:36
どうやってもGDI+で20msは厳しいでしょ