ふらっとC#,C♯,C#(初心者用) Part26at TECH
ふらっとC#,C♯,C#(初心者用) Part26 - 暇つぶし2ch353:デフォルトの名無しさん
08/03/30 17:47:39
分けて受信とかTCPにそんな機能無いから

354:デフォルトの名無しさん
08/03/30 17:50:29
>>353
そうするとデータの最後に何らかの〆データを付加するしかないのですね

355:デフォルトの名無しさん
08/03/30 17:58:46
>>346
getで例外投げるのはガイドライン違反

356:デフォルトの名無しさん
08/03/30 18:06:21
Nullable<>.Valueとか普通に例外投げてくるけどね

357:デフォルトの名無しさん
08/03/30 18:11:57
それはキャッチされることを想定してないから問題ないんじゃないの
javaでいうところのチェック済み例外みたいなのをgetが投げちゃダメって意味だと思う

358:デフォルトの名無しさん
08/03/30 18:50:09
ref class Anime
{
  private Dictionary<Int32, String> titles;
}

こんなクラスで

Anime ccs = new Anime();
ccs.Title[0] = "さくらと不思議な本"

Console.WiteLine(ccs.Title[0]);

みたいに使えるプロパティを作るにはどうすればいいですか?
上記以外のコレクションへの直接操作は出来ない感じで。

359:デフォルトの名無しさん
08/03/30 18:53:15
>>358
>>341

360:デフォルトの名無しさん
08/03/30 18:58:46
>>358
まずC#に ref classはないだろ

class Anime
[
private Dictionary<int,string> titles;

public Dictionary<int,string> Titles{ get{ return titles; } }
}

これで出来る

361:デフォルトの名無しさん
08/03/30 18:59:01
>>358
public Dictionary<int, string> Titles { get{ return this.titles; } }

362:デフォルトの名無しさん
08/03/30 19:03:48
>上記以外のコレクションへの直接操作は出来ない感じで。
インデクサを通さないと他の操作やりたい放題だよ
public string this[int index] {
 get { return titles[index]; }
 set { if(titles.ContainsKey(index))titles[index]=value;else titles.Add(index,value); }
}

363:デフォルトの名無しさん
08/03/30 19:05:50
それだと構文が異なるだろ。

C#は名前つきインデクサ作れないから、プロキシオブジェクトを返さないと無理だ

364:デフォルトの名無しさん
08/03/30 19:08:21
iterindexコードスニペットを使えば幸せになれるかも
インデクサ自体の実装は>>362みたいな感じで

365:デフォルトの名無しさん
08/03/30 19:11:05
そもそもそれ関数じゃだめなのか?

366:デフォルトの名無しさん
08/03/30 19:50:51
DictionaryBaseでも継承したネストクラスを作って公開するのが普通だろ

367:デフォルトの名無しさん
08/03/30 19:56:42
今更非ジェネリックは無いわ

368:デフォルトの名無しさん
08/03/30 20:18:48
こうだろ

class Anime
{
Dictionary<string,int> titles;
TitlesIndexer indexer;

public Anime()
{
titles = new Dictionary<string,int>();
indexer = new TitlesIndexer(titles);
}

public TitlesIndexer Titles{ get{ return indexer; } }

public class TitlesIndexer
{
Dictionary<int,string> titles;

public TitlesIndexer(Dictionary<int,string> titles)
{
this.titles = titles;
}

public string this[int index]{ get{ return titles[index]} } }
}
}

369:デフォルトの名無しさん
08/03/30 20:21:36
358 じゃないですが、プロキシオブジェクトと聞いて・・・
以前からある System.Collections.ArrayList.ReadOnly や System.Collections.ArrayList.Synchronized
に対応する
ジェネリックス版は無いのでしょうか?
見つからなくてとりあえず自作してしまっているので、あれば交換しておきたい所。

370:デフォルトの名無しさん
08/03/30 20:22:31
>>365
そんな最低な仕様は嫌だろ、Linqも何も使えなくなっちまう。

371:デフォルトの名無しさん
08/03/30 20:24:49
>>369
ないよ。なくなっちゃった。

372:デフォルトの名無しさん
08/03/30 20:30:53
List<T>.AsReadOnlyはある

373:デフォルトの名無しさん
08/03/30 20:38:24
>>372
ども、Asが付いたのか
なんとも実装が中途半端だな、問題が見つかったのだろうか?

374:デフォルトの名無しさん
08/03/30 20:38:54
System.Collections.ObjectModel.ReadOnlyCollection<T>ってのもある。
Synchronizedは・・・まぁ手抜きサービスとしてはあまりに
お粗末すぎるから廃止されたんじゃねーの?

375:デフォルトの名無しさん
08/03/30 20:41:39
>>358
敢えてタイトルの中身には突っ込まないでおこう。

376:デフォルトの名無しさん
08/03/30 20:59:46
オンラインMSDNが最近重いからオフラインにインストールしてみたのですが・・・
キーワード検索で「socket」って入れるとSystem.Net.Sockets.SocketExceptionしか出てこない
こんなものでしょうか?、それとも使い方を間違えているのでしょうか?

TcpClient tcp = listener.AcceptTcpClient();
このtcpからリモートのIPを調べる方法を知りたいのです


377:デフォルトの名無しさん
08/03/30 21:19:57
WindowsSDK入れたら表示できるようになったような気がする

378:デフォルトの名無しさん
08/03/30 21:27:27
>>376
TCPは知らないけど、
どのMSDNライブラリを入れたのか?
フィルタが設定されていないか?

これ入れた?
URLリンク(www.microsoft.com)

379:デフォルトの名無しさん
08/03/30 21:49:59
>>374
問題が分ってきた
使いにくい理由は、SyncRootをコンテナが持っているからで
外部から渡せば十分使い物になりそうな感じがするんだけどな。

380:デフォルトの名無しさん
08/03/30 22:36:06
>>377-378
VS2008ExpressJPNX1428694ってDVDでVCSやVCとかも入った物から入れました。
>>378のサイズを考えると上記のDVDには一部しか入っていないようですです。
ありがとうございます。

しかし2464.6 MBはADSLには辛い・・・。


381:デフォルトの名無しさん
08/03/30 23:32:42
>>358
IList<>とIDictionary<>のインデクサの汎用ラッパー作ってみた

public static class Indexer {
public static DictionaryIndexer<TKey, TValue> GetIndexer<TKey, TValue>(this IDictionary<TKey, TValue> dict) { return new DictionaryIndexer<TKey, TValue>(dict); }
public static ListIndexer<T> GetIndexer<T>(this IList<T> list) { return new ListIndexer<T>(list); }
}

public sealed class DictionaryIndexer<TKey, TValue> {
private IDictionary<TKey, TValue> dict;
internal DictionaryIndexer(IDictionary<TKey, TValue> dict) { this.dict = dict; }
public TValue this[TKey key] { get { return dict[key]; } set { dict[key] = value; } }
}

public sealed class ListIndexer<T> {
private IList<T> list;
internal ListIndexer(IList<T> list) { this.list = list; }
public T this[int index] { get { return list[index]; } set { list[index] = value; } }
}



382:デフォルトの名無しさん
08/03/30 23:40:27
C#+ASP.NETの学習で何か良書はありませんでしょうか?
(値段、初心者向け問わず、なるべく内容の濃いもの)

383:デフォルトの名無しさん
08/03/31 15:40:49
C#で
URLリンク(www2s.biglobe.ne.jp)
のような処理を行いたいのですがどうすればよいのでしょうか?
ヒントでも構いませんのでご教授いただければ幸いです。

384:デフォルトの名無しさん
08/03/31 15:49:26
>>383
シェル拡張したいってことかな?
↓こんな話が。
URLリンク(blogs.wankuma.com)

385:デフォルトの名無しさん
08/03/31 16:34:10
>>384
シェル拡張ではない気がします......
キーボードフックでF2キーを監視しているのでしょうか?

386:デフォルトの名無しさん
08/03/31 16:40:49
普通にサブクラス化してるだけじゃないの?

