ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
237:デフォルトの名無しさん
09/03/20 20:30:07
C#3.0勉強中
匿名メソッドのラムダ式の便利さはわかったけど、
ExpressionTreeというのが、どういう場合に使われて便利なのかよくわからない
これは便利だっていうサンプルが乗ってるサイトとかありますか?

238:デフォルトの名無しさん
09/03/20 22:56:48
URLリンク(www.opentk.com)
のExampleの中のWinForms 1 : Simple GL Controlのサンプルを、
ボタンを押したら箱が回るアニメーションが再生/一時停止するようにするには
どうすればいいですか?
箱を描画する処理は作れるんですが、アニメーションを実装する方法が良く分かりません・・
シングルスレッドで処理したいんですが、ApplicationContextクラスを作ったりしなければならない?

239:238
09/03/20 23:13:52
BackGroundWorkerとかデリゲートの非同期呼び出しとか
使わず
while(ウィンドウが閉じられていない間)
{
メッセージ処理

ゲームの描画処理とかSleepとか
}
見たいな事はC#では出来ないんでしょうか

240:デフォルトの名無しさん
09/03/20 23:21:28
マルチスレッドが嫌ならDoEventsでも使えば

241:238
09/03/20 23:31:18
>>240
メッセージ処理をDoEventsでするんですか?
しかしApplication.Run(new Form1());
した後どこから>>239みたいなループに入れば・・?
OnClick()の中にwhile文入れたりとかは駄目ですよね・・?

242:デフォルトの名無しさん
09/03/21 00:11:27
>>237
マニアックな例になるけど、
URLリンク(ufcpp.net)
とか。

あと、C# 4.0のdynamicは内部的に式木使って動的コード生成してる。

いずれにせよ、あんまりエンドユーザー向けの機能ではない。

243:デフォルトの名無しさん
09/03/21 11:12:18
株式の情報とかを取得するのに
皆、Yahooファイナンスから情報を得ているのが多いみたいですが
あれは?ファイナンスのHTMLを取得して
中を読み取り表示しているだけなのかな?

244:デフォルトの名無しさん
09/03/21 11:14:56
YahooのWebAPIではファイナンスの情報提供してないみたいだからそうなんじゃない?

245:デフォルトの名無しさん
09/03/21 11:29:19
Yahooの株式データはurlにクエリ付けて操作できる

246:デフォルトの名無しさん
09/03/21 11:47:11
URLにクエリですか?

247:デフォルトの名無しさん
09/03/21 11:48:41
だけど取得はHTMLだから仕様変更されたら一発でアボーン。
つか金融系でAPIを公開しているところないよなぁ・・・
純金の相場を取得するモジュール作ったけど、仕様がいつ変わるかわからないのが怖い。

248:デフォルトの名無しさん
09/03/21 11:50:23
>>246
クエリ文字列。

URLリンク(stocks.finance.yahoo.co.jp)
なら
code=4686.q

つまりURLの後ろの?以降の文字列。

249:デフォルトの名無しさん
09/03/21 11:55:39
>>248
銘柄のコードでですね。

それでHTMLを取得してから
中を自分で作るしかないのか・・・・・

>>247さんの言う通り
HTMLが変わったら終わりですね。

どうするかなぁ〜( ̄ヘ ̄;)ウーン

250:デフォルトの名無しさん
09/03/21 12:20:33
スクレイピングなんてそんなもん。

正規表現を設定ファイルに出すとかしておいて、
変更時の修正が最低限に済むようにしとけ。

251:デフォルトの名無しさん
09/03/21 12:25:08
携帯から失礼。ふと疑問に思ったのでよろしくお願いします。

オブジェクトを作るとき、+=と=の場合があるんですがどう違うんですか?

252:デフォルトの名無しさん
09/03/21 12:47:17
たぶん、イベントハンドラの関連づけを勘違いしてるんじゃないかな。

253:デフォルトの名無しさん
09/03/21 12:48:45
YAHOOファイナンスは銘柄コード以外に日付もクエリに指定する事が出来て
過去10年分の株価時系列データが意外と簡単に取得出来るな
詳しいやり方は忘れた

254:243
09/03/21 13:04:14
色々な意見ありがとうございます。
ちょっと考えてから作るか作らないか検討します。

255:デフォルトの名無しさん
09/03/21 13:07:14
>>252
たぶんそうです。
+=と=の違いってどうなんですか?

256:デフォルトの名無しさん
09/03/21 13:10:34
調べろよ。

x = x + y;

x = y;

の違い。

257:デフォルトの名無しさん
09/03/21 14:14:23
>>242
おお ありがとう
あと見ておくべきところとしてはこんなところかな?
なんかいろいろあるなぁ

・ASP.NET MVC 1.0
・ASP.NET AJAX
・ASP.NET Dynamic Data
・ADO.NET Entity Framework
・ADO.NET Data Services
・Silverlight 2.0
・Silverlight Controls for ASP.NET
・C#3.0 匿名メソッド
・C#3.0 ラムダ
・C#3.0 初期化子
・C#3.0 匿名型
・C#3.0 暗黙型付け
・C#3.0 拡張メソッド


258:デフォルトの名無しさん
09/03/21 14:28:45
>>256
ハンドラーに+=ってイメージがつかないんです(ノ_・。)

259:デフォルトの名無しさん
09/03/21 14:34:45
継ぎ足していくイメージだな

260:デフォルトの名無しさん
09/03/21 15:05:28
>>258
 delegate void FooHandler(string s);
 void Bar(string s) { Console.WriteLine(s); }
 void Test() {
   FooHandler f = null;
   f += Bar; // ..1
   f = f + Bar; // ..2
   f = (FooHandler) Delegate.Combine(f, new FooHandler(Bar)); // ..3
   f("hello");
 }
1.2.3 は全部同じ意味。


261:デフォルトの名無しさん
09/03/21 15:13:23
でも実際、delegateの場合は+=演算子がオーバーロードされて、
Delegate.Combineメソッドが実行されるってこと?

262:デフォルトの名無しさん
09/03/21 17:29:32
演算子オーバーロードではなく、糖衣構文。
コンパイラが自動的に Delegate.Combine() に変換してくれるのであって、
Delegateクラスで + 演算子が定義されているわけではない。

263:デフォルトの名無しさん
09/03/21 19:32:07
スレリンク(gamedev板:95-番)


264:デフォルトの名無しさん
09/03/21 20:11:21
WEBサイトを画像化するには
どういった方法をとるのが適切ですか?
よければサンプルコードの掲載されてるようなURLもいただけるとありがたいです。

265:デフォルトの名無しさん
09/03/21 21:11:11
throw new System.Exception();

│               _∧∧∧∧∧∧∧∧∧∧_
│               > そ、その動きはトキ! <
│                ̄∨∨∨∨∨∨∨∨∨∨ ̄
│ ≡  ('('('('A` )
│≡ 〜( ( ( ( 〜)
↓ ≡  ノノノノ ノ  サッ

266:デフォルトの名無しさん
09/03/21 22:51:33
>>257
LINQを学べば自動的にC#3.0の追加要素は全部学べるよ。

267:デフォルトの名無しさん
09/03/21 23:22:15
>>266
LINQ TO SQLはキャンセルの方向だからお勧めできないよ

268:デフォルトの名無しさん
09/03/21 23:33:19
>>267
>>257 のリストのどこにもLINQ TO SQLとかいてないな。
ひょっとしてLINQ = LINQ TO SQLとか思ってる人なの?

269:デフォルトの名無しさん
09/03/21 23:39:27
>LINQ TO SQLはキャンセルの方向
そうなのか
知らんかった
理由は何?


270:デフォルトの名無しさん
09/03/21 23:43:32
ひとことでいうと DB 屋さんが作ったものじゃないから。
ある意味 Linq の参考実装だったものがそのまま出てきたような
もの。でもライトでいいんだけどねあれ。実質 SQL Server 限定で
なければ。
DBLinq はどうなってるんだっけか。

271:デフォルトの名無しさん
09/03/21 23:57:35
>>268
EntityにはLINQ TO SQLが内包されてるし、
一言でLINQと説明しているC#関連のサイトのほとんどはLINQ TO SQLだからね

272:デフォルトの名無しさん
09/03/22 00:06:44
EntityにはLINQ TO SQLと同等のExpression<T>を使ったクエリ文は使用しているが内包はしていない。
>一言でLINQと説明しているC#関連のサイトのほとんどはLINQ TO SQLだからね 
これは君の脳内ソース。


273:デフォルトの名無しさん
09/03/22 00:22:14
LINQでLINQ TO SQLを説明してるサイトのほうが少ないと思うんだが、
いったい普段どういうサイトを見てるんだろうか

274:デフォルトの名無しさん
09/03/22 00:29:31
>>272
紛らわしいが、普通に理解して貰えれば、Entity Frameworkのことを差しているのは明白だと思うんだけど。
EntityFrameworkはSP1になって実装されたものだからC#3.0(VS2008)の特徴として紹介されてる
LINQ関連は、ほとんどLINQ TO SQLっていってるわけ。

実際にC#でLINQ TO SQLでないものを紹介していれ例は少ないよ。
脳内ソースというか、普通にググればわかるレベル。

275:デフォルトの名無しさん
09/03/22 00:38:37
つまり、ググると混同してるのやら誤解しているのやらがたくさん出てくると


276:デフォルトの名無しさん
09/03/22 00:42:17
>>274
はいはい(笑)

277:デフォルトの名無しさん
09/03/22 00:44:56
あの論点が見えないのですが
>>266-276 の繋がりがよく分からないあたりから
食い違いがあるのではないでしょうか

278:デフォルトの名無しさん
09/03/22 00:45:53
…Linq to SQL が sqlmetal とかの特定技術であることすら知らない?
Entity Framework の Linq 技術周りに関して言えばそれは
Linq to Entities だ。EDM に対してのクエリである ObjectQuery の
構築で使用している。
Linq to Entities と Linq to SQL は生まれも実装もラインも別。マジで。
つながりでいえば Linq のプロバイダとして実装されているぐらいしか
共通点はない。

279:デフォルトの名無しさん
09/03/22 00:45:59
訂正 >>266-267 でした

280:デフォルトの名無しさん
09/03/22 00:46:05
>>275
>>276
はいどうぞ

>また、VS 2008 SP1&.NET Framework 3.5 SP1では
>「ADO.NET Entity Framework(ADO.NETエンティティ・フレームワーク)」
>(以降、Entity Framework)という新しいデータベース・アクセス・テクノロジが追加されている。

URLリンク(www.atmarkit.co.jp)

281:デフォルトの名無しさん
09/03/22 00:50:35
>>280
だから何?って感じなんだがwww
何の証明にもなってない

282:デフォルトの名無しさん
09/03/22 00:51:16
>>281
>>278は華麗にスルー?

283:デフォルトの名無しさん
09/03/22 00:52:39
>>282
うん
だから何?って感じだし
なんでそんなに必死なのかさえ理解できないし

284:デフォルトの名無しさん
09/03/22 00:54:20
脳内ソース出しちゃう人の話なんか誰も取り合っちゃくれんよ
それが2chです

285:デフォルトの名無しさん
09/03/22 00:55:09
なんか論点がずれてる気がするな。
その記事ではEFとLINQ TO SQLをちゃんと区別してるんだから、
そうなると誰もそれには異論は唱えてないことになると思うのだけど
IDがないとわかんね。

286:デフォルトの名無しさん
09/03/22 00:56:27
だから

>LINQ To EntitiesはEDMのモデル向けの“LINQ To SQL”といってもよいものだが、
>LINQ To SQLにはない機能(例えば、複数のテーブルから1つのエンティティを作成する機能など)が搭載されている。

>EDMに基づくLINQ To Entitiesは、データベースやオブジェクトの変更にも強いなどのメリットがあるため、
>今後はLINQ To Entitiesの方が(LINQ To SQLよりも)より多くの場面で活用されていくのではないだろうかと筆者は予測している

287:デフォルトの名無しさん
09/03/22 01:12:59
linqとして紹介されてたものが実はlinq to sqlのことだとも知らなかったのか。。

288:デフォルトの名無しさん
09/03/22 01:15:53
>>287
君か、引っ掻き回してたのは

289:デフォルトの名無しさん
09/03/22 01:19:00
何を?
勘違いしてた人はいるみたいだけどね

290:デフォルトの名無しさん
09/03/22 01:19:46
Linq だけならふつーは Linq to Objects を指すんじゃない。


291:デフォルトの名無しさん
09/03/22 01:25:58
じゃあ事実関係から

1 Linq To SQLはLinq To Entityとは別物 ここまではok?
URLリンク(www.atmarkit.co.jp)

2 VS2008と.NET3.5は同じ時期にリリースされた ここまではok?
URLリンク(itpro.nikkeibp.co.jp)

3 Linq To SQLは.3.5に搭載されている ここまではok?
URLリンク(d.hatena.ne.jp)

4 Linq To Entity(Entity Framework)は3.5 SP1で搭載された ここまではok?
URLリンク(d.hatena.ne.jp)

従って3の時点でリリースされていないLinq To Entity(Entity Framework)を
C#の特徴として紹介できない(将来の機能の紹介は別)。 ここまではok?


292:デフォルトの名無しさん
09/03/22 01:31:57
>>290
同感

だが、メソッドのネーミングがSQL由来なので
使った事が無い人はSQLの利用がメインだと思うかもね

293:デフォルトの名無しさん
09/03/22 01:34:27
>>291
SP1は既にリリースされてるわけで将来の機能というわけではないよ。
ただ、議論をする上で扱いは決めておく必要はある。
というわけで含まない前提でどうぞ。

294:デフォルトの名無しさん
09/03/22 01:40:49
>>293
普通に解釈すれば、3時点から見た「将来」と読めるから、
その突っ込みはズレてると思うぞ?

295:デフォルトの名無しさん
09/03/22 01:43:48
3の時点でリリースされていないLinq To Entity
3の時点で紹介できない
どちらが普通かは難しいけが後者で了解

296:デフォルトの名無しさん
09/03/22 01:48:39
それ前提ならC#とLINQの解説は、SP1公開以前のものがほとんどだから
少なくともLinqToEntitiesを解説したものは圧倒的に少ないな
どっちにしろSQLのほうはなくなるらしいから学ぶならEntitiesのほうだろ

297:デフォルトの名無しさん
09/03/22 02:37:11
学ぶならまずはLINQ to Objectsですよ。
第一、Linqの説明で一番多いのはLINQ to Objectsだし。
SQL系に隠れてスルーされ気味ですが、非常に有益な技術です。

298:デフォルトの名無しさん
09/03/22 03:49:08
LINQ to XML使ってる俺はどうなんの

299:デフォルトの名無しさん
09/03/22 10:18:18
LINQといえばまず第一にLINQ to Objectsだろ
ないと絶対に困るレベルのプログラムの基本部品だ

LINQ to SQLとかEntityなんてのはそれを応用して作った
ただのORマッパーだろ
LINQという技術の射程の長さは表れてるけど
それがLINQの代表というわけじゃない

300:デフォルトの名無しさん
09/03/22 10:27:11
>>298
まあ、XML操作が必要な作業してるんなら、
LINQ to XMLはかなり使いやすいXMLライブラリだと思う。

>>299
応用というか、同じ書式で書けるってのがポイントか。


301:sage
09/03/22 10:59:30
OS  :WindowsXP
開発環境:VisualStudio2008 Pro
開発言語:C# 3.0

AccessデータベースをOLEで接続し、
データバインドしたDataGridViewでデータを表形式で表示しつつ、
DataGridViewの右横にデータバインドしたテキストボックスを配置し、
DataGridViewでデータを選択し、それをテキストボックスで
データ更新が出来る名簿ソフトを作成しています。

それに、DataViewのRowFilterでDataGridViewでのデータの絞込みが出来る
用に機能追加し、またデータバインドのソースをDataViewにして、絞込みした
状態でデータ更新ができるようにしようとしました。

しかし、
RowFilterでフィルタをかけている状態で、下記のコマンドをボタンで更新処理を
実行しようとすると、DataGridのフォーカスを手動で変更をしないとデータベースが
更新されないのです。

フォーカスを移動しなくても更新されるようにEndCurrentEdit
メソッドを事前にかけているのですが、何かコマンドが足りないのでしょうか?
恐れ入りますが、ご教示いただけないでしょうか?

以下コマンド-----------------
int iRow; //更新したレコード数
this.BindingContext[dbCustomer1, "M_Customer"].EndCurrentEdit();
iRow = oleDbDataAdapter1.Update(dbCustomer1, "M_Customer");
MessageBox.Show("更新 " + iRow + "件");
-----------------------------

302:デフォルトの名無しさん
09/03/22 11:06:11
C#にはデフォルト引数がなく、同様の機能はオーバーロードを使って表現するみたいですが、
これって冗長じゃないですか?いくつも同じ名前のメソッドが増えてなんだか回りくどいような気がします。
Pythonだとデフォルト引数、名前付き引数がサポートされてるので、
それに慣れていたせいもあってかいまいち理解できません。
オーバーロードの方が優れている点ってあるのでしょうか?
それとも、そもそもデフォルト引数を使うような事自体が珍しいんでしょうか。

303:デフォルトの名無しさん
09/03/22 11:17:12
デフォルト引数をまとめたクラスを一個作ればいいだけだからねえ

304:デフォルトの名無しさん
09/03/22 11:58:12
>>302
4.0からデフォルト引数と名前付き引数に対応するよ

305:デフォルトの名無しさん
09/03/22 13:59:30
相談室スレから誘導されてきました。いまさらだけどあっちのソースだいぶまちがってる・・・。

今ラジアンで角度を処理するクラスを作っているのですが、次のような動作をさせたいんです
1.値を代入したときは値を正規化してからいれる(負値だったら正値に、2π以上だったら2πで剰余算)
2.値を参照するときはそのまま参照
3.floatと同じように扱える
プロパティを使って実装すると次のようになりますが
  class RegularizedAngle
  {
    private float InAngle;
    public float Angle
    {
      get { return Angle; }
      set
       {
         //Angleが負値だったら正値に
         if (value < 0) Angle = (float)(Math.PI * 2f) + Angle;
         //valueが2π以上だったら2πで剰余算
         Angle = value % (float)(Math.PI * 2f);
       }
    }
  }
これを普通のfloatと同じように扱いたいんです。たとえば・・・

RegularizedAngle Ang = (float)(Math.PI * 2f);   //すなわち6.28・・・の代入
Ang += 1;                         //代入したとき内部で正規化がおこなわれて1になる。
Ang += Ang;                       //これで2になる?

こんなかんじで見た目を組み込み型みたいにしたいんです。
しかし上記のプロパティをつかった方法だとアクセスするときに
Ang.Angle としなければなりませんし、宣言するときにはnewが必要です
組み込み型を継承したクラスを作ればよいのでしょうか・・・?

306:デフォルトの名無しさん
09/03/22 14:04:08
URLリンク(msdn.microsoft.com)

現在↑のページの
1.3 Visual C# による実践コンポーネント指向プログラミング
簡易ドローツールを作成しているところなのですが
手順通りに作成しても、ソースをコピーしても

 Windows Form Designer generated code

の部分でエラーを吐いてうまく作成ができません
これを解決する為のお知恵をお貸しいただけないでしょうか
お願いいたします。

307:デフォルトの名無しさん
09/03/22 14:08:45
>>306
//Windows Form Designer generated code
とコメントアウトすればいいのかな?


308:デフォルトの名無しさん
09/03/22 14:18:32
>>307
いえ、そうしてもエラーが増えるばかりで、そうしていいやら・・

309:デフォルトの名無しさん
09/03/22 14:25:03
>>308
VS2002/2003の頃の記事だから、percial class じゃないんだな。

そこはおそらく、これだ。画面は自分で準備しろということじゃないかな。
#region Windows Form Designer generated code
・・・・
#end region

をIDE上で閉じてるイメージ。

310:デフォルトの名無しさん
09/03/22 14:29:20
>>305
演算子オーバーロードしまくれば大体望みの動作になると思うよ
でも普通にプロパティアクセスする方が分かりやすいよ

311:デフォルトの名無しさん
09/03/22 14:29:43
>>306
それは手順通りではないでしょ。
追加するのは、イベントハンドラの部分。

312:デフォルトの名無しさん
09/03/22 14:30:13
>>302
デフォルト引数の値を変更したとき、
利用者側の再コンパイルが必要って言うデメリットもあるから今まで対応してこなかった。
さすがに開発者からの要望に折れて、4.0で実装。


313:デフォルトの名無しさん
09/03/22 14:32:21
>>309
レスありがとうございます
「pertial識別子が型hにありません。この型に別のpartial宣言が(ry」
までたどり着けました

314:デフォルトの名無しさん
09/03/22 14:33:15
.>>310
あんまり賢い方法ではないってことですね・・・。
プロパティで実装してみます。ありがとうございました。

315:デフォルトの名無しさん
09/03/22 14:35:48
>>313
駄目だこりゃ。
どうしてもこの教材である必要がなければ、他のあたって。

316:デフォルトの名無しさん
09/03/22 14:38:41
>>315
私が根本的に勘違いしているみたいですね・・・
すみませんとりあえず他のをあたります

317:315
09/03/22 14:42:35
うん
Form1.Designer.csの内容をこのサンプルから省いて、
Form1.csに追加が必要なメンバ変数とイベントハンドラの記述をすれば
動くので、原理的に難しい話では全くないんだけど、
それができる人は、そもそもこのチュートリアルをやる必要がありません。

318:デフォルトの名無しさん
09/03/22 14:45:51
>>305
普通に演算子オーバーロードすれば良いと思う。
newでインスタンス作りたくなければ、構造体にすればいい。
けど、フィールドの初期化しなきゃいけないので、宣言だけはnewで我慢かなぁ

319:デフォルトの名無しさん
09/03/22 14:50:26
>>314
floatと完全互換ならこの程度で済みそうだけど、複雑になるとoverloadの山になるな。
struct RegularizedAngle {
 float inAngle;
 public RegularizedAngle(float f) { inAngle = f; }
 public float Angle { 
   get { return inAngle; } 
   set { inAngle = value; } // いろいろ省略
 }
 public static implicit operator RegularizedAngle(float f) {
     return new RegularizedAngle(f); 
 }
 public static implicit operator RegularizedAngle(double f) {
     return (RegularizedAngle) (float) f;
 }
 public static implicit operator float(RegularizedAngle ra) {
     return ra.Angle;
 }
 public override string ToString() { return Angle.ToString(); }
}
--
static void Main() {
    RegularizedAngle x1 = 12.3;
    RegularizedAngle x2 = 10;
    float f = x1 * 3;
    RegularizedAngle x3 = x1 * x2;


320:デフォルトの名無しさん
09/03/22 15:01:40
>>319
ちびっと訂正
>public RegularizedAngle(float f) { inAngle = f; } 
public RegularizedAngle(float f) { inAngle = 0; Angle = f; }


321:デフォルトの名無しさん
09/03/22 15:46:43
なんかlinqを使うより、IEnumerable<>のSelect<>メソッドやWhere<>メソッドを使ったほうが
わかりやすい気がするのはなぜですか?
linqtがfromから始まるのが気持ち悪いからですか?

322:デフォルトの名無しさん
09/03/22 15:46:54
>>319-320
ありがとうございます。参考になります。
しかし完全に理解するのは難しそうですね・・・。
それの上にさらに正規化処理を入れなければならないのですよね・・・。

323:デフォルトの名無しさん
09/03/22 16:01:10
>>321
クエリ式が分かりにくいと感じるなら拡張メソッドでLINQやればいい
fromからなのはインテリセンス効かせるため

324:デフォルトの名無しさん
09/03/22 16:02:59
>>321
それもLINQ

325:デフォルトの名無しさん
09/03/22 16:08:46
クエリ式なんかただのSQLっぽく見せるためのプリプロセッサなんだから
SQL大好き人間以外は使う必要の無いものだよ
SQL大好き人間でも最終的には拡張メソッドに適応すべきだろう

326:デフォルトの名無しさん
09/03/22 16:30:24
LINQってなんて読むの?ラインクエリ?

327:デフォルトの名無しさん
09/03/22 16:37:16
なるほど、そんなもんなんだ
機能としては、ADO.NETのDataTable.Select();が、より簡単に使えるようになりました的な感じなのね
メモリ上にデータをもって検索するとか、xmlから検索するとかに便利そうね

つか配列を検索しやすくしましたって感じ?
データベースから引っ張ってくるのは結果セットだけ取得して、
それを単に表示させるだけのほうが再計算入るよりパフォーマンスがよさそうなんだがそのあたりはどうなんだろう

328:デフォルトの名無しさん
09/03/22 16:44:47
LINQをSQLに使えばSQL文が生成され
データベースに問い合わせされ結果セットだけが取得されるんだよ

329:デフォルトの名無しさん
09/03/22 16:59:20
>>325
letとか多重from使おうとするとメソッド形式ではちと厳しい。

>>326
リンク。
linkと同じ音で読めってさ。



330:デフォルトの名無しさん
09/03/22 17:05:29
へー、その場で動的にクエリを生成してくれるのね
難しい処理はストアドに記述してしまうし、
ある程度の決まった処理ならxsdファイルのDataSetに記述したほうが楽そうだけど、
DataSetでは、where文を動的に生成することができなかったから、
それが簡単に記述できるようになるのなら確かに便利かもしれん

331:デフォルトの名無しさん
09/03/22 17:28:33
ボタンを押したらtextBoxのフォントサイズを
変えようとしてるのですが

iの中にはint で18 が入ってる

textBox1.Font.Size = i.ToString();

でどうもうまくいきません、どう記述したらよいでしょうか?

332:デフォルトの名無しさん
09/03/22 17:32:38
ReadOnleyプロパティだからそれ。

333:デフォルトの名無しさん
09/03/22 17:34:19
やどりぎ+どくどく

334:デフォルトの名無しさん
09/03/22 17:35:31
>>333
すいません、ありがとうございます、リッチテクストでも同じでしょうか?

335:デフォルトの名無しさん
09/03/22 19:39:34
EnterpriseLibrary4.1の使い方が全く分かりません・・・
ダウンロードしてインストールして・・・
そこからどうすればいいのか・・・

336:デフォルトの名無しさん
09/03/22 20:42:35
文字列から数字取り出すのってどうやったら良いですか?1 2でなく12 3 434とかで 

337:デフォルトの名無しさん
09/03/22 20:51:11
>>336
new Regex(@"\d+").Match(str);


338:デフォルトの名無しさん
09/03/22 20:53:46
ありがとうございますた

339:デフォルトの名無しさん
09/03/22 22:01:47
linq試してみました
簡単にsqlが取得できるのはすごいね
ただアドホッククエリは今までと同じようにEntitySQLとか使って取得するのね
結局は型無しになってしまうし・・・

簡単にクエリ書けるのはいいけど、ソースコードの中でばんばん書けてしまうと、
mvcモデルの原則に反するんじゃないのかな?
普通に使用するなら型付きDataSetのほうが楽でわかりやすい気がするんだけど、
そうなるとLinqToEntitiesを導入する最大の利点ってなんなんだろう・・・
DBデータの取得、更新を行う再利用可能なクラス(Model)が作りやすいってことなのかな?

340:デフォルトの名無しさん
09/03/22 22:23:24
モデルの中にかけばいいんじゃねーの?

341:デフォルトの名無しさん
09/03/22 23:26:37
>>339
ビジネスロジック層とデータ層の間を繋ぐもの的な位置づけ。

342:デフォルトの名無しさん
09/03/23 01:08:46
C++/CLI から来ました。方向性が間違ってたらすみません。
>>305
class RegularizedAngle {
  private float InAngle;

  public float Angle {
    get {
      return this.InAngle;
    }
    set {
      if (value <= 0.0) // valueが負値だったら正値にする正規化
        this.InAngle = value + (int)(value / (Math.PI*2.0f) + 1.0) * Math.PI*2.0f;
      else // valueが正値だったら2πで剰余算する正規化
        this.InAngle = value - (int)(value / (Math.PI*2.0f)) * Math.PI*2.0f;
    }
  }
}

343:305
09/03/23 02:13:02
>>342 ありがとうございます。処理を見直した結果-3.14〜+3.14までを格納するように改めました。
  //角度を格納するが強制的に正規化される型
  //doubleとしてアクセスできる
  public class RegularizedAngle
  {
    private double InAngle;
    public RegularizedAngle()
    {
      InAngle = 0;
    }
    public RegularizedAngle(double i)
    {
      InAngle = 0;
      Angle = i;
    }
    public double Degree
    {
      get { return StgUtil.RadToDeg(InAngle); }
      set { Angle = StgUtil.DegToRad(value); }
    }
    private double Angle
    {
      get { return InAngle; }
      set
      {
        //6.28以上だったら6.28で剰余算
        if (value > StgUtil.PIx2) value %= StgUtil.PIx2;
        InAngle = value;
      }
    }

344:デフォルトの名無しさん
09/03/23 02:16:15
    //lはrより左方向
    public static bool operator >(double l, RegularizedAngle r)
    { return AngCheck(l, r.Angle); }
    public static bool operator >(RegularizedAngle l, double r)
    { return AngCheck(l.Angle, r); }
    public static bool operator >(RegularizedAngle l, RegularizedAngle r)
    { return AngCheck(l.Angle, r.Angle); }
    //lはrより右方向
    public static bool operator <(double l, RegularizedAngle r)
    { return !AngCheck(l, r.Angle); }
    public static bool operator <(RegularizedAngle l, double r)
    { return !AngCheck(l.Angle, r); }
    public static bool operator <(RegularizedAngle l, RegularizedAngle r)
    { return !AngCheck(l.Angle, r.Angle); }
    //lから右回りと左回り、どっちがrへの移動量がすくない?
    private static bool AngCheck(double l, double r)
    { return (l + r >= 0); }    //ここの処理をなんて書いていいのかわかりません。。。

    //doubleを代入された場合
    public static implicit operator RegularizedAngle(double f)
    { return new RegularizedAngle(f); }
    //doubleを代入された場合
    //doubleとして参照された場合
    //演算子の動作もdoubleに準拠
    public static implicit operator double(RegularizedAngle l)
    { return l.InAngle; }

    public override string ToString()
    { return Angle.ToString(); }
  }
ぐぐってみるとY座標から右回り左回りを算出するという手段がありました。おそらく0度が真右になるからできるんだと思いますが、
このクラスは角度だけを扱いたいので角度(ラジアン)だけから算出したいのです。何か良い方法があったらどうかお教えください。

345:デフォルトの名無しさん
09/03/23 11:08:45
C#はじめて2Weekの新参者ですが教えてください
サーバーエクスプローラからTBを選択してForm上にDRAG&DROPすると
oleDbDataAdapter1が作成されるのですが、同じmdbの別TBを
DRAG&DROPすると別のoleDbDataAdapter2が作られるのですが、
二つのoleDbDataAdapterを作成しなければいけないのでしょうか?
oleDbDataAdapter1だけにはできないんでしょうか?
C#2003です、よろしくお願いします

346:デフォルトの名無しさん
09/03/23 11:33:11
嫌です

347:デフォルトの名無しさん
09/03/23 12:42:50
同意

348:デフォルトの名無しさん
09/03/23 17:56:52
御意

349:デフォルトの名無しさん
09/03/23 18:22:15
ザムディン

350:デフォルトの名無しさん
09/03/23 19:36:18
質問です。
System.Windows.Forms.Formクラスの
FormBorderStyleプロパティをNoneにし、
WindowStateをMaximizedにすると
タスクバーがフォームに隠れてしまうのは仕様ですか?
またFormBorderStyleをNoneにしたまま
これを回避する方法はどなたかご存知ですか?

351:デフォルトの名無しさん
09/03/23 20:39:37
仕様じゃないですかね
とりあえずスクリーンのWorkingAreaを
MaximizedBoundsに設定したらいいんじゃない?


352:デフォルトの名無しさん
09/03/23 20:56:08
System.Windows.Forms.Screen
から作業領域取得して設定

353:350
09/03/23 21:37:29
this.MaximizedBounds = Screen.GetWorkingArea(this);
で修正できました。
ありがとうございます。

354:デフォルトの名無しさん
09/03/24 16:25:49
a += b * c;
はb*cの結果とaを足してくれるんですか?

355:デフォルトの名無しさん
09/03/24 16:31:41
それくらい試せよ

356:デフォルトの名無しさん
09/03/24 16:32:23
>>354
試してみればいい。

357:デフォルトの名無しさん
09/03/24 17:46:10
なるほど
ありがとうございました

358:デフォルトの名無しさん
09/03/24 17:57:07
a += b * c;

a = a + (b * c);
だけど
a += b + c;

a = (a + b) + c;
足し算だから結果は変わらない
これは試してわかるようなレベルじゃない


359:デフォルトの名無しさん
09/03/24 18:02:19
結合法則考えればすぐ分かるだろ

360:デフォルトの名無しさん
09/03/24 18:05:05
a * = b + c
は?

361:デフォルトの名無しさん
09/03/24 18:07:48
a = a * (b + c)

362:デフォルトの名無しさん
09/03/24 18:10:05
演算子の優先順位なんて基礎だろ基礎
MSDNで「C# の演算子」調べろよ

363:デフォルトの名無しさん
09/03/24 18:16:51
うそばっかりだなこの擦れ

364:デフォルトの名無しさん
09/03/24 18:25:10
if(!>>1-362)
{
Console.WriteLine(>>363);
}


365:デフォルトの名無しさん
09/03/24 18:30:23
>>358
こいつ馬鹿
a = a + ( b + c )
だろ

366:デフォルトの名無しさん
09/03/24 19:20:46
演算子の優先順位が"人から見て"不明瞭な式っていうのは、
括弧で明示するのが基本だと思う。

&&が||より優先されるために条件式を
条件1 || 条件2 || 条件3
みたいに書く(条件1,2,3は各々&&で条件を連結している)とか、
優先順位が関係する定型的な書き方は知っておくべきだけど。

367:デフォルトの名無しさん
09/03/24 19:24:14
int a = 10;
a += 10 >> 1; // a == 15
a = a + 10 >> 1; // a == 10

つまり a += x op y; は a = a + (x op y);

勝手に問題をすりかえて話をこじらせた挙句、
数行のコードを試せばわかることを「試してもわからない」という
文面とともに間違いを教える>>358が謎過ぎる。

368:デフォルトの名無しさん
09/03/24 19:24:56
見やすくなるけどスピード負担はやや増えるのかな?

369:デフォルトの名無しさん
09/03/24 19:37:31
なんのすぴーどだよ

370:デフォルトの名無しさん
09/03/24 19:43:53
島袋の負担は増える
上原の負担は減るんじゃなかろうか

371:デフォルトの名無しさん
09/03/24 19:59:18
解散しちまえ

372:デフォルトの名無しさん
09/03/24 20:00:25
プログラマなら上原多香子好きだろ?
はしのえみのほうがいい?

373:デフォルトの名無しさん
09/03/24 20:48:53
http://azumaya.s101.xrea.com/wiki/index.php?%B3%D0%BD%F1%2FC%A2%F4%2FC%A2%F4%A4%C7%A5%DB%A5%C3%A5%C8%A5%AD%A1%BC%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%F2%BA%EE%A4%EB

↑にある↓の意味はどういうことですか?

if((k & WinApi.HOTKEYF_ALT) != 0)
    ret |= Keys.Alt;
if((k & WinApi.HOTKEYF_CONTROL) != 0)
    ret |= Keys.Control;
if((k & WinApi.HOTKEYF_SHIFT) != 0)
    ret |= Keys.Shift;
return ret;


374:デフォルトの名無しさん
09/03/24 20:54:44
ビット演算だな
AltとControlとShiftのビットを立てている

375:デフォルトの名無しさん
09/03/24 21:13:02
>>373
ビット演算でググれ。

376:デフォルトの名無しさん
09/03/24 21:30:33
>>373
フラグの使い方の悪い見本だな


377:デフォルトの名無しさん
09/03/24 21:57:06
そうか?

378:デフォルトの名無しさん
09/03/24 22:01:38
!= 0 ←これが気に食わないんでしょたぶん

379:デフォルトの名無しさん
09/03/24 22:07:45
>>376
そういう風におっしゃるのなら、
>>376さんは>>373のような処理が必要なときはどんなコードにしているのでしょうか?
興味があるのでご教授ください

380:デフォルトの名無しさん
09/03/24 22:19:50
理由書かない奴は気にするな

381:デフォルトの名無しさん
09/03/24 22:20:58
理由分からない奴は気にするな

382:デフォルトの名無しさん
09/03/24 22:27:52
>>379
どうせくだらない理由だから気にスンナ

383:デフォルトの名無しさん
09/03/24 22:43:03
なるほど
ありがとうございました

384:デフォルトの名無しさん
09/03/24 22:45:05
入れ替える必要はなさそうだけどな。

385:デフォルトの名無しさん
09/03/24 23:02:26
!= 0 以外の良い書き方ってあるんですか?

386:デフォルトの名無しさん
09/03/24 23:03:38
[flags]enumの比較は
if((f & Flag.Hoge) == Flag.Hoge)
と行うという例がMSの[flags]関連のどっかに書いてあった。

387:デフォルトの名無しさん
09/03/24 23:09:23
>>385
!(1 = 0)

388:デフォルトの名無しさん
09/03/24 23:10:51
なるほど
ありがとうございました

389:デフォルトの名無しさん
09/03/24 23:10:52
アホは無理にレスしなくていいよ

390:デフォルトの名無しさん
09/03/24 23:34:19
質問です
フォームを最大化してノーマルに戻して、
フォームのLocationをドラッグで移動したときに
フォームのあった矩形領域がデスクトップの左上からの画像になって
再描画されないんだけど
(ゴミ箱のアイコンが左上にあったとしたら、
フォームのあった位置の左上がゴミ箱の画像。背景もしかり)
考えられる原因って誰か知ってます?
また強制的にFormの裏側をリフレッシュする方法ってありますか?



391:デフォルトの名無しさん
09/03/24 23:36:56
OnPaintみたいなのをoverrideしてるくせに描画してないんじゃないの

392:デフォルトの名無しさん
09/03/24 23:38:45
他のメーカーのグラボが乗ってるPCでチェクしてからだな

393:デフォルトの名無しさん
09/03/24 23:49:28
>>373は×、>>386は○になる具体例を提示しろ
できないなら>>376=糞

394:デフォルトの名無しさん
09/03/24 23:49:56
とても基本的なことで恐縮ですが質問させてください。
このように呼び出し元のクラスを参照し、値を書き換えるクラスを作りました。
class Target
{
  private int member;
  Process pro = new Process(10,2)
  public void Do()
  {
    pro.OverwriteTargetMember(this)
  }
}
//目標値tgtまでvolずつ加算する
class Process
{
  int tgt,vol;
  public Process(int tgt,int vol)
  {
    this.tgt = tgt;
    this.vol = vol;
  }
  public void OverwriteTargetMember(Target tgt)
  {
    if(tgt.member != tgt) tgt.member+= vol;
  }
}
target.do()するたびにtargetのmember2 4 6 8 10 10 10・・・となる処理です。
本当はProcessをキューに入れて数値の変動を予約できるようにしています。
ですが、このような実装はあまりオブジェクト志向の設計思想に則していない様に感じられます。
このスレッドのみなさんでしたらどのような実装を行いますか?
どうかお聞かせください。

395:デフォルトの名無しさん
09/03/24 23:53:36
なんでそんな変な名前つけてるの?

396:デフォルトの名無しさん
09/03/24 23:56:18
アホは無理にレスしなくていいよ

397:デフォルトの名無しさん
09/03/24 23:56:54
名前に意味はありません。
Target=メンバーを書き換えたいクラス
Process=引数に渡されたTargetのメンバーを書き換えるクラスです。

要約するとTargetがDo()するたびに数値を変動させたいのですが、
その動作をキューに入れて管理したいのです。

たとえば
0から1ずつ加算して10になるというパラメータをもったProcessクラスと
10から2ずつ加算して20になるというパラメータをもったProcessクラスを順にキューに入れると、
Target.Do()の結果が実行するごとに
1 2 3 4 5 6 7 8 9 10 12 14 16 18 20 20 20 20・・・
となるようにしたいのです。

398:デフォルトの名無しさん
09/03/25 00:23:07
     ⌒ ⌒               ____
   (     )          ゝ/     __ヽ
      | | |              /        | h
   , ─ 、 __          i >>376  |-||
 /         ヽ     /   ヽ      (|| | /^ヽ
/       /)ノ)ノ   //   \∧/   ノ /ヽノ
| >>393 ///⌒ヽ   /   , ─/ ̄ ̄`─ ´ / ______/
ヽ     /)─|  ミ|      /  /     ,-─ ′ ───/
∠   (| |.  ヽ__ノ>     ( ̄ノ/     /    −、        /
∠_ / ` /^\__ >      ̄ |── |─┬┘ |──/
  ノ    (__          ヽ___ノ─┴ 、__ノ ̄ ̄/
 / ̄ ̄\┌─ ′ /^−、    -、_/  /_____ /
/ ̄ ̄ ̄⌒ヽ   (   丿  /   |  /───/
        \  / ̄/   (__ノ ̄ ̄  //  /
          \/  /         //  /

399:デフォルトの名無しさん
09/03/25 00:25:19
Queue<int>にint詰めて順に足せばいいじゃん

Processにtgt(目標値)を渡す意味も、そもそもProcessをクラス化する意味も
読み取れない
パラメタをvolだけでなく複数にするなら構造体で十分

400:デフォルトの名無しさん
09/03/25 00:31:40
>>399
申し訳ありません。情報が足りませんでした。
私の作った処理でjはキューした時点では値は確定していません。
キューが実行された瞬間にさらに処理をして値を設定するようにしたいのです・・・。

401:デフォルトの名無しさん
09/03/25 00:37:42
このように呼び出し元のクラスを参照し、値を書き換えるクラス
なら引数にrefを付ける

でも、俺なら3つクラス作って別のクラスでpublic void Do()を実装する

402:デフォルトの名無しさん
09/03/25 00:38:17
IEnumerable<int> Process()
{
for(int i = 0; i < 10; i++)
{
 yield return i;
}
for(int i = 10; i < 20; i += 2)
{
 yield return i;
}
while(true)
{
 yield return 20;
}
}

これが一番シンプルだと思うけど
可変の部分があるならその部分を引数にすればいい

403:デフォルトの名無しさん
09/03/25 00:51:08
>>401
C#でクラスを引数に設定した場合は参照渡しだったと記憶していますが、
あえて明示的にrefをつけるというのはどのような意図を以て行うのでしょうか?

また、3つクラスを作ると仰られましたが、どのように分割するのでしょうか?
Processにあたるクラスは、いろいろな種類を作ろうと考えています。
今回挙げた単純な加算だけではなく、四則、べき乗、などなど・・・。角度を扱う可能性もあります。
もしよろしければご教示お願いいたします。

>>402
かなり私の求めている正解に近いものかもしれません。
頭の中にあった蟠りが一つ解けて、理解が深まりました。
IEnumberableを使うということは考えてもいませんでした。
お答えくださり本当にありがとうございます。

404:デフォルトの名無しさん
09/03/25 00:54:45
(?_?)

405:デフォルトの名無しさん
09/03/25 01:09:07
>>403
オブジェクトを渡すときは参照の値渡し
違いはググれ

> 今回挙げた単純な加算だけではなく、四則、べき乗、などなど・・・。角度を扱う可能性もあります。
どこまで裾野を広げたいのか分らないが,四則"計算",べき乗"計算"と計算という概念で分類すればいいんでないか?
あと,角度を"扱う"っていうのが,どういう意味をさしているのか具体的に言わないと扱えないぞい

406:デフォルトの名無しさん
09/03/25 01:18:45
>>405
角度でラジアンを持ちますが、ラジアンでπ2以上または-π2以下になった場合に丸められます。オーバーフロー防止です。
ですが、よくよく考えてみれば>>402さんの処理でreturnするときにreturn i % (Math.PI * 2);などと記述すればよいのかもしれませんね。

このような稚拙な質問に丁寧にお答えくださり本当にありがとうございました。

407:デフォルトの名無しさん
09/03/25 03:44:54
「オブジェクト志向の設計思想」云々言ってて解が>>402・・・いみふ

408:デフォルトの名無しさん
09/03/25 04:57:21
もう終わった話題のようだが、
stateパターンのようなことをやりたかったんだろうか?

409:デフォルトの名無しさん
09/03/25 07:08:14
>>393(>>373>>386>>376)
勘違いするやつが現れないように代わりに答えておこうか。

まず先に一言、[Flags] enum に限れば「(e & MyEnum.Foo) != 0」は基本 NG だが
元の例はそもそも [Flags] enum じゃないから関係ない。
で、enum の話しに戻すと、

[Flags]
enum MyEnum { A = 0x1, B = 0x2, AB = A | B }

var e = MyEnum.A;
if((e & MyEnum.AB) != 0) {
  Console.WriteLine("I'm AB.");
  if((e & MyEnum.AB) != MyEnum.AB) Console.WriteLine("Really?")
}

例え Flags が付いていたとしても、全ての定数が排他とは限らない。
結合定数を定義することは十分有り得るし、Keys のような特殊な例もある。
「... != 0」と書けるのは、事前に列挙定数の具体値に関する知識を持っていて、
大丈夫であることが分かっている場合のみ。


410:デフォルトの名無しさん
09/03/25 07:36:31
>>407
私の書いたソースではあれがネストしていたんです。
呼び出し元の呼び出し元の呼び出し元の・・・という形で参照しているので、
可読性が大変悪く、動作の高速性よりソースの可読性や整備性を重視したオブジェクト指向の設計思想に反していると感じたのです。

411:デフォルトの名無しさん
09/03/25 09:27:24
オブジェクト指向なんてのは
それに従ってさえいればいいコードが書けるというような
万能の方法論では全く無いからな

412:デフォルトの名無しさん
09/03/25 10:53:22
Formの状態についてお願いします。
状態     通常     最大化
サイズ    (800,600)  (1280,1024)

Formが通常→最大化され、閉じられた場合に
最大化される前のサイズをapp.configにひとつの設定要素として保存させたいのですが、
最大化された後のサイズが保存され、うまくいかないです・・・
Form1_Resizeのイベントでは無理でしょうか?

413:デフォルトの名無しさん
09/03/25 10:57:32
RestoreBoundsで通常時のサイズを取得できるが。

414:デフォルトの名無しさん
09/03/25 10:59:37
>>413
瞬殺されました
どうもありがとです

415:デフォルトの名無しさん
09/03/25 23:05:24
異なるスレッドで作成されたControlをAddすることは可能でしょうか。
別スレッドのContextに設定されたフォームが閉じられた時、そこに使用されていたControlを再利用したいのですが。

416:デフォルトの名無しさん
09/03/26 10:23:18
意味の分からない質問かもしれませんが、
System.Console.ReadLine()
を使うと、実行が止まりますよね。
これは何の効果で止まってるんですか?
ReadLineの中で何らかのループが回ってるんでしょうか
それともsleepみたいなコトになってるんでしょうか

独学でずっとやってきて体系的に学んでいないので思い出したように気になりました
良く意味が分からないかもしれませんがよろしければエスパーしてください。


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

5257日前に更新/200 KB
担当:undef