ふらっとC#,C♯,C#(初心者用) Part36 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
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
@キャンセルボタンを押す
Aダイアログを出力して確認 OKかキャンセル
Bキャンセルなら本処理終了 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から変更できなかった。いろいろ複雑だ。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4992日前に更新/209 KB
担当:undef