387:デフォルトの名無しさん
08/03/31 17:12:17
配列の中にある数字をすべて足すにはどうすればいいですか?
ちなみに配列は一次配列で内容はint型の整数です。

388:デフォルトの名無しさん
08/03/31 17:20:23
var arr = new { 1, 2, 3 };
var total = arr.Sum();

.NET 3.0かそれ以前なら普通にループ。

389:デフォルトの名無しさん
08/03/31 18:20:39
>>385
見るからにシェル拡張に見えるよ

390:デフォルトの名無しさん
08/03/31 19:13:52
>>388
new[]だろ?

391:デフォルトの名無しさん
08/03/31 20:45:58
C++から移行してきたんですが、C++用のDLLってC#で使えますか?
MFCに依存しないWin32 DLLです

392:デフォルトの名無しさん
08/03/31 20:49:51
C++特有の機能を使っていないただの関数ならできる。
あとはCOMになっているやつもいける。

393:デフォルトの名無しさん
08/03/31 20:52:06
>>389
どうもありがとうございます。
シェル拡張部分をCやC++で書いて処理部分をC#で書く、と言う形になるのでしょうか?


394:デフォルトの名無しさん
08/03/31 20:53:57
>>392
てことは、クラスとかは無理ってことでしょうか

395:デフォルトの名無しさん
08/03/31 20:58:54
C++/CLIつかえばいいよ

396:デフォルトの名無しさん
08/03/31 21:07:27
IDisposable実装してDisposeしたいのですが、メンバのすべてを
自分で明示的にクリアしなければならないですか?
たとえば、プロパティ用の一時変数とかも含めて。

public List<int> hoge;
private string _piyo;
private int _fuga;

↑がある場合は、↓みたいに全てクリアが必要なのでしょうか?

hoge = null;
_piyo = null;
_huga = 0;

397:デフォルトの名無しさん
08/03/31 21:26:14
unmanagedなリソースだけでいい

398:デフォルトの名無しさん
08/03/31 21:37:07
別にIDisposable実装したからってGCに特別な影響があるわけじゃないよ
使い終わったら実行してほしい普通のメソッドを実装するだけ

399:デフォルトの名無しさん
08/03/31 21:39:58
フィールドにDisposeメソッド持っているやつがいたら
そいつは呼んでおけ。

400:396
08/03/31 22:02:30
>>397-399
はい、わかりましたー。

401:デフォルトの名無しさん
08/03/31 22:08:03
>>393
というか要するに複数バージョンのCLRが同一プロセスで動けないのが
問題なわけさ。エクスプローラは単一プロセスにシェル拡張読み込む
ので別バージョンのCLR使うシェル拡張読み込んだ瞬間クラッシュしちまう


それが解決出来るのならなんでもいい。といってもC++ネイチブ使ってアウト
プロセスにしちまうくらいしか思い付かないがまあ確かに出来そう。

402:デフォルトの名無しさん
08/03/31 22:37:24
MSDN引きながらちょろちょろ半分コピペしながら書いてるけど
量が多すぎてC# .Net Frameworkがわかった気がしない・・・。
しかも、なにかやりたいことがあって、それが可能か不可能か
を調べるのに、MSDNに記載されている箇所を正しく見つける
ことができずに、ぐぐって見つけたどこかの海外のフォーラム
とかブログの記事なんかで推測する始末・・・。

403:デフォルトの名無しさん
08/04/01 00:03:34
>>402
量が少なく過ぎよりははるかにマシだから。

404:デフォルトの名無しさん
08/04/01 00:07:43
どのみち外部参照するなら量がすくないほうが無駄時間へって親切

405:デフォルトの名無しさん
08/04/01 00:10:25
MSDNって日本語で読むと混乱するよなw

406:デフォルトの名無しさん
08/04/01 00:12:41
>>404
WPFの適当なドキュメントを見てみろ
今までなんだかんだいって頼りにしてたんだなと痛感する

407:デフォルトの名無しさん
08/04/01 00:13:40
MidPointRoundingの説明なんて誤訳に近いよな。

408:デフォルトの名無しさん
08/04/01 00:14:10
外部でさがすんだろ?
ならないほうがいいじゃん

409:デフォルトの名無しさん
08/04/01 00:19:46
英語読めね

410:デフォルトの名無しさん
08/04/01 00:21:52
勉強するだけでOK

411:デフォルトの名無しさん
08/04/01 00:25:28
いやMSDNを超軽くしてくれればそれだけでいい・・・。あの重さは凶悪だろ・・・。
あれだけで引く気がうせる。

412:デフォルトの名無しさん
08/04/01 00:31:23
ローカルな MSDN はいいんだが、
ネット上の MSDN は最悪だな。

413:デフォルトの名無しさん
08/04/01 00:33:37
まちがって最初にネット検索に設定してからローカルのMSDNをみることができない
だれか助けて><

414:デフォルトの名無しさん
08/04/01 00:43:38
メモリ1Gしか積んでないからかもしれないけど、
ローカルでもSystem.Windows.Forms名前空間みたいに
でかいページを表示しようとするときと移動するときは重い

415:デフォルトの名無しさん
08/04/01 00:49:44
MSDNライブラリのためにPCを買い換えなければならんとは。くちおしや。

416:デフォルトの名無しさん
08/04/01 09:05:42
typedefはないの?

417:デフォルトの名無しさん
08/04/01 09:34:04
要らないの

418:デフォルトの名無しさん
08/04/01 09:50:39
listview+= mouseclickはアイテムが存在しない所では発生しないみたいですが、
これをlistview内であれば発生するようにしたい場合はどうしたら良いでしょうか?

419:418
08/04/01 09:54:13
mousedownか、コントロールとコンポーネントの違いすら理解していなかったorz

420:デフォルトの名無しさん
08/04/01 16:34:24
DataTable.PrimaryKeyを設定したものをWriteXmlした時にファイルの内容を見てみると
プライマリーキーらしい情報が見つからないのですがこれは先頭にあるカラムが自動的に
プライマリーとして扱われるという認識で合っていますか?

421:デフォルトの名無しさん
08/04/01 16:58:56
合ってない。
プライマリキーの情報を書き込みたいなら XmlWriteMode.WriteSchema が必要。

422:デフォルトの名無しさん
08/04/01 17:01:03
クラスなんかC++同士でも怪しいだろ

423:デフォルトの名無しさん
08/04/01 19:28:25
>>406
同感、なんだかんだいってもMS頑張ってるよ、もっともっと頑張って欲しいが
WPFにしてもLINQにしても、めちゃめちゃ使えるのに、リバースエンジェニアリング的なことまでやらないと理解できないのはあまりに寂しい。

>>393
マネージドコードが使えるシェル拡張が強く欲しいよな
しかし、現状では素直にComで作っとけ。

424:デフォルトの名無しさん
08/04/01 20:53:24
listboxでアイテム削除を繰り返しているとインデックスがずれるらしいのですが、どうすれば良いですか?
たぶんこんな感じにずれてます。
index 値
1 AAA
2 BBB
3 CCC

2番を消すと
1 AAA
2 CCC

425:デフォルトの名無しさん
08/04/01 21:25:35
どうと言われてもそういうものだから仕方がない。
何をしたいのか具体的に書いてくれないと、書きようがない。
ヒントとしてはItemsに設定できるのはObjectで、
SelectedItem系でそのObjectが取得できるってこと。

426:デフォルトの名無しさん
08/04/01 21:56:48
わかりました。
ありがとうございました。

427:デフォルトの名無しさん
08/04/01 22:16:12
やっぱり分かりませんでした。
自己定義のクラスのオブジェクトを渡すと、クラス名が表示されてしまいます。
表示名を設定する方法を教えて下さい。

428:デフォルトの名無しさん
08/04/01 22:18:18
自己解決しました。


429:デフォルトの名無しさん
08/04/01 22:31:13
菅直人「1+1は、いったい何なんですか?」
小泉 「2です」
菅直人「ですから、1+1なんですよ。質問に答えてください」
小泉 「2ですね」
菅直人「全く質問に答えていない。国民が聞きたいのは1+1なんですよ!」
小泉 「どうあっても2です」
菅直人「全く説明になっていません」
小泉 「誰が何と言おうと2です」
菅直人「うまく逃げましたね。あなたはいつもそうだ」
小泉 「……?」
菅直人「あまり国民をなめないで頂きたい!」
小泉 「ですからねぇ・・・原則として、1+1は2、
     これは揺らがない、私はずっとそうお答えしています」
菅直人「いいでしょう、最後に私は、小泉総理は1+1について
     国民をあざむいたと、そう申し上げて答弁を終了します」

430:デフォルトの名無しさん
08/04/01 22:35:43
コピペ君って馬鹿だな、まで読んだ。

431:デフォルトの名無しさん
08/04/01 22:53:45
updateで古い物を上にしてソートしたいのですがキャストに失敗してしまいます。
order.Field<DateTime>("update")でフィールドとDateTimeとしてソートしてくれる
のではないのでしょうか?。updateにはDateTime.Now.toString();が入っています。

EnumerableRowCollection<DataRow> query = from order in table.AsEnumerable()
orderby order.Field<DateTime>("update")
select order;

>>421
ありがとうございます。

432:デフォルトの名無しさん
08/04/01 23:23:16
列updateはstring型じゃないのか?
だとすれば、こうだろ

order.Field<string>("update")

433:431
08/04/01 23:32:17
日付としてソートしたかったのですがDateTime.Nowの形ではだめなんですね
カラムの設定を指定したらいけそうです。

434:デフォルトの名無しさん
08/04/02 03:07:56
最近C#の入門書を購入したのですが、やはり内容を丸暗記したほうがいいのでしょうか?(猫でもわかるC#プログラミングという本で400ページくらいのものです)
グーグルで検索してみると、暗記しろと書いてあるところもあれば
必要最低限のところだけ覚えればいいと書いてあるところもあり
どうしたものかと右往左往しています

もし仮にこの本を丸暗記したとして次のステップアップはどのようにすればいいのでしょうか?

435:デフォルトの名無しさん
08/04/02 03:42:13
猫プログラミングに載ってるぐらいの初歩的な内容は覚えておいて損はない
とは言えると思うけど、余程暇で無い限り丸暗記する必要はない。
(こんな機能があるってだけ覚えておけば、必要な時に思い出したり調べることが出来る)

次のステップは・・何を作りたいかによって全然違うから何とも言えない。

436:434
08/04/02 04:28:06
>>435
ありがとうございます

本に書いてあることさらっと全部やってみて、大事そうなところをあとから復習してみようと思います

437:デフォルトの名無しさん
08/04/02 10:47:50
よく使うものはその気がなくても気が付いたら覚えている。
けど大事なところは思い出せないんだけどね。

438:デフォルトの名無しさん
08/04/02 11:22:19
MessageBoxのボタンを英語で表示する方法って無いでしょうか
キャンセル→Cancel
みたいな

FormのLanguageを英語にしてみたけど日本語のままだったorz

439:デフォルトの名無しさん
08/04/02 11:29:16
>>438
CurrentUICultureを英語にしてみるとか。

440:デフォルトの名無しさん
08/04/02 11:37:46
リンクではないブラウザに表示されている画像をD&Dする方法はあるのでしょうか?
DragEnterを書き換えないと無理だとハードルが高すぎるのですが・・・

441:デフォルトの名無しさん
08/04/02 12:15:48
>>440
ファイルパスが含まれてるならキャッシュから持ってこれるかもしれない。
DeviceIndependentBitmapとか持ってたらそれから作れるな。面倒だけど。
DragEnterの書きかえって何?

442:デフォルトの名無しさん
08/04/02 12:31:43
>>436
っていうか今時のプログラミング関係の本の読み方は基本は「乱読」だと思うよ。
一冊の本を熟読なんていう受験勉強スタイルは時間のムダだと思う。

これ一冊読んでおけばOK、なんて網羅的は本はないし、
書くほうも恐らく精読されることを想定して書いてない。

あと個人的意見として、「猫でも~」の著者の本はウンコだと思う。

443:デフォルトの名無しさん
08/04/02 12:33:43
>>441
それがブラウザ上の画像からD&DをしようとするとDragEnterイベントが起きないのです。
こういう場合はDragEnterをオーバーライド?とかしないといけないのでしょう?。

444:デフォルトの名無しさん
08/04/02 12:45:08
>>443
ドラッグできないものならドロップ先でなにしようがD&Dできない。
ドラッグできるものならドラッグ元が制限かけない限りDragEnterは発生する。
何をドラッグさせるかはドラッグ元次第。
まずドラッグできてるのかってところから確認。

445:デフォルトの名無しさん
08/04/02 14:40:19
ていうかブラウザから画像D&D出来るよ

446:デフォルトの名無しさん
08/04/02 15:16:00
HttpWebRequestでHTMLを取得・解析するプログラムを作っているのですが、
あるサーバーのHTTPヘッダーが
本来CRLFでなければならない部分がLFLFになっているらしく、
アクセスすると「サーバーによってプロトコル違反が発生しました. Section=ResponseStatusLine」
というエラーが出て落ちてしまいます

これを回避するにはどうしたらいいでしょうか?
よろしくお願い致します。

447:デフォルトの名無しさん
08/04/02 15:34:30
構造体作るたびにEquals(構造体),Equals(object),==,!=,GetHashCode実装するのが
面倒なんだけど何とかならない?

448:デフォルトの名無しさん
08/04/02 15:45:04
>>446
HttpWebRequest使うのを諦めてSocket or TcpClient使う

449:デフォルトの名無しさん
08/04/02 15:47:10
>>448
ありがとうございます。
TcpClientは使ったことないですがやってみます

450:デフォルトの名無しさん
08/04/02 15:59:48
>>446
UseUnsafeHeaderParsing
でどうにかならんかな?

451:デフォルトの名無しさん
08/04/02 18:04:44
>>450
ありがとうございます
System.Configuration.dllをアセンブリ参照に追加して、
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
SettingsSection section = (SettingsSection)config.GetSection("system.net/settings");
section.HttpWebRequest.UseUnsafeHeaderParsing = true;
で行けました。

452:デフォルトの名無しさん
08/04/02 19:09:26
VS2008を使って.net framework3.5で開発してたんですが
2.0対応にしようと思って、プロジェクトのプロパティのアプリケーションタブの対象フレームワークを2.0にして
3.5及び3.0をアンインストールしてからソリューションを開いてみたら、
version3.5のmicrosoft.build.engineがありません、と言われて起動出来ませんでした。
なにかアドバイスもらえませんか?


453:デフォルトの名無しさん
08/04/02 19:14:06
ターゲットバージョンを指定できるとはいえ、ビルドに使ってるのは3.5のコンパイラだし。
2008に必要なランタイム削れば、そら動かんのは当たり前だろ。

2008のIDEだけ欲しかったとか? あてが外れたね。

454:デフォルトの名無しさん
08/04/02 19:23:06
開発者がランタイム嫌うとかアホかと

455:デフォルトの名無しさん
08/04/02 19:48:58
>>438
最悪、Win32 APIのMessageBoxExか自前でやるか。

456:デフォルトの名無しさん
08/04/02 19:49:03
いつもの人なんだろうな、もうプログラム組むのあきらめたら?

457:デフォルトの名無しさん
08/04/02 20:14:38
>>444-445
これだと画像を引っ張った時に e.Effect = DragDropEffects.None;の状態になるので
イベントが起きていないと勘違いしていました。すいません。
でも、e.Data.GetDataPresent("UniformResourceLocator")にマッチするのに何故でしょう?。
イベントが二回起きているからなのかな?。

private void treeView_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("UniformResourceLocator") || e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link;
}
else if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
e.Effect = DragDropEffects.None;
}
else
{
e.Effect = DragDropEffects.None;
}
}

458:457
08/04/02 20:18:32
お騒がせしました。
画像の場合、DragDropEffects.Linkだとだめなのですね。
e.Effect = DragDropEffects.Copy;にしたら上手く行きました。

459:デフォルトの名無しさん
08/04/02 21:09:56
>>438
MessageBox は現在の MUI (または言語バージョン) に合わせて表示するので、変更はできないし、
できるだけそういう処理をすべきではない。

いっそのこと日本語を含む多言語対応 (Localizable = true) にしてしまうのが良いのでは?

460:457
08/04/02 21:13:12
わけわからん。.netがバグってる?とか言ったら突っ込まれるのだろうか・・・。
デスクトップからファイルをドロップ → ×
ブラウザから画像ファイルのドロップ → ×
ブラウザからハイパーリンクリンクをドロップ → ○
おまけに他の.netアプリでもD&Dできなくなったしorz
再起動してくるよ・・・

private void treeView_menu_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("UniformResourceLocator") || e.Data.GetDataPresent(DataFormats.FileDrop))
{
if (e.Data.GetDataPresent("DeviceIndependentBitmap"))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Link;
}
}
else
{
e.Effect = DragDropEffects.None;
}
}


461:457
08/04/02 21:16:55
再起動したら直ったw
何のこっちゃ

462:デフォルトの名無しさん
08/04/02 22:07:47
>>459
え?
UIスレッドのCurrentUICultureをいじれば普通にできなかったっけ?

463:デフォルトの名無しさん
08/04/02 23:52:50
>>462
459 じゃないが、試してみた、駄目っぽいな。

464:459
08/04/02 23:57:35
>>462
Windows Forms の MessageBox.Show は実質 MessageBox 関数 (API) の
リダイレクトだから、CurrentUICulture が効かないんだな。
独自にダイアログを作れば Thread.CurrentUICulture でいいと思うけど。

465:デフォルトの名無しさん
08/04/03 00:04:14
MessageBoxモドキを自分で作るしかないのかねぇ

466:デフォルトの名無しさん
08/04/03 00:05:15
URLリンク(www.atmarkit.co.jp)
こんなん見つけてきた、国際対応の仕方だけど結構便利そうだな。
さすが世界中のソフトを売りさばいている会社だけの事はあるw

467:デフォルトの名無しさん
08/04/03 00:11:31
Textboxを継承してTextbox2を作成。
これをツールボックスからGUIでFormに
配置するのって無理?

468:デフォルトの名無しさん
08/04/03 00:14:35
できるよ。

469:デフォルトの名無しさん
08/04/03 00:14:39
一度ビルドすればツールボックスに追加される。

470:デフォルトの名無しさん
08/04/03 00:23:01
自分で作ったコントロールってそれから別のプロジェクト作るときもツールボックスに入るの?

471:デフォルトの名無しさん
08/04/03 00:24:21
試せよ、クズ

472:デフォルトの名無しさん
08/04/03 00:24:49
>>470
そのコントロールが入っているアセンブリに参照設定すればOK

473:デフォルトの名無しさん
08/04/03 00:29:52
>>471
スレタイ嫁

474:デフォルトの名無しさん
08/04/03 00:32:13
気をつけろ、延々こういう事をする奴が一人いる
知らないんじゃなくてわざとだ

475:デフォルトの名無しさん
08/04/03 00:36:55
>>452 見たいな奴を見かけたら無視する方針でよろしく

476:デフォルトの名無しさん
08/04/03 00:41:42
>>472
なるほど
DLL化しておくのが一番いいんですかね

477:467
08/04/03 00:45:14
お、できるんか。ヤッタ!
できんと思ってた。やってみるわ。

478:デフォルトの名無しさん
08/04/03 00:53:30
>402
おれもMSDNでキーワード拾って
最後はググってる・・・。

MSDNがいまいち分からん。
MSDN使い方マニュアルがほしい・・・

479:デフォルトの名無しさん
08/04/03 01:05:29
MSDNのWEBはブラウザの検索エンジンに登録して
ガシガシ検索が正しい使い方だと思ってる

480:デフォルトの名無しさん
08/04/03 22:06:02
ゲーム作りたいんですが
Visual C# 2008 Express Edition
で十分ですかね?有償版にしかない機能とかはなんなんでしょうか?


481:デフォルトの名無しさん
08/04/03 22:12:00
十分
デバッガがちょっとだけ弱いけど工夫次第でどうにでもなる

482:デフォルトの名無しさん
08/04/03 22:13:21
C#でもActiveXとか使えますか?

483:デフォルトの名無しさん
08/04/03 22:13:59
>>481
なる。デバッガとかですか。トンクス。
たしかVisualC++だとMFCとか使えなかった気がしたんで心配しまちた。

484:デフォルトの名無しさん
08/04/03 22:14:10
XNAは今のところVC#2005Expressだけだった気がする

485:デフォルトの名無しさん
08/04/03 22:16:51
>>484
XNAってあのXBOX360上でも動くランタイムみたいなやつっすかー。
PCゲームオンリーでXNA使うメリットってなんかありますかね?

とりあえずDirectXさえ動いてくれればいいかなーとか思ってたんすが・ω・;

486:デフォルトの名無しさん
08/04/03 22:26:16
あるMethodInfoオブジェクトが表すメソッドが,特定の型のデリゲートにバインドできるかどうか
調べる方法はありますか? 試しにCreateDelegateしてみるしかないのでしょうか

487:デフォルトの名無しさん
08/04/03 22:29:07
URLリンク(www.microsoft.com)
目立った所で、MSIインストーラーがないので、公開するのが面倒くさいかもしれない
ClickOnce の使えるレンタルサーバは限られている。
フリーのインストーラを使えば問題ない。
XAMLでゲームを作るなら、ちょっと不足があるかもしれない。
VSSでバージョン管理したいなら、使えないので注意が必要。
フリーソフト類と組み合わせて開発するつもりなら「マクロ、アドイン、パッケージは使用不可」に注意。

488:デフォルトの名無しさん
08/04/03 22:33:44
>>487
なるほどーすごい参考になりました。ありがとうございます(__)
たしかにmsiがないのは公開するときダリーですね。


489:デフォルトの名無しさん
08/04/03 22:51:15
5年前のだけど今から読んでも役に立つ?

これ↓
URLリンク(www.amazon.co.jp)

490:デフォルトの名無しさん
08/04/03 22:52:09
いいえ

491:デフォルトの名無しさん
08/04/03 23:00:04
System.Windows.Forms.Control control = new System.Windows.Forms.Control();
いまさらだけど、こういう宣言って悠長じゃね?

var control = new System.Windows.Forms.Control();
オブジェクトの型はオブジェクト自身が知ってるからこれでいいんじゃね?

492:デフォルトの名無しさん
08/04/03 23:01:04
ゆうちょう?

493:デフォルトの名無しさん
08/04/03 23:04:03
そのためにvarがあるんだが

494:デフォルトの名無しさん
08/04/03 23:07:10
冗長だな。

495:デフォルトの名無しさん
08/04/03 23:08:40
>>485
メリット以前にC#でDirectX直触りするんならレガシーのぞいてオフィシャルは
XNAしか茄子。

本当に直触りも出来るけど素人お断り&とても大変&あれ以上の完成度
難しい。…まあXnaがかなりよく考えて作られてるってことだが

496:デフォルトの名無しさん
08/04/03 23:12:24
>>484
2.0からEE縛り消えた。C#のみサポート縛りは確かあり

497:デフォルトの名無しさん
08/04/03 23:13:55
>>495
なるる。なんかWikiみるとXNAにはフレームワークも用意されてるっぽいし、
サンプルが充実してそうでつね。ぱっとみ気になるのは

「日本語の表示が非常に難しい」
「ジョイパッドはXBOX360コントローラーだけ」

ってところかな?wまぁ実際触ってみます。

498:デフォルトの名無しさん
08/04/03 23:29:15
>>497
SpriteFont出来たから日本語の表示は楽になった。ビルドに時間かかるぐらい。
というか文字表示はDirectX使うならどっちにしろ大変。SpriteFontは
かなりいい落とし所。

DInputはMarshalingに慣れてる人なら直で触ってもサクッと書けてしまう
ぐらいのコード量かと。全機能綺麗にと言われたらちょっと大変かもだが

499:デフォルトの名無しさん
08/04/03 23:58:33
遅延バインディングっていうのかな?
XMLにButton1を押した時にはC:\XXX\AAA.dllのBBB.bbbクラスのcccってメソッドを呼ぶ
ってな感じで記入して、記入した内容を元にプログラムを実行したいです。。
XMLを書き換えればソースを書き換えなくても動くようにしたいんです。
まだまだC#はかじったばかりですが、どのあたりを勉強すればいいですか?

検索のキーワードとか、ヘルプで見るネームスペースとかだけでもいいから教えてください。

500:デフォルトの名無しさん
08/04/04 00:17:34
>>498
なるほー。情報マジどもです(__)
XNAさわりまくってみまつ。

501:デフォルトの名無しさん
08/04/04 01:03:57
SystemBrushes.Highlight から取得したブラシを
使い終わった後でDisposeしようとしたら下記の例外が発生しました。

System.ArgumentException はユーザー コードによってハンドルされませんでした。
Message="アクセス許可が有効でないため、Brush を変更できません。"
Source="System.Drawing"


SystemBrushesから取得したブラシはDisposeしてはいけないのでしょうか。# パフォーマンス上の理由?
それとも何か重大な勘違いをしているのでしょうか。

502:デフォルトの名無しさん
08/04/04 09:16:29
>>501
自分で作ってないものは破棄しちゃ駄目、というのが原則。

503:デフォルトの名無しさん
08/04/04 10:24:02
>>502
なるほど次から気をつけます。

504:デフォルトの名無しさん
08/04/04 10:28:01
>>499
WPF(XAML)なら標準でできる
WinFormsならリフレクションを駆使して自力で頑張る

505:デフォルトの名無しさん
08/04/04 10:58:23
>>501
まあプロパティで取得するオブジェクトだから、中の人がCloneを返すようにしていたならば当然Disposeして
問題ないのだが(むしろしないとまずい)、おそらく中の人はそのまんま参照を返しているみたいなので
その例外が出たんだろうね。
要するに他にもいろんなところで使われているオブジェクトの参照なので勝手にDisposeしてはいけないということかな。
仮にそのオブジェクトを変更したりする必要が出てくるような場合はCloneを受け取ればよい。

using (var sb = SystemBrushes.Highlight.Clone() as SolidBrush)
{
  Hoge();
}

これなら例外発生しない。

506:デフォルトの名無しさん
08/04/04 11:25:44
>>505
あーなるほど、中ではそういう事になってるんですね
ありがとうございます。とても参考になりました

507:デフォルトの名無しさん
08/04/04 13:17:50
質問。

超初心者で、まずハロワのプログラム書いたんだけど、SDKでコンパルして
.exeのやつ作って実行しても何か黒い画面が一瞬表示されるだけで何書いてるかも
読めない。これって俺の書いたのが悪いのか?メッセージループ?か何か使ってないから?

508:デフォルトの名無しさん
08/04/04 13:20:34
>>507
コマンドプロンプトから実行

509:507
08/04/04 13:33:59
SDK コマンドプロンプトから実行したらできた!
ありがとう>>508

510:デフォルトの名無しさん
08/04/04 17:07:42
すみません、質問よろしいでしょうか。

C#でスクリーンセーバーを一時無効化する事って出来るんでしょうか?
マウスポインタを強制的に動かす方法くらいしか思いつきません。
又その場合、実際のマウス操作と認識して無操作時間がリセットされるのでしょうか?

どなたかお力をお貸し下さい。お願いします

511:デフォルトの名無しさん
08/04/04 17:48:04
TabControl上に配置したTextBoxにtextBox1.Text == "Text;"
というように文字列を表示しようとすると
「静的でないフィールド、メソッド、・・・でオブジェクト参照が必要です」
とエラーになってしまうのですが、どのようにすればいいですか?

512:デフォルトの名無しさん
08/04/04 18:03:38
511 が 記述ミスでありますように…




513:デフォルトの名無しさん
08/04/04 18:29:40
; ; ; ; ;

514:デフォルトの名無しさん
08/04/04 19:14:11
2つ

515:デフォルトの名無しさん
08/04/04 20:20:47
常駐プログラムって、どうやったらできるの??

516:デフォルトの名無しさん
08/04/04 20:27:34
普通のプログラムだよ 特別なことは何も無い

517:デフォルトの名無しさん
08/04/04 20:44:16
タスクトレイの事かな

518:デフォルトの名無しさん
08/04/04 20:54:26
サービスじゃね

519:デフォルトの名無しさん
08/04/04 23:48:42
VB.NETとC#の演算子の違いに戸惑っています。

VB.NETで

Dim FileName As String = "C:\WINDOWS\system32\xvid.ax"
If IO.Path.GetExtension(FileName).ToLower <> ".dll" Then
  Console.WriteLine("DLLじゃないよ")
End If

は出来るのにC#で

string FileName = @"C:\WINDOWS\system32\xvid.ax";
if (System.IO.Path.GetExtension(FileName).ToLower != ".dll") {
  Console.WriteLine("DLLじゃないよ");
}

と出来ないのは何故でしょうか。
また、VB.NETと同じように処理可能にする方法はないでしょうか。

520:デフォルトの名無しさん
08/04/04 23:54:11
C#ではメソッド呼び出しの括弧は省略できないからToLower()と書く必要がある
VBでも括弧は省略しない癖を付けた方が…

521:デフォルトの名無しさん
08/04/04 23:59:45
>>520
orz

こんな単純ミスだったんですね…。
VB.NETの場合、"()"が必要な場合はインテリセンスが自動補完してくれるので気付きませんでした。
これからは気を付けます。

522:デフォルトの名無しさん
08/04/05 00:28:04
>>504
その自力で頑張るの部分をもう少し詳しくお願いできませんか?
System.Windows.Forms.Formを使用してます。

523:510
08/04/05 00:33:58
どうかお願いいたします。

524:デフォルトの名無しさん
08/04/05 01:56:53
TableLayoutPanelからコントロールを取り除くとき

for (int i = 34; 7 <= i; i--)
{
  tlp.Controls.RemoveAt(i);
}

のように後ろからやっていく方法と

for (int i = 34; 7 <= i; i--)
{
  tlp.Controls.RemoveAt(0);
}

のように前からやっていく方法とで、どちらかのほうがいいということはありますか?
それとも、たいした違いはありませんか?

525:デフォルトの名無しさん
08/04/05 02:02:56
後者は
for (int i = 34; 7 <= i; i--)
{
  tlp.Controls.RemoveAt(7);
}
でした、すみません

526:デフォルトの名無しさん
08/04/05 02:37:55
C#のフォームを使うプログラムで、複数フォームにまたがるデータは、
どこに格納するのが慣例なのでしょうか?

VBではモジュールがよさそうですが。

527:デフォルトの名無しさん
08/04/05 02:48:47
1. Application クラスの public static フィールド
2. フォームのコンストラクタで渡して使う
3. Form.Show の前にプロパティで渡す

528:デフォルトの名無しさん
08/04/05 09:02:56
こういう場合はどうやって変換したら良いのでしょうか?
obj = new (???) c;
それとも、こういう使い方をしてはいけないのでしょうか?

public class A
{
public A()
{
new B(this);
}

public A_C()
{
//
}
}

public class B
{
public B(object c)
{
c.A_C(); // ← こういう雰囲気の事をしたい
}
}

529:デフォルトの名無しさん
08/04/05 09:09:47
キャストすればいいんじゃね?

530:デフォルトの名無しさん
08/04/05 09:24:51
なんでobjectで受け取ってるのかが問題だな

531:デフォルトの名無しさん
08/04/05 09:30:23
そのキャストの仕方や受け取り方がわからない
Listview lv = (ListView) sender;とかと同じ理屈だとは思うのですが・・・
()の中に何を入れてよいのかわかりません

532:デフォルトの名無しさん
08/04/05 09:33:31
Aだろ。

533:デフォルトの名無しさん
08/04/05 09:39:04
あぁ、一生懸命classとか入れていました・・・。
例えばこのobjectがどのクラスか不明だった場合はどうしたら良いのでしょうか?

534:デフォルトの名無しさん
08/04/05 09:41:59
どうしたいんだよ?

535:デフォルトの名無しさん
08/04/05 09:43:13
先にc#の仕様を一通り理解すれば全て解決するパターンだな。

536:デフォルトの名無しさん
08/04/05 09:53:20
>>533
どのクラスか不明って少なくともA_C()を実装してるクラスが一番の大元だろう?
そのクラスにキャストしれ
っつか、そのクラスで受け取れよ。

537:デフォルトの名無しさん
08/04/05 09:57:37
というか、そもそも何をしたいのかがよくわからん。

538:533
08/04/05 10:03:27
えっと、自分が使いやすいようにまとめてある非同期ダウンロードのライブラリ的なものがありまして
ダウンロード完了時のイベントを呼び出し元で側で受け取りたいのです。
感じとしては以下のような形です。

public Download(string uri, string filepath,object obj)
{
if (dc == null)
{
dc = new WebClient();
dc.DownloadFileCompleted += new AsyncCompletedEventHandler(obj.DownloadCompleted);
}
dc.DownloadFileAsync(new Uri(uri), filepath);
}


539:デフォルトの名無しさん
08/04/05 10:07:20
objectじゃなくてAsyncCompletedEventHandler受け取れば済む話じゃね?
つか普通そのオブジェクトがイベントを伝播する形にするんじゃね?

540:533
08/04/05 10:16:03
言葉を知らないから説明できない
もやっとぼーるを投げます
お騒がせしました

541:デフォルトの名無しさん
08/04/05 10:43:33
よくわからんが特定のメソッドを呼び出したいんだと予想。
で、いろんなパターンがあって、全てのクラスに共通する基本クラスは作成できないと解釈。

呼び出したいメソッドを定義したインターフェイスを作って、
それぞれのクラスでそのインターフェイスを実装。
メソッドのパラメータはそのインターフェイスの型の型にする。

デリゲートで使えるかどうかはしらん

542:デフォルトの名無しさん
08/04/05 11:30:10
デリゲートかイベントで十分

543:デフォルトの名無しさん
08/04/05 11:31:47
>>538
MethodInfoあたりでも使えば、問答無用で好き放題できるだろうけど
その前に可能であればC#らしいスタイルを追求したいと思う自分がいる。

1.呼び出してほしいインターフェイスを定義して、呼び出されたいクラスが実装する。
 Downloadが完了次第、Downloadを持つクラスがそれを呼び出す。
 参照が無くなったりDisposeされたりといった問題があるなら、それを加えてもう一度やりたい事をここで説明。

2.主従関係を逆転して考えてみる。
 Download を持つクラスに event を定義して、呼び出されたいクラスがコンストラクタ等で自ら登録する。

3.MethodInfo を使って、まさに当初の質問通りの処理をする。

544:デフォルトの名無しさん
08/04/05 11:44:05
この辺読め
URLリンク(msdn2.microsoft.com)(VS.80).aspx

545:デフォルトの名無しさん
08/04/05 12:17:31
アンマネージドのC++で作ったDLLの関数をC#で使いたいのですが
DLL 'testdll.dll' の 'f'' というエントリ ポイントが見つかりません。
と例外が出てしまいます。
やり方が間違っているのでしょうか?
DLL側は
class c
{
 public:
 static __declspec(dllexport) int f();
};
int c::f()
{
 return 777;
}
C#側は
using System.Runtime.InteropServices;
using System;
namespace ConsoleApplication1
{
 class Program
 {
  [DllImport("testdll.dll")]
  public static extern int f();
  static void Main(string[] args)
  {
   Console.WriteLine(f());
  }
 }
}
こんな感じになってます。
testdll.dllとtestdll.libはC#側のフォルダに入れてます。

546:デフォルトの名無しさん
08/04/05 12:28:20
>>545
C++側のインターフェイスをCスタイルで書いてextern "C" とする。
C++の識別子は、どのようなスタイルになるのかはアンマネージドの範囲でも一切保障されない。

547:デフォルトの名無しさん
08/04/05 12:33:31
>>545
C++側をcomで作って、C#側はプロジェクトの参照設定よりdllを追加(COMタブより追加可能)

548:533
08/04/05 12:44:25
主従関係に困惑したりしながら色々と試行錯誤していたのですが読み出す時にイベントを付加する事にしました。
でも、今度は何のダウンロードが完了したのかわからない。未だに見慣れないのですがMSDNと格闘してきます!。

AsyncCompletedEventHandler e = new AsyncCompletedEventHandler(this.DownloadCompleted);
FileDownload(path, filepath, e);

public void DownloadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
System.Net.WebClient m = (System.Net.WebClient)sender;
//m.download_url = ???
}



549:545
08/04/05 12:49:16
>>546
extern "C"{
 __declspec(dllexport) int f()
 {
  return 777;
 }
}
DLLをこう書き直したのですが結果は変わりませんでした。
これはCスタイルではないって事でしょうか??

550:デフォルトの名無しさん
08/04/05 12:53:07
__stdcall

551:デフォルトの名無しさん
08/04/05 12:54:55
>>549
CallingConventionを合わせる

552:デフォルトの名無しさん
08/04/05 12:58:28
>>548
まずC++をしっかり勉強してからの方が無難かもしれないね。

553:デフォルトの名無しさん
08/04/05 12:59:29
>>552 はアンカミス >>548 -> >>549

554:545
08/04/05 13:47:47
>>550
extern "C"
{
 int __declspec(dllexport) __stdcall f();
}
int __declspec(dllexport) __stdcall f()
{
 return 777;
}
DLLをこう変更しましたがだめでした。
DLL側のコードを書いてくれませんか?

555:デフォルトの名無しさん
08/04/05 13:57:53
とりあえずCOMとIDLについて軽く勉強した方がよくね

556:デフォルトの名無しさん
08/04/05 14:05:22
P/InvokeにCOMもIDLも関係ないだろ。適当教えるなよ

557:デフォルトの名無しさん
08/04/05 14:09:12
dumpbin /exports
でdll調べてみたら

558:デフォルトの名無しさん
08/04/05 14:10:40
>>554
C:\>type test.cpp
extern "C" __declspec(dllexport) int f() {
return 777;
}

C:\>type test.cs
using System;
using System.Runtime.InteropServices;
namespace Test {
class Test {
[DllImport("test", CallingConvention=CallingConvention.Cdecl)]
static extern int f();
static void Main() {
Console.WriteLine(f());
}
}
}

C:\>cl /LD /nologo test.cpp
test.cpp
ライブラリ test.lib とオブジェクト test.exp を作成中

C:\>csc /nologo test.cs

C:\>test
777

559:545
08/04/05 16:14:51
>>558
/nologoと付けたら出来ましたが、IDEからビルドすると例外エラーです。
皆さんはアンマネージドのC++でDLLを作ってC#とかから呼び出したりしないんですか?

560:デフォルトの名無しさん
08/04/05 16:21:03
>>559
ふつーは .def 使ってエクスポート名をきちんとしておく。

561:560
08/04/05 16:27:33
つまりこういうことな。

//test.cpp
extern "C" int __stdcall f() {
 return 777;
}

//test.def
LIBRARY
EXPORTS
 f

//test.cs
[DllImport("test.dll")]
int f();



562:デフォルトの名無しさん
08/04/05 16:31:31
>>559
俺だったらC++/CLIで作る

563:デフォルトの名無しさん
08/04/05 16:55:54
>>561
コンパイルすら通らないんですが。。
//test.cpp
extern "C" __declspec(dllexport) int f()
{
 return 777;
}
//test.def
LIBRARY "testdll"
EXPORTS
 f
//test.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
 class Test
 {
  [DllImport("testdll")]
  static extern int f();
  static void Main()
  {
   Console.WriteLine(f());
  }
}
こうですか?
それでも例外出ますね。


564:デフォルトの名無しさん
08/04/05 17:15:55
>>563
あーごめんC#側で extern と static いるの忘れてた

とりあえずそのコードだとC側の呼び出し規約が間違ってる。def使う場合
dllexportはいらない

565:デフォルトの名無しさん
08/04/05 17:19:39
まずは、dumpbin 使え。

566:564
08/04/05 17:20:20
ごめんもう一個
.defはリンカの設定に追加する必要がある。VSは作ったら勝手にやって
くれた気もするが

567:デフォルトの名無しさん
08/04/05 17:21:52
>>565
Dependency Walkerでもいいけどな

568:デフォルトの名無しさん
08/04/05 17:51:54
>>566
モジュール定義ファイルにtest.defを追加すればいいんですかね??
それでもビルド出来ないんですが。。
error C3872: '0x3000': この文字を識別子で使用することはできません
error C2065: ' return' : 定義されていない識別子です。
error C2143: 構文エラー : ';' が '定数' の前にありません。

569:デフォルトの名無しさん
08/04/05 17:53:19
一行ヒントしか書かないやつは分からないのに答えてる法則。
そしてその後に関連される単語が出てくると「だから>>○○で言っただろ」と得意気な顔をするw

570:デフォルトの名無しさん
08/04/05 17:55:23
>>568
それ全角スペースだろ死ねよ。

571:デフォルトの名無しさん
08/04/05 17:59:11
まじ、dumpbin知らないってことか?
DLLの情報見れば解決する話だろうが。

572:デフォルトの名無しさん
08/04/05 18:00:06
1行ヒントはクグればすぐ分かるということだろう。

573:デフォルトの名無しさん
08/04/05 18:05:55
たった1行のコマンド実行するだけなのに、無視する理由が分からん。

574:デフォルトの名無しさん
08/04/05 18:08:43
>>568
そこかよorz
そのコードインデントに全角スペース使ってるからインデントは
そのままコピペするんじゃなくてタブか半角スペースにきちんと
置換してくれ

>>571
dumpbin 使おうが Dependency Walker 使おうがエクスポートされた
名前は見れるけど、「どうやってその名前を作るの」がわからない、
つまり確認しか出来ないから直接解決にならんだろ
まぁそれらを知っておいてかつ確認ぐらいはしてほしいがマジで
まぁふらっとだから

575:デフォルトの名無しさん
08/04/05 18:15:20
>>573
全角スペースを使うぐらいだから、コマンドプロンプトの使い方が分からないんだよ。

>>574
その名前で呼び出せば使えるんだから、命名規則の仕様まで分からなくてもいいと思うが。

576:デフォルトの名無しさん
08/04/05 18:18:13
>>575
あそっか。C#側いじればいいのか。

577:545
08/04/05 18:20:34
>>574
ありゃ。恥ずかしい><
全角混じってるだけでした。
ですがC#側で呼び出せません。。
むぅ…

578:デフォルトの名無しさん
08/04/05 18:21:56
>>577
だから呼び出し規則あわせろってずっと言ってるだろ。
今のコード貼ってみろよ

579:デフォルトの名無しさん
08/04/05 18:22:12
>>575
それじゃ根本的な解決になってないだろ

580:545
08/04/05 18:25:29
>>578
どこでそんなこと書いてありますか?
//test.cpp
extern "C" int __stdcall f()
{
 return 777;
}
//test.def
LIBRARY
EXPORTS
f
//test.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
 class Test
 {
  [DllImport("test.dll")]
  static extern int f();
  static void Main()
  {
   Console.WriteLine(f());
  }
}
今のコードはこうです。
DLL側とC#側のコード貼ってください。

581:デフォルトの名無しさん
08/04/05 18:26:44
動けばいいんじゃないの?

582:545
08/04/05 18:28:05
C++で作ったDLLをC#で呼び出すときに皆さんはわざわざコマンドプロンプトを使うんですか?
ツールを使って名前を調べて呼び出したりするんですか?

583:デフォルトの名無しさん
08/04/05 18:29:42
こいつ何言ってんだ。DLL中身みないでどうやって名前調べるんだよ。
もしかしてスピリュアルってやつ?

584:デフォルトの名無しさん
08/04/05 18:35:34
>>582
当たり前だろ。

dumpbin /exports test.dll
の結果見せろよ。

585:545
08/04/05 18:38:41
えと、何か勘違いしてるかもしれないのでご指摘ください。
イメージとしてはWin32APIを呼び出すときのように使いたいのです。
[DllImport("user32.dll")]
extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY);
こんな感じで呼び出して利用できました。
なので自作のDLLも同じように出来るのかな?と思ったわけです。

C++のDLLをC++で呼び出したり、
C#のDLLをC#で呼び出すときは楽なのに、
マネージドからアンマネージドを呼び出すのは大変ですね…。

586:デフォルトの名無しさん
08/04/05 18:39:14
>>584
あんまりいじめるな。
お前がコード張ればいいだろ。

587:デフォルトの名無しさん
08/04/05 18:39:34
>>580
それコンパイルしたら普通に上手く動くぞ。
お前さんのやり方に問題があるとしか思えん。

588:デフォルトの名無しさん
08/04/05 18:40:29
>>586
俺は>558ではった

589:545
08/04/05 18:42:49
>>587
ありゃ。
もう一度新規プロジェクトからやり直して見ます!

590:デフォルトの名無しさん
08/04/05 18:46:35
>>561 だが・・・うーん、これでexport 出来るはずなのよね。
別の原因の気がするので

・dumpbin の結果
 VS のコマンドプロンプト(たぶんスタートメニューのツールの
 下あたりにある)を起動して、生成した C++ な DLL に対して
 dumpbin /EXPORTS "test.dll"
 みたいにしてその結果を張ってください

・探索ロケーション周り
 当然 C# な exe と C な DLLは同じフォルダにないとダメですよ。

あたり確認してみてくれ

591:545
08/04/05 18:56:11
>>590
両方ともプロジェクト作り直したら通りました;
dumpbinの結果は
File Type: DLL
Section contains the following exports for test.dll
00000000 characteristics
47F74A82 time date stamp Sat Apr 05 18:46:42 2008
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001000 f = _f@0
Summary
1000 .data
1000 .rdata
1000 .reloc
1000 .rsrc
1000 .text
こんな感じでした。お騒がせしました><
DLLは作ったことないので色々いじって見ます。

592:545
08/04/05 18:59:29
>>590
あ、すみません、言い忘れてました。
ありがとうございました!

593:デフォルトの名無しさん
08/04/05 19:01:31
>>582
人の作ったDLLなら見る。
だって、C/C++のヘッダを見ただけでは分からないこと(修飾名)があるから。

WindowsシステムのDLLはそれがもう分かっているし、
585のように単純にDllImportを書くだけで使えるようになっているから見ない。

自分で作ったDLLも見ない。どうなっているかは自分で決めた通りなのだから、
調べるまでもない(思い通りになっているかを確認することはあるが)。

594:デフォルトの名無しさん
08/04/05 19:05:01
自分で決めても見つからないとエラー出たら見るしかない。
今回はこのパターン。

595:デフォルトの名無しさん
08/04/05 19:12:33
>>593-594
ほぅほぅわかりやすい。
勉強になりました。

596:デフォルトの名無しさん
08/04/05 19:16:48
うぁっ、C++呼び出しの人まだやってる、C++使えないのなら無理して使うなよwww
一応コマンドラインに落ちなくても全部IDE上でできるが
詳しい知識がないと、VSのバージョンが上がったら手が付けられなくなるぞ。

597:デフォルトの名無しさん
08/04/05 19:20:54
手が付けられへんってどんだけレベル低いねん。

598:デフォルトの名無しさん
08/04/05 19:23:07
あれのレベルの低さは見ての通りじゃん、どう考えても相互運用コードが作れるレベルじゃない。
説明した通りに書かせればその分についてのみは動くだろうけど

599:デフォルトの名無しさん
08/04/05 19:26:52
無理して、…っていうか興味を持ったからです。
一度動いてからわからないものを調べて学ぼうと思っただけです。
今日はこれをやるって決めたんです!

600:デフォルトの名無しさん
08/04/05 19:28:58
>>599
まずはC++のリンクの仕組みを確り勉強するといいよ、いきなり吹っ飛ばしてC#とリンクとか無茶だから。

601:デフォルトの名無しさん
08/04/05 19:30:29
まずはアセンブラからだな。

602:デフォルトの名無しさん
08/04/05 19:31:10
まずは機械語からだな。

603:デフォルトの名無しさん
08/04/05 19:31:33
>>601
そこまで行かなくてもいいと思うけど、LIBの仕組みDLLの仕組み程度は知っておいて欲しい。

604:デフォルトの名無しさん
08/04/05 19:31:43
お前らどんだけ博識なんだよバカ

605:デフォルトの名無しさん
08/04/05 19:32:18
呼び出し規約って機械語レベルの話だからなぁ。若い人は辛いだろう。

606:デフォルトの名無しさん
08/04/05 21:14:06
とはいっても個々の呼び出し規則の詳細が必要になることなんて少なくなったから、
いろいろあるんだぐらいに思っとけばいいだろう。

607:デフォルトの名無しさん
08/04/05 21:22:02
スタックの積み方と後始末の責任の所在程度の違いだから難しくないと思うが

608:デフォルトの名無しさん
08/04/05 21:27:05
うんまあ、むしろその程度のことを理解するのに苦労した粗雑な頭の自分を語ってるように聞こえるね。

ついでに、「自分以外・自分の世代以外は全員馬鹿」っていうのは
濡れ落ち葉族のオッサンのセリフみたいで惨めだなw

609:デフォルトの名無しさん
08/04/05 21:29:05
そんなにくやしかったのか

610:デフォルトの名無しさん
08/04/05 21:29:18
うん

611:デフォルトの名無しさん
08/04/05 21:36:11
using 赤い彗星 = System.Char;

612:デフォルトの名無しさん
08/04/05 21:49:25
using 浅野忠信の嫁 = System.Char;

613:デフォルトの名無しさん
08/04/05 21:56:37
using ギタリスト = System.Char;

614:デフォルトの名無しさん
08/04/05 22:11:16
それVBのコードとしても変じゃないか?
VBとc#のあいのこのつもりか?w

615:デフォルトの名無しさん
08/04/05 22:13:18
どれもコンパイル通るよ

616:デフォルトの名無しさん
08/04/05 22:16:20
通してなんになるのかって話ではあるけどなw

617:デフォルトの名無しさん
08/04/05 22:43:59
仕事でJava覚える必要が出てきたが、C#と大体同じなのだろうか・・・?

618:デフォルトの名無しさん
08/04/05 22:47:33
C#にあってJavaにない機能を把握するだけ

619:デフォルトの名無しさん
08/04/05 23:06:19
じゃあJavaからC#に移るときは?

620:デフォルトの名無しさん
08/04/05 23:09:32
>>618

621:デフォルトの名無しさん
08/04/06 00:00:03
基本ができてればどんな言語使っても関係無いだろ

622:デフォルトの名無しさん
08/04/06 00:09:48
そうだけどJavaのジェネリクスだけはどうしても許せない

623:デフォルトの名無しさん
08/04/06 00:15:07
Javaだったらエクリプスで開発するんか

624:デフォルトの名無しさん
08/04/06 00:18:18
スレタイ嫁

625:デフォルトの名無しさん
08/04/06 01:11:05
シングルスレッド内のForm間でメッセージ送るときってどうやるんですか?
二つのformが表示されていて、一つのformが他方のformに
おれはこんな処理やったよってのを知らせたい。

626:デフォルトの名無しさん
08/04/06 01:26:57
イベント

627:デフォルトの名無しさん
08/04/06 01:30:31
どうもです。イベントでやってみます。

628:デフォルトの名無しさん
08/04/06 02:14:31
ポインタを伴うWin32APIの呼び出し方が解りません。VB.NETでは

Module Module1
Friend Declare Unicode Function LoadLibraryW Lib "kernel32.dll" (ByVal lpLibFileName As String) As Integer
Friend Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hModule As Integer) As Integer
Sub Main(ByVal Args() As String)
Dim hModule As Integer = LoadLibraryW("C:\WINDOWS\Resources\Themes\Luna\luna.msstyles")
(以下略)
でhModuleにハンドルが入りますが、C#で同じように

class Program {
[DllImport("kernel32.dll")]
internal static extern int LoadLibraryW(string lpLibFileName);
[DllImport("kernel32.dll")]
internal static extern int FreeLibrary(int hModule);
static void Main(string[] args) {
int hModule = LoadLibraryW(@"C:\WINDOWS\Resources\Themes\Luna\luna.msstyles");
(以下略)
としても必ず失敗(0)してしまいます。原因は何でしょうか。

629:デフォルトの名無しさん
08/04/06 02:19:40
GetLastErrorを取得して見る。

630:デフォルトの名無しさん
08/04/06 02:22:28
ポインタ・ハンドルはIntPtr
DllImportのCharSet

631:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/06 03:22:09
IntPtr.Zero

633:デフォルトの名無しさん
08/04/06 03:30:46
if (hModule == IntPtr.Zero) {

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

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

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

でいいよ。

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

636:デフォルトの名無しさん
08/04/06 03:34:51
その場合は CharSet = CharSet.Auto のほうがいい。

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

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

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

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

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

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

642:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/06 20:40:56
どちらも間違ってないけど,フィールドが必要なら特別な理由がない限り迷わず前者

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

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

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

647:デフォルトの名無しさん
08/04/06 22:09:24
C#にはフィールドなんてない。

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

649:デフォルトの名無しさん
08/04/06 22:20:15
>>647
お前は何を言ってるんだ

650:デフォルトの名無しさん
08/04/06 22:24:45
>>647
C#にフィールドはあるんだよ。

651:デフォルトの名無しさん
08/04/06 22:30:24
ごめん間違った、フィヨルドだったわ

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

653:デフォルトの名無しさん
08/04/06 22:33:22
おもろない

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

655:デフォルトの名無しさん
08/04/06 22:42:47
この違いってなんでしょう?
下の方だとエラーになるのです

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

656:デフォルトの名無しさん
08/04/06 22:45:09
上もエラーになるよ

657:655
08/04/06 22:53:16
理由がわかりました
すいません

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

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

660:デフォルトの名無しさん
08/04/07 00:20:32
それはstaticの意味、用途が分かっていないんだと思うが

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

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

663:デフォルトの名無しさん
08/04/07 09:21:22
「フィヨルドの恋人」
     主演:大泉洋

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

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

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

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

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

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

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

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

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

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

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

669:667
08/04/07 14:41:39
>>668
提案ありがとうございます。

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

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

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

で実現できそうです。

671:665
08/04/07 16:46:06
>>666
ご返答ありがとうございます。
OOPは初めてなので、きっと勘違いしていると思います。

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

672:664
08/04/07 16:48:07
>>671の名前欄のレス番を間違えました orz
汚してしまいすみません。

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

674:664
08/04/07 18:02:29
>>673
思いっきりしてます!
正しくはどうすればよいのでしょうか・・・?

675:デフォルトの名無しさん
08/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
08/04/07 18:42:07
あーそうか。もしかしてソースグリッドの表示年月の変更って
プロパティじゃなくてメソッドかなんかでやってんのかな?

sourceGrid.SetMonth(value);

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

677:675
08/04/07 18:47:07
と思ったが、ユーザー登録が必要だということで面倒だからやめた。

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

678:デフォルトの名無しさん
08/04/07 19:27:02
XmlDocument xml = new XmlDocument();
xml.Load(url);

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



679:664
08/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は
URLリンク(sourceforge.net)
からダウンロードできます。)

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

681:678
08/04/07 19:54:29
自決

682:デフォルトの名無しさん
08/04/07 20:00:02
以降はチラシの裏に書けよw

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

684:デフォルトの名無しさん
08/04/07 20:04:25
>>665をお願いします...

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

686:664
08/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:デフォルトの名無しさん
08/04/07 21:36:31
>>685
そうでしたか。ごめんなさい。

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


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch