ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
375:デフォルトの名無しさん
09/03/05 19:56:20
windows formsだとそうなんだ。
WPFの場合
DayOfWeek[] ar = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));
list1.DataContext = ar;
list1.SetBinding(ListBox.ItemsSourceProperty, "");
list2.DataContext = ar;
list2.SetBinding(ListBox.ItemsSourceProperty, "");
だと選択行は共有されないね。


376:デフォルトの名無しさん
09/03/05 22:41:17
>>341
>varを右クリックして「実際の型名に置換」とかできたら、バリバリ使っちゃう。

それ似たのがReSharperにあるよ。

377:デフォルトの名無しさん
09/03/05 22:42:44
似たようなのじゃためなんだ
僕らはC#に汚染されているんだ!

378:デフォルトの名無しさん
09/03/05 22:46:21
>>377
ReSharperはVS用のアドインだよ。確か。

まあこちとら趣味プログラマのexpress edition使い。
たっかいツールなんか使う機会なんざねーんだけどね。

379:デフォルトの名無しさん
09/03/06 00:03:40
>>268
ダメポ 続きは明日・・・・

380:デフォルトの名無しさん
09/03/06 00:09:08
ちょっと最後に質問SQL serverでLanやりたい場合一般的にDBの配置は
C:\Program Files\Microsoft SQL Serverの配下ですか?
自分で作ったC:\aaaみたいなフォルダでもいいんですかね・・・・

381:デフォルトの名無しさん
09/03/06 00:21:34
>>380
SQLサーバが自分のPCとは異なるPCにある場合、
c:\とか、ファイルを直接指定することはないよ。

接続する側→(LAN)→接続されるSQLServer

という関係で接続しているとき、
接続する側は、単に接続されるSQLServerのIPアドレス(とインスタンスと接続するDB名)を指定するだけ。
実際の物理ファイルのパス指定は接続されるSQLServerのほうで指定するので、
ConnectionStringでパスを指定することはない。

少なくとも自分が経験したスタンドアロンのSQLではそんな感じ。

382:デフォルトの名無しさん
09/03/06 00:24:32
ASP.NETの話になっちゃうんだけど
Web画面上にあるボタンをクリックするとクリックイベントが走りますよね。
でもWebだとクリックイベントの前にPage_Loadイベントが実行されますよね。
ちょくせつクリックイベントに飛ばす方法はないのでしょうか?
またPage_Loadイベントの処理の中で、Page_Loadイベントを抜けたら
次はクリックイベントが走るよというのを知る方法はありますか?

383:デフォルトの名無しさん
09/03/06 00:52:34
>>382
初期化したいのに、PostBackしたときもPage_Loadが呼ばれるから、
ボタンを押した時はPage_Loadは呼んで欲しくないということだろうけど、
そのためのIsPostBackだから、それで判断すればいいのでは?

ASP.NETの場合は、表示するたびに、そのページの新しいインスタンスが生成される。
これはwebという仕組み上仕方のないことなので、Page_Loadを実行せずに
インスタンスが生成する方法は基本的にはない。
クリックイベントが発生するということは、IsPostBackが必ずTrueだから、
それで判断すれば?

・・という意味でなかったら、contextとかみれば、イベントがあるかどうか
わかったほうほうがあるはず・・

384:デフォルトの名無しさん
09/03/06 10:01:27
>>374
無関係じゃないよ。同じ親コントロールに属して同じデータソースを参照してるじゃん。
無関係だと主張したいなら明示的にしないとだめ(Control.BindingContextプロパティ)。
仕組みはCurrencyManagerとかBindingManagerBaseとか調べれ。
意図? MSの人じゃないから答えられん。
まあ親とデータソースが同じなら現在行共有できた方が便利じゃねと思ったんじゃない?

.NET 2.0になってBindingSourceが追加されてデータソース主導になったけどな。

385:デフォルトの名無しさん
09/03/06 11:57:01
web上にあるファイルのサイズを簡単に取得する方法はありますか。
ダウンロードする前に知りたいのです。

386:デフォルトの名無しさん
09/03/06 12:00:40
簡単かどうかはその人次第だからなんとも
取得方法はそのファイルがどういうプロトコルで公開されているのかによるからなんとも
サイズ情報が公開されているかどうかはサーバ次第だからなんとも

387:デフォルトの名無しさん
09/03/06 12:04:25
HTTPならHEADで返してくれればいいけどな

388:デフォルトの名無しさん
09/03/06 15:00:26
HttpWebResponseのContent-Length
駄目な場合もあるけど

389:デフォルトの名無しさん
09/03/06 17:33:22
匿名メソッドと、ジェネリクス(Listなどのコレクション以外)で
うまいこと使用している例や、より利点がわかりやすく紹介されている
サイトがあったら教えてください教えてください。

390:デフォルトの名無しさん
09/03/06 17:43:46
>389
宿題?

391:デフォルトの名無しさん
09/03/06 17:49:54
MSDNでいいんじゃね?

392:デフォルトの名無しさん
09/03/06 18:06:45
匿名メソッドは自分だけが見るソースなら短いイベントハンドラの
定義に使うけど、推奨はできないなあ。

Button1.Click+=delegate{MessageBox.Show("Clicked!");};

とか。

処理の一部をカスタムできるメソッドを作るために使う例を
示せれば良いんだけど、できるだけLINQとか標準機能に落とし
込むようにしているので良い例がない。

ジェネリクスはやっぱり、独自のコレクションを作るとかが
多いんじゃない?

あと、幾つかデータの種類があって、それらのデータが更新された
時に更新値を受け取るコールバックを登録するメソッドが、
データの型をパラメタにとるジェネリックメソッドになっていた
のを見た事ある。でもこの場合、データの種類毎にメソッドを
用意するのと比べた場合の利点がさっぱり分からないコードだった。

393:デフォルトの名無しさん
09/03/06 18:17:46
Regex.Replaceなんかまさに匿名メソッドとかラムダ式の出番

394:デフォルトの名無しさん
09/03/06 19:08:52
>>390
宿題ではないです。

>>391
MSDNではサンプルが少ないのと、こういう時に使うと便利というのが、
イマイチよくわからないので。イベント的なコールバック用途というのは
意味はわかります。

>>392
ありがとうございます。
なるほど。自分も匿名メソッドにあまり利点を見いだせない一人です。
そのためサンプルがみたいと思ったのですが、
いいものがないということで残念です。

ジェネリクスもやはり独自コレクションがメインですか・・
コレクション以外の便利な使い方がイマイチ思いつかないので、
サンプルをお聞きしました。

395:デフォルトの名無しさん
09/03/06 19:30:11
前に複素数のジェネリック型なんて議論されていたよね。
それは特殊でかつ有用な使い方なんじゃないかな。

396:デフォルトの名無しさん
09/03/06 20:34:37
別に無理に利点を発見する必要は無いんじゃないの

必要に迫られたら使えばいい程度のものじゃないかね

397:デフォルトの名無しさん
09/03/06 21:38:25
System.Linq.Enumerableで嫌と言うほど出てくるよ
結局はコレクション操作だから微妙だけどな
くだらない例だけどEventHandler<TEventArgs>とか

398:デフォルトの名無しさん
09/03/06 21:49:34
Hoge a = 共通の前処理();
//aを使った固有の処理
共通の後処理(a);
こういうのが各所に出てきたから
void 共通の処理(Action<Hoge> action) { Hoge a = 共通の前処理(); action(a); 共通の後処理(a); }
こんなメソッドを定義して
共通の処理(a => { /*aを使った固有の処理*/ });みたいにしたことがある

399:デフォルトの名無しさん
09/03/06 21:56:13
>>394
・とくめいめそっど
Win Forms やら WPF の非同期部分で大活躍?

・じぇねりくす
基本、型を爆発させないためにある。これを踏まえると
Func<T> とかなかなかに便利な使い方じゃないか?

400:デフォルトの名無しさん
09/03/06 22:02:27
class HogeCache<T> { public static readonly Hoge Hoge = new Hoge(typeof(T)); }
これだけで型ごとに対応するインスタンスのキャッシュが作れる
Dictionary<Type, Hoge>使うよりも遥かに効率がいい
Comparer<T>.DefaultやEqualityComparer<T>.Defaultなどで使われてるパターン

401:デフォルトの名無しさん
09/03/06 22:19:30
>Button1.Click+=delegate{MessageBox.Show("Clicked!");};
こういう使い方って何でするんですか?
デザイン画面でボタンをダブルクリックするとクリックイベントのソースが出てきますが
そこにMessageBox.Show("Clicked");って記述すればいいと思っちゃうんだけど
わざわざこのように書く理由を教えてください。


402:デフォルトの名無しさん
09/03/06 22:21:19
短く書けるからって言ってんじゃん。アホかよ。

403:デフォルトの名無しさん
09/03/06 22:21:48
それだけかよw糞じゃん。

404:デフォルトの名無しさん
09/03/06 22:22:19
だから推奨はできないって言ってるだろw

405:デフォルトの名無しさん
09/03/06 22:24:25
糞すぎじゃん。
何でこんな機能つけたんだ。

406:デフォルトの名無しさん
09/03/06 22:26:37
つLINQ
ラムダ式で同じことがもっと簡潔に書けるから匿名メソッドは不要になった
そのうち非推奨だとコンパイラが警告出すようになってもおかしくない

407:デフォルトの名無しさん
09/03/06 22:28:19
状態によって、異なるクリックイベントを割り当てるのに便利かも。

状態をどこかのメンバ変数に保存して、同じメソッド内でメンバ変数の値によって分岐させるより、
処理そのものを差し替える感じ。
特に汎用できて処理を委譲できる場合なら尚更。

408:デフォルトの名無しさん
09/03/06 22:30:25
C#3.0以降なら
Click += (sender, e) => { MessageBox.Show("Clicked!") };
と書くべき
匿名メソッドと違って引数省略できないのが時々不便に感じるけど

409:デフォルトの名無しさん
09/03/06 22:52:26
匿名メソッドは List<T> 周りのメソッド眺めてみりゃどういう
感じに使うのかわかる気もするが…あえてイベントハンドラなら
一時オブジェクトに使う。WebClient とか

410:デフォルトの名無しさん
09/03/06 22:55:40
>>401
デバッグ用途で一時的に作ったようなボタンなんかだと、
それ用のイベントハンドラも短くなりがちになる。そこで、
Loadedイベントハンドラだけはxamlエディタで定義&割り当て
をしてもらって、そのLoadedイベントハンドラの中で
 
Button1.Click+=delegate{MessageBox.Show("Clicked!");};
 
って書いた方がゴミメソッドが増えなくて見やすいんだよね。
まあでも、書いたとおり、推奨はできない。

ただ、ある程度複雑なプログラムを書くと、デザイナもxamlも
あまり頼りにならなくて、コードでGUIをアレコレする必要が
出てくる場面は頻繁にある。特に動的な処理が必要な場合。

例えば、StackPanel1の子にButton1がなっているとして、
Button1のClickイベントハンドラで

Button1.IsEnabled = false;
Button Button2 = new Button() { Content = "Click Me!" };
Button2.Click += delegate {
 Button1.IsEnabled = true;
 StackPanel1.Children.Remove(Button2);
};
StackPanel1.Children.Add(Button2);

こんなの。これだと、Button2のVisiblityなりIsEnabledなり
をいじるイベントハンドラを書く方が自然なのでちょっと
人為的かな。

411:デフォルトの名無しさん
09/03/06 22:59:54
何の断りもなく当然のようにWPFw
初心者が混乱するよ

412:410
09/03/06 23:06:04
>>408
むしろ、その引数を省略できるという性質があるために、
引数を必要としないイベントハンドラの定義にはdelegate{}を
使っている。推奨はしない。あんまり、
void foo(object sender, EventArgs e){...}
みたいなのが増えるの好きじゃないんだよね、個人的に。

そんなわけだからイベントハンドラをメソッドとして作る場合にも
void Button1_Clicked(){
 MessageBox.Show("Clicked!");
}
と引数なしのメソッドを書いて
Loadedイベントハンドラの中とかで
Button1.Click+=delegate{Button1_Clicked();};
とか書く事すらある。これも推奨はできない。

413:410
09/03/06 23:08:40
>>412と類似しているけれど唯一推奨できるのは、次のケースかな。

void 処理1(){
ほにゃらら
}
void 処理2(){
ほにゃらら
}

みたいな処理の単位であるメソッドがあって、それをボタンから
呼び出させる場合。
Button1.Click+=delegate{処理1();処理2();};
みたいに書く。

VBでもWindows FormsでもWPFでも、
入門書に書いてある事を実践すると、イベントハンドラに
何でも書くスタイルを身に着けてしまう人が多いけれど、
本来は処理を適当な粒度で分割したメソッドを定義して、
イベントハンドラはそれらを呼び出すだけの簡潔なもので
あるべき。

Model-Viewスタイルとか良くは知らない趣味プログラマだけど、
こんな感覚でやっています。


414:デフォルトの名無しさん
09/03/06 23:10:40
WPFに限った話をすると,
デザイナでイベントハンドラ追加するのがちょっとだけ面倒だったり
動的にコントロールを追加することが多かったり
基底クラスのイベントでもオーバーライドじゃなくてイベントハンドラ使うことが多かったりするから
Button1.Click+=delegateみたいなことは比較的よくやる

415:410
09/03/06 23:18:53
ごめん、なんか脇に逸れすぎてた気がする。匿名メソッドorラムダ式
を用いて処理を委譲する時の一番の利点は文句なしに「継続」だった。
でも、LINQ以外でうまい例を作れないや。

とりあえず、
void Sum10(){
 int s=0;  
 for(int i=1;i<=10;i++){
  s+=i;
 }
 Button1.Click+=delegate{
  MessageBox.Show(s.ToString());
 }
}

ってやって、どこかでSum10()を呼び出すと、Sum10からは
ちゃんと処理が戻るんだけど、その後Button1をクリックすると
sの値55が表示される、って事を知っておいて。
匿名メソッドで一番重要なのはこれなんだけど、脇に逸れ過ぎた。

非同期処理なんかをする場合には超超超〜重要なはずなので
誰か例を書いてくれ。

416:デフォルトの名無しさん
09/03/06 23:29:48
わかりづらいんであんまりそういうのは多用しない方がいいと思うよ
>>415の中でs++したりするとわけがわからなくなる(サンプルとしては面白いけどね)
ローカル変数を取り込めるメリットは,>>398のようなパターンが自然に使えること

417:デフォルトの名無しさん
09/03/06 23:36:52
引継でC#やる事になったんだけど、1ファイル5000行を越えるようなものがざらにあります。
一カ所直すのにも不要なものが目に付いて頭がグワングワンしてきます。
プロパティ、イベント、その他のメソッドという分類でファイル分割しようと思ってるんだけど、君らはどうしてるの?



418:デフォルトの名無しさん
09/03/06 23:40:42
#regionでよくね

419:410
09/03/06 23:45:31
うん、>>415は意図は何もないただのサンプル。

とりあえずUIの話の続きとして「継続」の利点を書いておくと
UI以外のスレッドで何か計算して、その結果を用いてUIを更新する場合、
匿名メソッドを使うのが一番素直に書ける。コードの流れがぶった切ら
れない的な意味で。

例えば
//UIと別スレッド
while(円周率の計算精度>閾値){
  円周率の計算の途中経過をtempPiに代入
  Window1.Dispatcher.Invoke((MethodInvoker)()=>{
   Window1.Label1.Content=tempPo.ToString();
  });
}
こういう場合にメソッド定義とInvokeの引数ありバージョンを使っていたら
訳がわからなくなる。

>>417
自分の場合は#region-#endregionで
・変数定義とコンストラクタ
・プライベートメソッド
・パブリックなメソッドとプロパティ
・(あれば)カスタム可能なメソッド、プロパティ
と分けている。Ctrl+M-M, Ctrl+M-O等のショートカットは知っておくと吉。

420:デフォルトの名無しさん
09/03/06 23:51:42
>>413
> 本来は処理を適当な粒度で分割したメソッドを定義して、
> イベントハンドラはそれらを呼び出すだけの簡潔なもので
> あるべき。

理念的にはその通りだと思うんだけど、若干反発も感じるのは
その基本に忠実な書き方をすると、ベタにイベントハンドラに書いた場合と比べて
「その処理」がイベントハンドラからのみ実行される処理だという明示性が
失われるんだよね。

421:デフォルトの名無しさん
09/03/06 23:59:16
>>420
多分、その、”「その処理」がイベントハンドラからのみ実行される”
という事を前提としたコーディングが、設計の柔軟な変更などを将来的に
阻害してしまう、っていうのが、Model-View-Controlerモデルとか
その派生系とかが繰り返し提案される理由なんじゃないかな。

シンプルなプログラムだと却って変な事になってしまう事が多いのも
確かだと思うけど。

422:419
09/03/07 00:09:11
419を1から100までの和を計算し、途中経過を表示するコードに書き直し
てみた。あと、MethodInvokerはWindows Formsのだから(デリゲート
だからシグネチャが正しいので通るけど)よくなかったのでActionにして
みた。このコードは、はじめのお題の、匿名メソッドの利用例としては、
”良い”利用例だと思う。他の方法だとめちゃめちゃごちゃごちゃになる。

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Thread sum100Thread = new Thread(new ThreadStart(sum100));
            sum100Thread.Start();
        }

        private void sum100()
        {
            int s = 0;
            for (int i = 1; i <= 100; i++) {
                s += i;
                this.Dispatcher.Invoke((Action)delegate{
                    this.Label1.Content = s.ToString("0000");
                });
            }
        }

xamlは
<Window x:Class="WpfApplication1.Window1" ほにゃらら  
Loaded="Window_Loaded">
        <Label Name="Label1"/>
</Window>
だけ。

423:デフォルトの名無しさん
09/03/07 00:30:28
それ全部100にならない?

424:423
09/03/07 00:33:36
100じゃなくて5050か

425:423
09/03/07 00:52:09
確認したけどやっぱり意味的に間違ってる
匿名メソッドは現在のスコープの変数そのものを取り込むんだ
ループ内で生成される全ての匿名メソッドが同一のsを参照してるから
ただ一つのsのインスタンスを共有することになる
ループの中でint ss = s;みたいに宣言し直してそっちを取り込むようにしないとだめ

426:デフォルトの名無しさん
09/03/07 00:56:32
え、ちゃんとくるくると1から5050まで行くけど。
コンピュータが速過ぎるんじゃない?

こういう、継続を必要とするデリゲートの場合
インナークラスが暗黙に定義されて、それがメソッドと
フィールドを持っている。デリゲートのインスタンス作成時には
このインナークラスのインスタンスが作成されて、フィールドに
必要な変数がコピーされる。これが参照型だと話がまたややこしく
なるけれど、値型ならば問題はないはず。

427:デフォルトの名無しさん
09/03/07 01:02:18
いや>>422のコードだと確実にsのインスタンス(sを保持する自動生成されたクラスのインスタンス)は
一つしか作られないよ。IL見ればわかる。
何でうまくいくのかは知らないけど意味的には確実に間違ってる。

428:デフォルトの名無しさん
09/03/07 01:12:10
ごめん、BeginInvokeじゃないから同期実行になっていた。
なんじゃこのオチ。

429:デフォルトの名無しさん
09/03/07 01:24:19
スレッドの非同期処理しか役に立たないってのもなんか寂しいな

430:428
09/03/07 01:45:16
というわけで
        private void sum100()
        {
            int s = 0;
            for (int i = 1; i <= 100; i++) {
                s += i;
                int s_ = s;
                this.Dispatcher.BeginInvoke((Action)delegate{
                    this.Label1.Content = s_.ToString("0000");
                });
                Thread.Sleep(0);
            }
        }
としてみたら希望通りの動作になったんだが、
                Thread.Sleep(0);
をコメントアウントすると、最後の5050しか表示されないんだけど、
ディスパッチャスレッドの優先度って低いの?

431:デフォルトの名無しさん
09/03/07 02:02:54
ようはメソッド内で使用するだけの、クラスのメンバに加えるまでもないメソッドを定義するのに便利ってこと?

432:デフォルトの名無しさん
09/03/07 02:03:06
タイムスライス内で終わってしまうからだろ。
ループもっと長くしろよ

433:デフォルトの名無しさん
09/03/07 02:06:09
あいからわずLanでつながらない…


ところで>>155さんのIPアドレスってつなぎたいSQL SERVERのPcでコマンドプロンプトIPCONFIGででる
IP アドレスですか?

おれは一体何週間これをやってるんだろうか
いろんなスレ放浪して迷惑掛けまくりで


>>170 SQL Serverのポート番号は Express Edition場合動的で コンフィグレイションマネージャーで固定する遺体です



434:デフォルトの名無しさん
09/03/07 02:12:48
>>433
まず、SQLSMSEで接続できるのか確かめなさいってば。
できた?

435:デフォルトの名無しさん
09/03/07 02:17:55
えっと・・ちょっとまって

436:デフォルトの名無しさん
09/03/07 02:19:38
サーバ名にIPアドレス、
SQLServer認証で、
設定したログイン名とパスワードで接続できる?

437:デフォルトの名無しさん
09/03/07 02:28:35
MS server management studio expressで
ファイル−オブジェクトエクスプローラで接続を選択
サーバー名を
コマンドプロンプトipconfigで得たipV4のアドレスを入れる

認証を:SQL Server認証する
ログイン:コントロールパネルのシステムにでてるフルコンピュータ名
パスワード:パソコンにログインするパスワード


でやったら・・・だめでした・・・
どこが違うのでしょう?

438:デフォルトの名無しさん
09/03/07 02:31:24
むむむ:設定した<<ログイン名>>これが、よくわかってない気がします・・・


439:デフォルトの名無しさん
09/03/07 02:33:17
フォームに関してです、BackColorにTransparencyKeyに設定した色を設定した場合、
同じバイナリを実行したときにwindows XPでは透明部分をクリックするとその背後にある別のアプリケーションをクリックすることができます。
windows vistaでは透明な部分をクリックするとそのフォームをクリックします。
vistaでxpと同様にするためにはどうすればいいでしょうか?

440:デフォルトの名無しさん
09/03/07 02:34:25
>>437
SQL Server認証は、SQL Server自体に設定する、
Windows認証(パソコンのコンピュータ名と、パソコンにログインするパスワード)とは別。
SQL ServerにSQL Server認証用のアカウントを別途設定して、
そのアカウントでログインする必要がある。

Windows認証でログインするのは、なんていうのかな、
アクティブディレクトリとか組んで、社内のネットワークに接続するのに必要な認証のことで、
それを認証の変わりと見なすってこと。
(SQLとネットワークの両方で認証したら面倒だから、ネットワークにログインする認証を
ユーザとして認めるっていうこと。Windows認証で今自分のアカウントで接続できるのはそういうこと。)

今は普通に家で勉強しているような感じだと思うので、
ネットワーク越しに接続するのにはWindows認証は関係ない。

441:デフォルトの名無しさん
09/03/07 02:43:13
SQL Server自体に設定する<<ここがよくわからないところです
MS server management studio expressで設定するのでしょうか?

442:デフォルトの名無しさん
09/03/07 02:45:14
わ もう3時か!
付きあわえて申し訳ない
もう少しググッテみます
でわっ

443:デフォルトの名無しさん
09/03/07 02:45:52
>>432
和を取るの100000までににしてみたら、ずっとマウスポインタが砂時計に
なって、最後の結果だけが表示された。

タイムスライスってそんなに長いの?数10ms単位で切り替わるんじゃないの?


444:デフォルトの名無しさん
09/03/07 02:48:48
>>441
SQL SMSEの左ペインのツリービューで、セキュリティ−ログインから設定する。
ログインを右クリして、新しいログインを作って、ログイン名を入力して、
SQL Server認証を選択して、パスワードを設定する。

さっきのリモートでのSMSEの接続には、ここで設定したSQL Server認証の
ログイン名とパスワードを設定すると接続できるということ。

バーチャルPCは、あなたのPCとは別のPCだから、
あなたのPCにログインするアカウントで、バーチャルPC内のSQLに接続はできないということ。
ただし、あなたのPCにインストされてるSQLServerは、あなたのPCにログインしているユーザを
SQLServerのユーザとしても認める設定をしているので、自分のPCのアカウントでも
ログインできましたってこと。

445:デフォルトの名無しさん
09/03/07 03:03:59
自PcからSQL Server認証試したけれどだめでした
Ipv6じゃないと だめなのかな?

446:デフォルトの名無しさん
09/03/07 03:07:40
だめですねー
V4V6同様に下記エラー

Microsoft SQL Server、エラー: 18452

444さんの通り新しいログイン作ったんですが

ミスったかな
試行錯誤してきます



447:デフォルトの名無しさん
09/03/07 03:09:37
V4でいける
SQL Server認証で通らないのなら、なんかの設定がおかしいんでしょ
バーチャルPCのファイアーウォール機能が働いていて、そもそも接続できないとか、
SQLの設定でTCP/IPの接続をそもそも許可していないとか、考えるときりがない。

448:デフォルトの名無しさん
09/03/07 03:11:16
>>446
その前にバーチャルPC上のSMSEで、そのSQLServerのアカウントでログインできる?
サーバ名に、そのバーチャルPCに割り当てられたIPアドレスを入力して。

449:デフォルトの名無しさん
09/03/07 03:14:55
いや今は自Pc(ローカル)でチャレンジ中
>>448 ハイ ちょいとおまちを

450:デフォルトの名無しさん
09/03/07 03:21:14
うは バーチャルpcにSMSEないや・・・・
ごめん

451:デフォルトの名無しさん
09/03/07 03:23:03
バーチャルPCにSMSEがないのに、
どうやってアカウントを設定できるんだ?

452:デフォルトの名無しさん
09/03/07 03:29:38
ベースのVISTA、ほうでアカウント設定したので  汗;


環境(Vista アルティメット(SMSEあり) <=  (ヴァーチャルPC Xp home (SMSEなし))

453:デフォルトの名無しさん
09/03/07 03:35:08
VirtualPCのSQLServerにアカウント設定しなきゃ、
UltimetのSMSEから接続できないでしょうよ

VirtualPCは、まったく別のところにあるPCだと思わなきゃだめよ

454:デフォルトの名無しさん
09/03/07 03:44:49
いや
VirtualPCのPGからUltimetのフォルダにあるMDFにコネクトしたいので・・・

うーん
VirtualPC側にアカウント必要なんですか?

455:デフォルトの名無しさん
09/03/07 03:46:06
遅くまでありがとう
もう少し頑張る気力がわきました

456:デフォルトの名無しさん
09/03/07 04:00:16
まだ起きてるなら、しばらく付き合ってやるけど?

457:デフォルトの名無しさん
09/03/07 04:01:38
>>454
SMSEをクライアントにみかけて、
TCP/IP経由でSQLServerに接続するテストをしてみなっていってるわけだから、
その例で言えば、VirtualPCのSMSEでUltimetのSQLServerに接続するってこと。
だから、設定用のSMSEと、接続実験用のSMSEの両方ないとだめでしょうよ。

UltimetにだけしかSMSEがないということは、UltimetのSQLServerにアカウント設定してたわけで、
それでUltimetからVirtualPCのSQLServerに接続できるわけないでしょ。

やってることが、どうもちぐはぐだな。

458:443
09/03/07 04:35:32
>>430の問題解決しました。
ディスパッチャのノーマルプライオリティのキューが一杯になってしまって、
和を取っているスレッドの処理が終わってからようやくキュー内の処理が
全て完了する、という形になっていたためでした。ディスパッチャスレッド
での処理の優先順位を下げる事で、ディスパッチャがキュー内の処理を全部
やっつけようとせず、順次こなしていくようになりました。

ディスパッチャスレッドでの処理の優先順位を上げなければならないと
全く逆に勘違いして大はまりしてしまった。
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Thread sum100Thread = new Thread(new ThreadStart(sum100));
            sum100Thread.Start();
        }
        private void sum100()
        {
            int s = 0;
            for (int i = 1; i <= 100; i++) {
                s += i;
                int s_ = s;
                this.Dispatcher.BeginInvoke((Action)delegate {
                    this.Label1.Content = s_.ToString("0");
                }, DispatcherPriority.Background, null);
            }
        }
これでようやく、UIを非同期的に更新する処理を匿名メソッドの
「継続」の利点を生かして簡潔に書く例になりました。

459:デフォルトの名無しさん
09/03/07 04:39:04
>>443
切り替わっても Dispatcher キュー処理するほうが時間かかってる
だけだろそれ。WPF は基本保持モード

460:デフォルトの名無しさん
09/03/07 05:36:38
>>459
そうです。マウスポインタが砂時計に変わることから、ようやく、
これ、UIスレッドの方が滞っているんじゃん、と気が付けました。

461:デフォルトの名無しさん
09/03/07 06:27:10
>>458
引数いらないなら、こっちの方が良いんじゃないか。(インテリセンスに出ないけど)

 Dispatcher.BeginInvoke(DispatcherPriority, Delegate)

あと、DispatcherExtensions クラスにある拡張メソッド使うと、

 Dispatcher.BeginInvoke(Action, DispatcherPriority)

が使えるらしい。(型推論が効く)


462:デフォルトの名無しさん
09/03/07 08:23:33
>>457 了解SMSEインストールしてきま・・

463:デフォルトの名無しさん
09/03/07 10:19:21
>>458
知らんかった。
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
になっているBeginInvokeがあるのね。        
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method);
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method, object arg);
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method, object arg, params object[] args);
と三つも。なんでこんな事になっているんだ?

464:デフォルトの名無しさん
09/03/07 16:22:37
疑問に思ったんだが、WPF の Dispatcher.Invoke には WinForms の
EventHandler、MethodInvoker、WaitCallback みたいに、
特別扱いされてるデリゲートは無いのかな

今夜にでもソース読んでみるか

465:デフォルトの名無しさん
09/03/07 16:41:02
>>389の質問に立ち戻る
まず、ジェネリクスに関しては、ある本でこんな例を見つけた(わりと一般的?)
タブベースのUIで、そのタブの中身はそれぞれ異なるビューであるときのベース。
namespace ContactManager.Presenters
{
    public class PresenterBase<T> : Notifier
    {
        private readonly string _tabHeaderPath;
        private readonly T _view;

        public PresenterBase(T view)
        {
            _view = view;
        }

        public PresenterBase(T view, string tabHeaderPath)
        {
            _view = view;
            _tabHeaderPath = tabHeaderPath;
        }

        public T View
        {
            get { return _view; }
        }

        public string TabHeaderPath
        {
            get { return _tabHeaderPath; }
        }
    }
}

466:デフォルトの名無しさん
09/03/07 16:46:03
匿名メソッドに関しては、別スレッドで画像がロードされたときに
メインのUIのサムネールを更新する例として(これはいままで議論されてたのと
基本的に同等のものだが)

Application.Current.Dispatcher.Invoke(
DispatcherPriority.Normal,
(Action)delegate { OnPropertyChanged("Thumbnail"); }


467:デフォルトの名無しさん
09/03/07 17:19:16
>>457

SMSEインスト完了  く^^


アカウント作れない・・・
このバージョンの Microsoft Windows では、MUST_CHANGE オプションはサポートされません。
がーん



468:デフォルトの名無しさん
09/03/07 17:21:16
SMSEはインストできたんだから、アカウントつくれる方に接続すればいいじゃん

469:デフォルトの名無しさん
09/03/07 18:51:15

>>468
むむむ諦めていたところに
良意見
試行錯誤中

470:デフォルトの名無しさん
09/03/07 19:05:47
C#になんの関係もないことに、そろそろ気付けよ・・・

471:デフォルトの名無しさん
09/03/07 19:07:45
C#でネットワーク越しにDBに接続できないから始まって、
ならまずはManagement Studioで接続できる?の話になってるから、
関係無いとも言えるし、継続してるから関係あるとも言える。

472:469
09/03/07 19:13:04

Vistaで作成したアカウントでXpのSEMSから接続
サーバーの種類 データーベースエンジン
サーバー名 IPアドレス 999.999.999.999(IPconfigでvistaから得た)
SQL Server 認証
ログイン名 ja
パスワード *****

結果
サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときに
このエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることが
エラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ,
error: 40 - SQL Server への接続を開けませんでした) (Microsoft SQL Server、エラー: 1326)

・・・で、もって
Vistaのセキュリティー構成をリモート接続をTcpipのみしてみたが
だめだったので(Tcptip及びパイプ)へ戻すが・・・ここでひらめいたXpのリモート接続を(Tcptip及びパイプ)変更
サービス停止再起動

結果 上記と同じ・・・・だああああああああああああああああ<<<今ここ

473:デフォルトの名無しさん
09/03/07 19:15:11
他の方法でちゃんとつながるようになってから来い、ってことだわな。

474:469
09/03/07 19:15:50
>>470
それはすっごく気にしてる
申し訳ない
今まで(一週間位)指摘されないこともすごく感謝してました

「ありがとうそしてごめんなさい」としか言えない

475:469
09/03/07 19:17:24
>>473
ローカルでは繋がるんですけどね
今日でわからなかったら諦めるから
目をすぶってくれ

476:469
09/03/07 19:20:11
つぶってくれ ・・・

477:デフォルトの名無しさん
09/03/07 19:23:50
>>472
他の要因が原因に成りにくい方法から、一つずつ確実にテストしなくちゃだめだな。
なんで、VistaのSQLSMSEで、VistaのSQLに、SQL認証で、そのアカウントで接続できるかどうかが第一点。
1)接続できなかったら、アカウントの設定が間違ってる。
2)接続できたら、アカウントの設定は正しいので、ネットワーク越しの接続に不備がある。
・この場合、VistaやXPのファイアーウォールやアンチウィルスのファイアーウォールの可能性
・SQLServerの設定でTCP/IP越しの接続ができなくなってる
・SQLServer2005だと、Advanveなんちゃらをインストしてないと、リモート接続が許可されないとか、
そんなのもあった気がする。

478:デフォルトの名無しさん
09/03/07 19:26:07
アカウントってなんだよ・・・
SQL Server 認証に NT アカウントは関係ないぞ。(TCP/IP なら)

479:デフォルトの名無しさん
09/03/07 19:33:24
ログイン名:ja

↑こんなログイン作ったのか? 最初からあるのは「sa」だぞ?

あとは、ポート 1433 を開けてあるのか確認すれ。

480:469
09/03/07 20:25:54
うん
簡単にできたから面白くて
maとjaとか作った

vistaの
コンフィグレーションマネージャーで動的ポート消して
IPALLを1433に変えて再起動

ダメ
というより
ローカル(vista内)でさえSQLserver認証できてないような信頼がどうのかとか

481:デフォルトの名無しさん
09/03/07 20:30:31
もういいでしょ。SQLサーバの設定正しくできるようになってから、またおいで。

482:469
09/03/07 20:33:56
わかった
すまなかったごめんな
皆さん急がしいところ2週間もありがとうございました


483:デフォルトの名無しさん
09/03/07 20:52:54
>>481
本当に役立たずだなお前

484:デフォルトの名無しさん
09/03/07 21:06:56
在日がイライラしてんだろ察してやれ

485:デフォルトの名無しさん
09/03/07 21:09:32
うわ・・・

486:デフォルトの名無しさん
09/03/08 00:18:13
スレ違いは別にいいんだけどさ、勝手な略語を書き込みまくるのはやめれ

URLリンク(msdn.microsoft.com)(SQL.90).aspx

487:デフォルトの名無しさん
09/03/08 01:42:23
C#でWindows Formアプリーケーションを作成し、WebBrowserコンポーネントを
乗せています。
そこにSVGファイルを表示させたいのですが、実行するとコンポーネント内には

--------------------------------------------------------------------
取り消されたアクション

Internet Explorer は、要求された Web ページにリンクできませんでした。
要求された Web ページは現在、利用できない可能性があります。
--------------------------------------------------------------------

と表示され、別途IEが起動します。
別途起動したIEには「セキュリティ保護のため、コンピュータにアクセス
できる・・・」といういつものメッセージが表示され、
「ブロックされているコンテンツを許可」を選択すると正常に表示されます。

そのファイルをHTMLでラップするとIEの起動は止められますが、
コンポーネント内には空白と赤×のアイコンが出るだけです。

恐らくブラウザコンポーネントのセキュリティ設定の問題だと思うのですが
Windows Formアプリケーションから呼び出したときだけセキュリティの
レベルを下げることは可能なのでしょうか?
それとも別の開放があるのでしょうか?

ちなみに読み込ませるファイルはローカルにあり、自分で書いた安全な物です。

488:デフォルトの名無しさん
09/03/08 01:58:59
>>487
URLリンク(codezine.jp)

489:464
09/03/08 02:16:10
URLリンク(msdn.microsoft.com)
> ディスパッチャ操作にこのデリゲートを使用する必要はありませんが、
> DispatcherOperationCallback と SendOrPostCallback は動的な呼び出しを使用します。

この文章がまじで意味不明だったんだが、大体分かった。
DispatcherOperationCallback と SendOrPostCallback *以外は* DynamicInvoke() される。

で、>>461の DispatcherExtensions クラスの拡張メソッド BeginInvoke() を使うと、
Action を DispatcherOperationCallback でラップしてくれる。

490:デフォルトの名無しさん
09/03/08 02:30:09
>>488
COMですか・・・。
と言うことはWebBrowserコンポーネントじゃなく、COMのaxWebBrowserを
使うということでしょうか?
後、これは.Net 3.5、Visual Studio 2008でも通用するテクニックなのでしょうか?
明日試してみます。ありがとうございました。

491:488
09/03/08 03:15:24
>>490
ごめん、自分で実装したことはないから詳細は不明
とりあえず、
webbrowser IInternetSecurityManager
のキーワードで検索するといろいろ引っかかるから使えるかどうか調べてみてください

492:デフォルトの名無しさん
09/03/08 03:23:31
>>491
はい。とりあえずやってみます。

正直COMはあんまり良く理解してないのでWebBrowserコンポーネントで
何とかできるとありがたいのですが・・・。

493:デフォルトの名無しさん
09/03/08 12:47:41
>>489
型推論が効くって説明は誤っていると思っていたので気になって
いたんだけど、了解した。
Dispatcher.BeginInvoke((Action)delegate{},優先度);
って書くと呼び出しが高速になるって事だね。それで引数が必要ならば
拡張メソッドじゃない標準のBeginInvokeを使って
DispatcherOperationCallbackかSendOrPostCallback
を使えば良いと。

ところで、
using System.Windows.Threading;
しても、この拡張メソッドがInteliSenseに出てこなくて拡張メソッドが
有効になっていない気配だったので気になって調べて見たら
System.Windows.Presentation
への参照を追加するのが必要なのね。これでめでたくInteliSense
に出てきました。

494:デフォルトの名無しさん
09/03/08 13:45:57
C#2.0、ジェネリクスメソッドで、型のインスタンスを生成して返すことってできますか?
できるのなら、どうすればいいでしょうか。こんなことをやりたいです。

public T Hoge<T>()
{
 return new T();
}

495:デフォルトの名無しさん
09/03/08 13:53:14
public T Hoge<T>() : where T : new() { return new T(); }
ちなみにこのnew T()はActivator.CreateInstance<T>()のシンタックスシュガー

496:デフォルトの名無しさん
09/03/08 14:48:35
おお、できたありがとう!

497:デフォルトの名無しさん
09/03/08 19:56:56
GenericなFactory ですね

498:デフォルトの名無しさん
09/03/08 22:31:15
ジェネリックコレクションに格納されているデータで
引数で渡した値が存在するかをチェックしたいのですが
パフォーマンスが良いやり方を教えていただけないでしょうか?

↓こんなんじゃあパフォーマンス悪すぎですよね・・・
private bool Search(string keyword)
{
foreach(string value in this._data)
{
if(value == keyword)
{
return true;
}
}
return false;
}


499:デフォルトの名無しさん
09/03/08 22:35:47
一般にはそれしかない
_dataがList<T>や配列ならFindとか使えばいい

500:デフォルトの名無しさん
09/03/08 22:39:21
std::setみたいのって無いの?

501:デフォルトの名無しさん
09/03/08 22:39:44
.NET3.5で要素が重複しないならHashSet<T>使えば速いかも

502:デフォルトの名無しさん
09/03/08 22:47:37
_dataについてIEnumerable<T>型であること以上のことがわからないのであれば,
asでICollection<T>にキャストしてnullなら>>498方式,nullでなければICollection<T>.Contains
を使うのが一般に速いはず
LINQが使えるなら何も考えずEnumerable.Containsを使えばいい
(こういう小細工は中でやってくれるから)

503:デフォルトの名無しさん
09/03/08 23:59:18
main()があるクラスの名前ってどうしてる?
IDEの吐くスケルトンのデフォのProgramのままが普通なんだろうか。

あと、グローバルなシングルトンを取得する静的メソッドを寄せ集めたクラスって
定番の名前とかあるのかな。

504:デフォルトの名無しさん
09/03/09 00:01:24
どっちも絶対にinternalにするので名前なんてどうでもいい

505:デフォルトの名無しさん
09/03/09 00:05:15
>>503
クラス名・変数名に迷ったら書き込むスレ。Part14
スレリンク(tech板)l50


506:デフォルトの名無しさん
09/03/09 00:06:35
>>505
なにこの俺にぴったりのスレ。

507:デフォルトの名無しさん
09/03/09 00:21:07
>>504
コードを書く人にとってはそうでも、コードを読む人(3ヶ月後の自分を含む)
にとってはそういう考え方は困る。

少なくとも普通はクラスファイルが数十以上になる、
ある程度実用的なコードを書いてる場合は。

前にも書いたけど、やっぱり2chってトリビアルな知識はなぜか妙に詳しいが
大きなプログラムは書いたことないし書けない人間が多いのかな。

508:デフォルトの名無しさん
09/03/09 00:22:48
最後の2行がなければ全面的に同意したのに

509:デフォルトの名無しさん
09/03/09 00:25:42
大きいの作るときにグローバルインスタンス寄せ集めクラスはそもそもどうかと

510:デフォルトの名無しさん
09/03/09 00:57:31
>>507
個人的には C# だと名前変えるのそんなに大変じゃない場合が
多いから >>504 とは別の理由で結構無頓着だなぁ

名前ってウダウダ考えるより書いてないときにひょんと来たり
整理してから思いついたりするから後回しにしてそういう時間を
とるほうを優先するかな。

511:デフォルトの名無しさん
09/03/09 09:40:54
どうでもいいというのは、その状況で適切な名前をつければいいと言うことであるわけで
何か固定の名前を付けるなんて小規模で1人でやってる場合ならいいが

512:デフォルトの名無しさん
09/03/09 16:55:32
C#からFlashをocxで呼び出して表示させると、
Microsoft OEM Readyプログラムのテスト5で
バッファーアンダーランのようなエラーで止まってしまうんですが、
何か良い方法はないのでしょうか。

FlashはAS2とAS3で、それぞれステージだけある空のswfファイルです。

---
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\system32\Macromed\Flash\Flash10b.ocx -
Flash10b+0x3ef4a:
673fef4a 8a08 mov cl,byte ptr [eax] ds:0023:11012000=??


513:デフォルトの名無しさん
09/03/09 17:42:59
rubyでMechanize使って実装していた処理をC#に移植中なんですが
「Webページのテキストボックスに文字列を入力してsubmitボタンを押す」
というような処理をするときWebBrowserクラスを使うしかないんでしょうか

できればDocumentCompleteで待つように別スレッドが発生しないクラスがあればうれしいのですが・・・

514:デフォルトの名無しさん
09/03/09 17:49:00
多分IronRubyとか使ってRubyのを使えるだけそのまま使った方がいい

515:デフォルトの名無しさん
09/03/09 17:50:47
なんでC#なんだろ

516:デフォルトの名無しさん
09/03/09 18:38:40
Linqについて勉強しようと思っているのですが、何かお薦めの本があれば教えてください

517:デフォルトの名無しさん
09/03/09 19:13:43
もしかしたら、.NET Frameworkのバグ(?)を見つけたかもしれないんですが、
本物か勘違いか、皆さんのご意見を伺いたいです。まずはサンプルコードを。

-----------------------
Type type = typeof(List<string>); // 型は何でもいいです
type.GetInterfaces(); // .NET Framework 1.1以降のメソッド
type.GetGenericArguments(); // 2.0以降のメソッド

Type delegator = new TypeDelegator(type);
delegator.GetInterfaces(); // 無問題
delegator.GetGenericArguments(); // NotSupportedExceptionをthrow

type.Equals((object)delegator); // false <= ???
type.Equals((Type)delegator); // true
delegator.Equals((object)type); // true
delegator.Equals((Type)type); // true
-----------------------

解説は次のレスで。

518:デフォルトの名無しさん
09/03/09 19:16:00
勘違い
以上

519:デフォルトの名無しさん
09/03/09 19:25:00
URLリンク(msdn.microsoft.com)
> TypeDelegator クラス
> Type オブジェクトをラップし、すべてのメソッドをこの型にデリゲートします。

という継承用のヘルパークラスなんですが、以下の二点について。

(1) Typeクラスのメソッドのうち、.NET 2.0以降でサポートされたメソッドをサポートしていない?

きちんと確かめたわけではないのですが、TypeDelegatorでは.NET 1.1の時点で
Typeがサポートしていたメソッド以外について委譲(デリゲート)を実装していないように見えます。

通常は、Type.GetGenericArguments()を呼ぶと、実行時にはSystem.RuntimeTypeの実装を呼ぶので
問題ないのですが、TypeDelegatorから呼ぶと、継承元のメソッドであるType.GetGenericArguments()
が呼ばれます

また、SSCLIにあるコードによれば、Typeでの実装は
URLリンク(labs.developerfusion.co.uk)
> public virtual Type[] GetGenericArguments()
> {
>   throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride"));
> }
となっているらしいので、TypeDelegator.GetGenericArguments()を呼ぶと
NotSupportedException(「派生クラスには実装を指定しなければなりません。」)が投げられてしまうようです。

520:デフォルトの名無しさん
09/03/09 19:38:51
ジェネリクスでも、メソッドの引数としてType typeof(T)を渡すとSystem.RuntimeTypeが渡されるけど
同じ場所でtypeof(T).ToString()を渡すとTのクラス名が渡される

なぜだ?
坊やだからさ

521:デフォルトの名無しさん
09/03/09 19:39:16
(2) Type.Equals((object)TypeDelegator)の判定が正常でない?

Type.Equals(object)の方を呼んでTypeDelegatorのインスタンスを渡した場合のみ、
同じTypeを指していてもfalseが戻るようです。
こちらは原因がさっぱり分かりませんが、正常な判定ではないような気がします。

---------------------
というのが私の意見なのですが、勘違いぽかったらツッコミをお願いします。

522:デフォルトの名無しさん
09/03/09 19:48:26
>>520
すいません、もう少し詳しくお願いします。

523:デフォルトの名無しさん
09/03/09 20:04:35
とあるジェネリクスメソッドGeneticMethod<Nullpo>内で
public void Method(Type type)としてMethod(typeof(T))とすると、
MethodにはSystem.RuntimeTypeが渡される
同じジェネリクスメソッド内から
public voix Method(string typeName)としてMethod(typeof(T).ToString())とすると、
Methodには、Nullpoが渡される


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

5382日前に更新/246 KB
担当:undef