[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 03/14 21:05 / Filesize : 161 KB / Number-of Response : 689
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part26



1 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 11:07:29 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part25
pc11.2ch.net/test/read.cgi/tech/1204104280/

630 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 02:22:28 ]
ポインタ・ハンドルはIntPtr
DllImportのCharSet

631 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 03:18:25 ]
class Program {
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
internal static extern int LoadLibraryW(string lpLibFileName);
[DllImport("kernel32.dll")]
internal static extern int FreeLibrary(int hModule);
[DllImport("kernel32.dll")]
internal static extern int GetLastError();
static void Main(string[] args) {
int hModule = LoadLibraryW(@"C:\WINDOWS\Resources\Themes\Luna\luna.msstyles");
if (hModule == 0) {
int Err = GetLastError();
Console.WriteLine("ロード失敗: {0}",Err);
(以下略)
>>629-630
遅レスすみません、ありがとうございます。

エラー&H7Eから、ファイルのロードそのものに失敗していたようです。
明示的にUnicodeを指定してintのまま実行すればロード/解放、共に成功しました。

しかしIntPtrにすると「hModule == 0」で『演算子 '==' を 'System.IntPtr' と 'int' 型のオペランドに適用することはできません。』となり実行出来ませんでした。

632 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 03:22:09 ]
IntPtr.Zero

633 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 03:30:46 ]
if (hModule == IntPtr.Zero) {

>>632
出来ました、ありがとうございます。

VB.NETとC#は方言の関係と思っていましたが、実際はかなり違うのですね…精進します。

634 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 03:33:40 ]
>>633
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
internal static extern int LoadLibrary(string lpLibFileName);

でいいよ。

635 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 03:34:15 ]
[DllImport("kernel32.dll")]
internal static extern int LoadLibrary(string lpLibFileName);

636 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 03:34:51 ]
その場合は CharSet = CharSet.Auto のほうがいい。

637 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 13:00:05 ]
コレクション初期化子ってICollectionとかIDictionaryとか関係なくて
Addという名前のメソッドを呼び出すだけなのか
引数の数も自由でかなり変態的な使い方ができそう

638 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:22:07 ]
フリーウェアだけど、オンラインで公開する場合、
ドボンとかのサンプルをコピペした場合何か断りみたいなのいるのかな?

ソースを見たらバレバレなので黙って使っていいのか悩んでいます。



639 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:37:10 ]
どうせそれも元々MSDNとかその他から引っ張ってきたものが殆どだし
勝手に使っちゃだめだったら何のために公開してるのかわからん

640 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:38:57 ]
>>638
ライセンスに関する記述無いな。どうしても心配ならメール送ってみな

641 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:24:02 ]
サンプルっていうのは「考え方」のサンプルであって
コピペしてそのまま使うなんてナンセンスだろw

642 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:39:21 ]
staticの使い方で質問があります。

Class1にある値を返すメソッドがあります。

例1:
public string Hoge(){...}

メインフォームで
Class1 class1 = new Class1();
string s = class1.Hoge();

例2:
public static string Hoge(){...}

メインフォームで
string s = Class1.Hoge();

どちらが正しい使い方なのでしょうか?

643 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:40:56 ]
どちらも間違ってないけど,フィールドが必要なら特別な理由がない限り迷わず前者

644 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:52:47 ]
>>643
フィールドとはボタンなどのコントロールのことでしょうか?
Class1はstringの値を返すHogeメソッドだけです。
複数回呼ぶことがあります。
staticをつけている方がメモリの確保など無駄なパフォーマンスがなくて
良さそうかなと思ったのですが、普通は前者なんですね。

645 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:55:09 ]
よく分からないうちは,staticを付けた変数は使わないものと思っておk

646 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:57:28 ]
>>640
あのコードに独創性を垣間見たんですね、わかります

647 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:09:24 ]
C#にはフィールドなんてない。

648 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:10:56 ]
staticとかってooの理想概念から外れてるよね。
staticメソッドばっかりになったらCで書いてるのと変わらないし。
ここら辺がoopの限界なのかな。
そろそろ次の新しい概念出てきてもいい頃だな。



649 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:20:15 ]
>>647
お前は何を言ってるんだ

650 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:24:45 ]
>>647
C#にフィールドはあるんだよ。

651 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:30:24 ]
ごめん間違った、フィヨルドだったわ

652 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:32:31 ]
>>648
制限付きのクラスオブジェクトと考えれば別に不自然とも思えないけど

653 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:33:22 ]
おもろない

654 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:42:32 ]
>>652
クラス名の飾りがついただけのグローバル関数/変数とも考えられる

655 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:42:47 ]
この違いってなんでしょう?
下の方だとエラーになるのです

Color.FromArgb(int.Parse((string)new object[]{"-1"}));
Color.FromArgb((int)new object[]{"-1"});

656 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:45:09 ]
上もエラーになるよ

657 名前:655 mailto:sage [2008/04/06(日) 22:53:16 ]
理由がわかりました
すいません

658 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 23:58:36 ]
>>652
オブジェクト指向って実世界の”モノ”とは到底かけ離れてるよね?
でもそれに近い概念でインスタンス化させてるのに、staticメソッドはそのまま使えたりしたらなんだかなぁと思う。
よくMathクラスなんかもインスタンス化した方が不自然だ、とか言われるけど
intやifですらオブジェクトと見なそうという言語や思想がある中でとっても違和感を感じずにはいられない。



659 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 00:16:58 ]
引数だけで結果が決まるならインスタンスは無意味でしょ

660 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 00:20:32 ]
それはstaticの意味、用途が分かっていないんだと思うが

661 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 00:52:31 ]
double d = -1.0;などとして、
d.sin()とかd.abs()とかだったら、なんてことは俺も考えたことある。

662 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 01:23:14 ]
拡張メソッドはリフレクション使えないから駄目とか?

663 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 09:21:22 ]
「フィヨルドの恋人」
     主演:大泉洋

664 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 09:43:47 ]
すみません、SourceGridというグリッドコントロールを使ってプログラムを作っているのですが、
コントロールの初期化について分からないことがあるので教えてください。

プログラムの構成は、ひと月ごとにその月のすべての日の行をグリッド上に表示していくような感じです。
現在表示すべき(グリッドが描画時に情報として用いる)年/月は、staticな変数に記録して管理しています。
ここで、そのstaticな変数を変化させてみても
(たとえば2008/4の状態から、ひと月前の状態にして2008/3とする)、
変数自体は変化するもののフォーム上のグリッドの表示に変化は見られません。
Update()なども試みてみましたが、反応なしです。

このような場合、どうすればグリッドの表示を更新することができるでしょうか?

665 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 09:53:41 ]
こんにちは。
エクスプローラーのリストビューのタイプの変更を行いたく思い、少し調べているのですがよくわからない部分があるので質問させてください。

yokohama.cool.ne.jp/chokuto/urawaza/lv_icon.html
を読んでタイプの変更は出来そうなのですがWindows Vistaの特大アイコンなどはどのようなメッセージを送ればいいのかわからないのです。
ヒント等ご教授戴ければ幸いです。

666 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 13:27:25 ]
>>664
>現在表示すべき(グリッドが描画時に情報として用いる)年/月は、staticな変数に記録して管理しています。

これほんと?
これだと複数コントロール貼って使う場合とかにまずいからこういう設計にしないと思うんだけど。
何か勘違いしてない?俺が作るとしたらプロパティで実装するけどなぁ。

667 名前:デフォルトの名無しさん [2008/04/07(月) 13:49:34 ]
・あるクラスA,B,Cが内部クラスを持っていて、
その内部クラスのフィールド変数の品揃えは未定だけど、
フィールド変数を使っての処理は決まっている。

・クラスA,B,Cごとに内部クラスの品揃えに違いがある。

このような場合、どうしたらすっきりした実装ができますか?

668 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 14:20:41 ]
A,B.Cは最低限の共通のフィールドを持っていて,それらに対して
共通の処理を行うならプロパティを宣言したインターフェイスを作ってA,B,Cに実装する
処理の目的だけが決まっていて,フィールドをどう使うかはA,B,Cそれぞれで全く違うんだったら
その処理を行うメソッドをインターフェイスに宣言してそれをA,B,Cが実装する形にすれば
きれいかもしれないけど実装の手間は変わらん



669 名前:667 [2008/04/07(月) 14:41:39 ]
>>668
提案ありがとうございます。

難しいですね。。。
フィールドに抽象メンバなるものを持てて、
抽象メンバ取り出しメソッドみたいなものがあって、
取り出したメンバにたいしてforeachをかける

みたいな実装できたらよかったのですが。。。

670 名前:667 [2008/04/07(月) 15:04:25 ]
private権限でunion配列を用意し、
値そのものはこの配列に格納することにする。
フィールドのプロパティでその配列にアクセスするようにする。
実際の処理は、配列に対して行なう。
(クラスによってその配列の長さは異なる。)

で実現できそうです。

671 名前:665 mailto:sage [2008/04/07(月) 16:46:06 ]
>>666
ご返答ありがとうございます。
OOPは初めてなので、きっと勘違いしていると思います。

そのようなプロパティ実装をした非static変数は、
各メソッド内でインスタンス生成してから用いると認識していますが、その場合、
たとえばグリッドコントロールが今表示している年/月を取得したりすることはできるのでしょうか?
それとも、グリッドを配置しているFormのクラス内に、
プロパティ実装した変数をフィールドとして用意するのでしょうか?
後者は、とりあえず試みてはみたものの、やはり変数をいじってもグリッドに変化が見られません。

672 名前:664 mailto:sage [2008/04/07(月) 16:48:07 ]
>>671の名前欄のレス番を間違えました orz
汚してしまいすみません。

673 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 17:55:48 ]
this.textBox1.Text = a;//aはフィールド
a = "変更した";
もしかしてこれで変更できると勘違いしてない?

674 名前:664 mailto:sage [2008/04/07(月) 18:02:29 ]
>>673
思いっきりしてます!
正しくはどうすればよいのでしょうか・・・?

675 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 18:34:12 ]
>>674
string _str;
public string Str {
  get { return _str; }
  set
  {
   sourceGrid.DateTime = value;
   _str = value;
  }
}

こんな感じのことがしたいの?

取得ってのは普通に
var value = souceGrid1.DateTime;
とかでいいと思うんだけども。
ソースグリッドとかいうものを使ったことないから分からんけど。

676 名前:675 mailto:sage [2008/04/07(月) 18:42:07 ]
あーそうか。もしかしてソースグリッドの表示年月の変更って
プロパティじゃなくてメソッドかなんかでやってんのかな?

sourceGrid.SetMonth(value);

こんな感じで。
プロパティでなんかありそうだけどね。
面倒だがちょっと導入して試してみるか。

677 名前:675 mailto:sage [2008/04/07(月) 18:47:07 ]
と思ったが、ユーザー登録が必要だということで面倒だからやめた。

とりあえず>>664はソースグリッドコントロールの年/月を取得もしくは設定しようとしている部分の
コードを晒してくれ。
取得ができないような設計にはなってないと思うんだ。

678 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 19:27:02 ]
XmlDocument xml = new XmlDocument();
xml.Load(url);

xml["abc"]というノードがあるのか調べるにはどうしたら良いのでしょうか?





679 名前:664 mailto:sage [2008/04/07(月) 19:48:19 ]
>>675さんのお話を聞くと、自分のコーディングの方向性が
根本的に間違っているような気がしてきました・・・。
ここに書き込む前は、以下のような方法で実現しようとしていました。

namespace下に以下のようなクラスを作成し、
    public class CurrentYearAndMonth
    {
        public static int cYear;
        public static int cMonth;
        public static int cMonthDaysCount;      
        public static void SyncYM()
        {
            DateTime dtNow = DateTime.Now;
            cYear = dtNow.Year;
            cMonth = dtNow.Month;
            cMonthDaysCount = DateTime.DaysInMonth(cYear, cMonth);
        }
    }
これに対して、グリッドを配置しているFormのForm_Loadメソッド内で、
簡潔に書くと以下のように上記の変数を使っています。
            for (int r = 1; r <= CurrentYearAndMonth.cMonthDaysCount; r++)
            {
                grid1.Rows.Insert(r);
                grid1[r, 0] = new SourceGrid.Cells.Cell(CurrentYearAndMonth.cMonth.ToString() + "月" + r.ToString() + "日");
   }
この状態で、Load完了後にcMonthなどの変数値をいじってFormやgrid1をUpdate()などしてみると、
UI上の表示も変化するかなと目論んでいたんですが、やはり間違っているのでしょうか?

(ちなみに、SourceGridは
ttp://sourceforge.net/project/downloading.php?group_id=178155&use_mirror=nchc&filename=SourceGrid4_11.zip&38810142
からダウンロードできます。)

680 名前:664 mailto:sage [2008/04/07(月) 19:50:46 ]
追記です。
CurrentYearAndMonth内のSyncYM()メソッドは、OSの現在時刻と合わせるためのもので、
プログラム起動時のみ1度だけ使用しています。

681 名前:678 mailto:sage [2008/04/07(月) 19:54:29 ]
自決

682 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:00:02 ]
以降はチラシの裏に書けよw

683 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:01:52 ]
>>679
コントロールに値を渡した後は元の変数とは何の関係もなくなるから
更新するときは毎回全部設定しなおす必要がある
それと,フィールドをstaticにするのは誰がどう見ても間違い

684 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:04:25 ]
>>665をお願いします...

685 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:32:25 ]
どう見てもC#の質問に見えないからスルーされたんだろ。

686 名前:664 mailto:sage [2008/04/07(月) 21:00:58 ]
>>683
なるほど。そうでしたか。

試行錯誤の結果、
     <変数値変更>
     this.Controls.Remove(grid1);
     grid1 = new SourceGrid.Grid();
     grid1.Refresh();
     this.Controls.Add(grid1);
     <grid1の表示調整>
     <Form1_Load メソッドでgrid1に対して行われるのと同等の処理>
というような流れで、無事初期化・表示更新を行うことができました。
staticについても見直してみます。

貴重なお時間を割いてアドバイスいただき、本当にありがとうございました。

687 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 21:36:31 ]
>>685
そうでしたか。ごめんなさい。

688 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 21:44:54 ]
>>678
ノードっつっても色々あるがどのノード?
あとxml["abc"]じゃなくてabcを調べたいんだよな?








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<161KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef