07/12/01 00:00:29
意見の割れそうなネタですが、皆様 using ステートメントをどの程度
使用していらっしゃるのでしょうか。
自分は今まで、ルート名前空間を汚したくない、或いは名前空間の
構造を崩したくないといった理由で using ステートメントを一切
使わず、愚直にも省略せず全部記述していたのですが、横に長く
なりすぎていよいよ疲れてきて、それに追い打ちをかけるように、
拡張メソッド (C# 3.0 言語仕様) を使うにはそのメソッドの属する
クラスの属する名前空間をインポートしてらねばならないという
ことを知って悩んでおります。
それなりに多様な名前空間を使用していますが、あまり多くインポートしても
逆に読みづらくなりそうに感じます。使用する名前空間それぞれどういった
基準でインポートするか否かを決めるか等、皆様どうか私に何らかの指針を
示して頂けませんでしょうか。
436:デフォルトの名無しさん
07/12/01 00:02:27
全部インポートしてる。
型名重複するのなんてTimerぐらいだろ。
437:435
07/12/01 00:02:39
>>435 の 9 行目:
誤: してらねば
正: せねば
失礼いたしました。
438:デフォルトの名無しさん
07/12/01 00:10:26
基本的に全部インポートする
クラス名が重複する場合は完全修飾名で書く
439:デフォルトの名無しさん
07/12/01 00:16:27
>>435
文脈からしてひどく実直そうな人物と見るが、
努めてソフトにいうと、usingは普通衝突が発生しない限り使う。衝突しても、名前空間の張り替えをして使う。
よって、あなたがしてるようなコーディングはひどく非効率で例外的だ。今すぐusingステートメントを使うことをおすすめする。
それと、なんとなくIDEなどのコーディング補助を一切使ってない雰囲気があるのだが、
この際にそれらの機能を使ってみたらどうだろうか?
VisualStudio2005を使ってるなら、クラス名を書けば左下になにかでるはず。そこをクリックするか、Ctrl+Alt+F10を押して、
メニューから任意の名前空間を選べば、自動的にusingを書いてくれる。
440:デフォルトの名無しさん
07/12/01 00:21:23
usingはクラス名を省略したいから書き込むんだよ。
つまり、一回しか宣言しないクラスは完全修飾名で記述してもいいが、
例えば、ファイルアクセスクラスでSystem.IOを何回も呼び出す可能性が
多い名前空間はあらかじめ宣言しておいた方が効率が良い。
この効率が一番重要なのがRAD。
441:デフォルトの名無しさん
07/12/01 00:22:07
>>439 ( ・∀・)つ〃∩ ヘェーヘェーヘェー
442:デフォルトの名無しさん
07/12/01 00:23:09
ユーザコンポーネント内のコードからページに直接貼り付けたテキストボックスを参照するもっとも効率的な方法はどうすればいいのですか
443:デフォルトの名無しさん
07/12/01 00:28:48
テキストボックスに限らず、クラスを参照する一番の方法は
プロパティを使うこと。
444:デフォルトの名無しさん
07/12/01 00:59:34
たしかにC++なんかだと、C#のそのusingに相当する
usingディレクティブは使うなって言われるけどね。
ただ、それはエイリアスとかusing宣言とか代替があるから言えるわけで、
C#はガンガンusingする言語だと思っている俺。
445:443
07/12/01 01:25:47
それと忘れてたけど、コントロールのアクセス修飾はprivateがデフォルトだから、
変えなければいけない。
446:デフォルトの名無しさん
07/12/01 01:30:23
>>435
「using ステートメント」じゃなくて「using ディレクティブ」だろというか
そんなこと気にする前に基本的な言葉をだな(ry
まぁそれはいいとして >>444 もいっているように C++ で using namespace
が気になるのは、その他の仕様含めた総合的な要因によるもので、
その前提を元に C# は考えられていてほぼ危険性がクリアされているので
普通に使え。そっちのほうがみやすい。
447:デフォルトの名無しさん
07/12/01 10:19:35
ありがとう。
でもユーザコントロールから親のページクラスをどうすればアクセスできるのか想像できません
448:デフォルトの名無しさん
07/12/01 11:54:24
ページクラスを継承したクラスにコントロール検索プロパティを実装したとしてもユーザコントロールからはスコープの範囲外だからみれないですよね
449:デフォルトの名無しさん
07/12/01 12:24:22
マスターページに実装。
450:デフォルトの名無しさん
07/12/01 13:47:00
マスターページに検索ののプロパティを作ってその配下のページコントロールに配置したテキストボックスを参照するのですか?
できそうな気がする。。
451:デフォルトの名無しさん
07/12/01 14:22:26
DataGridVewでデータバインディングしている時、主キー、ユニークの重複チェックは皆どうしてるの?
主キーは複合もあるので行でチェックするのがいいという前提で。チェック場所はいろんなイベントがあると思う
・DataGridVewのRowValidatingイベント
・DataTableのRowChagingイベント
※DBに問い合わせは論外。
他にもあるかもしれんが・・・。あったら教えて欲しいんですが。
で、入力された値をチェックと言うことでDataGridVewのRowValidatingでチェック。(ViewのことはViewでチェック)
他のクラスでチェックすると、調査時いろんなソースを追いかけないといけないので。
ほんでと、主キー重複、ユニークチェックメソッドはあるのか? → 調べたけどないと思う。
じゃ、別の方法でチェックするにはどうしたらいい?となると。
クラス内部で主キー、ユニークの値を配列で保持して、配列内をチェックしかないのかなと思ってるんだけど。
複合主キーの時は、それぞれの列の値を文字列連結して1つの文字列として保持する。
これ以外になんかいい方法ってないですか?
452:デフォルトの名無しさん
07/12/01 14:25:06
あ、DataGridVewのDataErrorイベントは論外で。あんなの使いようがねぇって感じなので。
453:デフォルトの名無しさん
07/12/01 14:49:10
バインド先がDataTableならPrimaryKey設定しとけば
DataGridVewの入力時エラーになるけど
454:デフォルトの名無しさん
07/12/01 16:24:19
>>450
逆、参照するのがテキストボックス
455:デフォルトの名無しさん
07/12/01 17:25:07
逆とはどうゆう事?マスターページからページのテキストボックスを参照でいいんだよね。
456:デフォルトの名無しさん
07/12/01 19:25:42
設定値はマスターページの値で、テキストボックスが更新されたら
マスターページの値を更新。
457:デフォルトの名無しさん
07/12/01 19:29:06
説明が面倒だから、これをやるってこと
URLリンク(www.atmarkit.co.jp)
458:デフォルトの名無しさん
07/12/01 19:36:58
UdpClient.BeginReceive(~)
から
byte [] buffer = UdpClient.EndReceive(~);
の間に複数の受信接続が在った場合
bufferに入るのは最後に受け取った1つのデータだけですか?
459:デフォルトの名無しさん
07/12/01 23:09:37
結局はテキストボックスがトリガーとなってマスターページに値をあたえないとだめなんだね。
ユーザコントロールがトリガーとなって見に行くことがしたいけど無理なんだよね
460:デフォルトの名無しさん
07/12/02 08:48:15
>>458
最初のだ
461:デフォルトの名無しさん
07/12/02 14:07:57
>>459
これは無理そう。
FindControlsみたいなメソッドをマスターページにプロパティで実装して、
ユーザコントロールのイベント内から呼び出したいんだろ?
これはできそうでできない領域。それに気付いただけでも天才だよ。お前
>>456
も言っていること意味不明。
462:デフォルトの名無しさん
07/12/02 20:44:44
やっぱり無理なんですね
463:デフォルトの名無しさん
07/12/02 21:07:10
>>461
parent経由で親PropertyにSetなら出来るだろ
464:デフォルトの名無しさん
07/12/02 21:53:27
ページといえどもクラスでしょ参照できる分けない
465:435
07/12/02 23:13:03
書き込みが遅れてしまいすみません。
他の方々が書かれたソースを読んでいても薄々感じていましたが、やはり皆様
using を積極的に使うものなのですね。確かに衝突など滅多に起きませんし、
名前空間の構造が崩れることよりも行が横に長い方が害悪かもしれません。
皆様のご助言のお陰で漸く using を使うべきとの考えへと至ることができました。
ありがとうございました。
>>435
自分はむしろ真逆な質の人間だと思っていたのですが。一応 IntelliSense 等、
少しは使っています (というより IntelliSense を使わないで日々コーディング
できる方が居たら尊敬してしまいます)。
>>446
仰る通り、using ディレクティブでした。>>437 といい、きちんと見直したはずだった
のですが。お恥ずかしい限りです。
466:435
07/12/02 23:17:31
>>465 中のレスアンカ 誤: >>435 → 正: >>439 でした。
またしてもやらかしてしまった。度々の訂正、申し訳ありません。
467:デフォルトの名無しさん
07/12/03 12:18:45
質問があります。環境はVS2003のC#です。
const Point pos = new Point(1, 1);
とやると
「'pos' に割り当てられた式は定数でなければなりません。」
というエラーが出ます。
定数にnewは使えるないんでしょうけど、どのようにしたら上記のような定義を実現できるでしょうか?
468:デフォルトの名無しさん
07/12/03 12:26:56
static readonly Point pos = new Point(1, 1);
ふらっとC#スレに行け
469:デフォルトの名無しさん
07/12/03 12:30:39
>>467
残念なことに、constはプリミティブ型(int, double)か、後は例外的にString型のみしか認められない。
非常に不思議なことに、C#には改変不可を示す修飾(C++のconstやJavaのfinal)がない。
一応readonlyという似たようなものがあるが、これはコンストラクタでしか使えないのでメソッド内などでは使えない。
470:デフォルトの名無しさん
07/12/03 13:43:13
いたいことは何となく分かるがかなり変なこと書いてるぞ。
471:467
07/12/03 13:58:16
>>468-469
ありがとうございます。
readonly修飾子を使用することにしました。
472:デフォルトの名無しさん
07/12/03 16:09:37
>>471
プロパティの使用も検討してみては。
473:デフォルトの名無しさん
07/12/08 20:10:03
StreamReader sr = new StreamReader("C:\\test\\時間集計.txt", Encoding.GetEncoding("Shift_JIS"));
string text = sr.ReadToEnd();
sr.Close();
this.rtbIndication.Text = text;
Regex R_Ex = new Regex("this.");
//TextBox1.Text内で正規表現と一致する対象を1つ検索
Match M_stPath = R_Ex.Match(this.rtbIndication.Text);
while (M_stPath.Success)
{
int iFind = this.rtbIndication.Find(M_stPath.Value, RichTextBoxFinds.MatchCase);
this.rtbIndication.SelectionStart = iFind;
this.rtbIndication.SelectionLength = M_stPath.Value.Length;
this.rtbIndication.SelectionColor = System.Drawing.Color.Red;
M_stPath = M_stPath.NextMatch();
}
リッチスプレッドの中から特定の文字だけを抜き出して、そのフォントカラーを赤くしたいのですが
この場合、thisが複数あるにも関わらず、最初に見つかったthisしか赤くなりません。
どこがまずいのでしょうか??
474:デフォルトの名無しさん
07/12/08 21:30:40
↑"this"です
475:デフォルトの名無しさん
07/12/08 21:45:22
とりあえずステップ実行でもしてみたらー?
476:デフォルトの名無しさん
07/12/08 22:12:01
>>475
原因は解っています。
int iFind = this.rtbIndication.Find(M_stPath.Value, RichTextBoxFinds.MatchCase);
の部分で、リッチテキストボックス(rtbIndication)のテキストの最初から読み込んでるから
必ず最初の"this"で止まってしまうのです
なにかいい方法はないでしょうか?
477:デフォルトの名無しさん
07/12/08 22:17:56
Findの任意の位置から検索開始できるオーバーロード使えばいいんじゃね
478:デフォルトの名無しさん
07/12/08 22:23:12
>>477
すいません、たとえばどのように書けばよろしいのでしょうか?
479:デフォルトの名無しさん
07/12/08 22:37:03
いやまずヘルプ見ろよ
480:デフォルトの名無しさん
07/12/08 22:37:58
>>all
解決しました!>>477ありがとう!
481:デフォルトの名無しさん
07/12/11 18:21:35
namespace IEnumeratorTest
{
public class Sample : IEnumerable<char>
{
public IEnumerator<char> GetEnumerator()
{
yield return 'C';
}
}
class Program
{
static void Main(string[] args)
{
foreach (char c in new Sample())
{
Console.Write("{0}", c);
}
}
}
}
C#2.0 yieldの勉強をしています。
このコードで何故コンパイルエラー(CS0536)が出るのかわかりません。
下記のどれにも違反していないのですが。。
・public キーワードが省略されている。
・戻り値の型が一致しない。
・static キーワードがある。
何か足りないものでもあるのでしょうか?
Visual C# 2005 Express Editionを使用しています。
482:デフォルトの名無しさん
07/12/11 18:46:25
MSDNを見るとIEnumerator<>は非ジェネリックのIEnumeratorを継承
していました。
また、以下の記述がありました。
実装時の注意 このインターフェイスを実装するには、非ジェネリックの IEnumeratorインターフェイスを実装する必要があります。
そこで
IEnumerator IEnumerable.GetEnumerator()
{
//ここでIEnumeratorオブジェクトを戻さないとエラーになる
}
を実装する必要がありそうなのですが、何を書けばよいのかわかりません。
483:デフォルトの名無しさん
07/12/11 18:49:49
>>481
エラーメッセージ読め。
IEnumerable<T> は non-generic な IEnumerable を継承してるんで、
そっちの GetEnumerator も実装しないとだめ。
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
484:デフォルトの名無しさん
07/12/11 18:50:59
>>482
IEnumerator IEnumerable.GetEnumerator() の中身は、
return this.GetEnumerator(); にでもしとけ。
485:デフォルトの名無しさん
07/12/11 19:02:48
Yieldの使い方を根本的に間違ってるわけだけどな。
Yieldを含む IEnumerableなファンクションが暗黙にいろいろやってくれる。
この例だとstaticにしてもいいな。
public class Sample {
public IEnumerable<char> Hoge() { yield return 'C'; }
}
foreach (char c in new Sample().Hoge())
Console.Write("{0}", c);
486:デフォルトの名無しさん
07/12/11 19:28:55
>>483
>>484
>>485
ありがとうございました。解決しました。
>>485
別法でしょうか。まだ詳しいことは分からないのと
サンプルの方法も間違っていなそうなので、とりあえず
これを使っていこうと思います。
487:デフォルトの名無しさん
07/12/11 20:12:58
int x = 100, y = 200;
private Storyboard story;
private DoubleAnimation myDoubleAnimation;
private DoubleAnimation myDoubleAnimation2;
private void WindowLoaded(object sender, RoutedEventArgs e) {
Rectangle rect = new Rectangle();
rect.Width = 10;
rect.Height = 10;
. (省略
myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.From = 10;
myDoubleAnimation.To = x;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(2000));
myDoubleAnimation2 = new DoubleAnimation();
myDoubleAnimation2.From = 10;
myDoubleAnimation2.To = y;
myDoubleAnimation2.Duration = new Duration(TimeSpan.FromMilliseconds(2000));
Storyboard.SetTargetName...(省略
story = new Storyboard();
story.Children.Add(myDoubleAnimation);
story.Children.Add(myDoubleAnimation2);
story.Begin(this, true);
}
private void click(object sender, RoutedEventArgs e) {
story.Stop(this);
x = 200;
y = 300;
story.Begin(this, true);
}
.NET3.0ですが、ストーリーボードの子要素の中身を変更するのってどうやるんでしょうか?
xとyの値をクリックで変えたいのですが、上記の方法ではうまくいかず、
クリックしてもx,yは100,200のままで変わりません 。どうすればいいのでしょうか?
488:デフォルトの名無しさん
07/12/12 01:25:48
yieldって使うか?用途が見えないのは理解不足なだけなのか?
489:デフォルトの名無しさん
07/12/12 01:27:37
うん
490:デフォルトの名無しさん
07/12/12 02:07:33
用途ってか、Enumerable返すメソッドが簡単に作れるから便利ってだけだけど。
状態を持つ場合なんか手で書きたくないしね。
491:デフォルトの名無しさん
07/12/12 04:35:41
>>487
myDoubleAnimation.Toはint?だからclickの中でx変えただけじゃ元の値のままですよ。
意図通りの挙動をさせるにはこんな感じ?
private void click(object sender, RoutedEventArgs e) {
story.Stop(this);
x = 200;
myDoubleAnimation.To = x;
y = 300;
myDoubleAnimation2.To = y;
story.Begin(this, true);
}
492:491
07/12/12 04:38:58
×int?
○double?
寝ぼけてました。
493:デフォルトの名無しさん
07/12/12 07:41:59
yieldは列挙とマイクロスレッドが主な用途だろうな
こう言語機能をこんな風に使うとこんなことができるよてきなTips( ゚д゚)ホスィ…
494:デフォルトの名無しさん
07/12/12 12:22:21
foreachと組み合わせるとなかなかいい塩梅だよ。
495:デフォルトの名無しさん
07/12/12 12:22:41
オライリーのプログラミングC#見たけど
ユーザー定義型のソート基準を決めるのに
IComparerを実装するのって面倒ですね。
この点はC++のほうが分かりやすくて楽チン。
496:デフォルトの名無しさん
07/12/12 12:34:29
>>>493
その手のサイト運営してる身だけど、
そういう Tips は結構まとめるの面倒なのよね。
日記とかにちまちま書いてる人はいるけど、それを1箇所に集めるとなると。
「この辺りを Tips にまとめて欲しい」みたいなの列挙しといてくれたら
そのうちページに起こすけど。
>>495
いや、IComparison<T> デリゲートでもソートできる。
C# 3.0 だと、
list.Sort((x, y) => y.CompareTo(x));
とか書ける。
497:デフォルトの名無しさん
07/12/12 12:36:10
2.0でも、十分楽だと思うけど。
Array.Sort(table, delegate(Hoge x, Hoge y)
{
return ・・・;
});
498:デフォルトの名無しさん
07/12/12 12:44:30
delegateは未読です。
C#は記法がキモイのはC++と同じで、
慣れるまで時間がかかりそうです。
499:デフォルトの名無しさん
07/12/12 12:47:37
C++ がキモイって。
いったい、元々どこの畑にいたんだ。
500:デフォルトの名無しさん
07/12/12 12:57:45
>>496
よかったらサイトのアドレス教えてください@メアド
501:デフォルトの名無しさん
07/12/12 18:52:31
TextBoxに色付けたり
インデント開始と停止する系の命令はあるですか?
502:デフォルトの名無しさん
07/12/12 20:28:42
釣り?
503:デフォルトの名無しさん
07/12/12 20:35:34
はい
504:デフォルトの名無しさん
07/12/12 20:47:52
リッチなやつにしとけ
505:デフォルトの名無しさん
07/12/12 23:14:34
ブルジョワテキストボックスでも開発するか
めちゃくちゃリソース食うの。
506:デフォルトの名無しさん
07/12/12 23:15:23
word呼べよ
507:デフォルトの名無しさん
07/12/13 04:30:30
例外をcatchするとデバッグしにくいという問題は、
IDEのメニュー「デバッグ」「例外」で対応できる。
基本的にはSystem.IO系やNullReferenceExceptionの「スルー時中断」にチェックを入れる。
あとは発生したベースで必要な例外を追加していけばいい。
508:デフォルトの名無しさん
07/12/13 04:34:09
今は特に言う事無いけど何か思いついたら次からここに書き込むよ
509:デフォルトの名無しさん
07/12/13 09:26:21
スルー時中断ワロタ
510:デフォルトの名無しさん
07/12/13 18:23:06
にゃるるで言及されてたC#のお偉いさんの話は本当なのだろうか。
もしマジだとしたら、ガクブルもので正直この先も使うか考えてしまう。
511:デフォルトの名無しさん
07/12/13 18:27:37
何の話か言えよ
512:デフォルトの名無しさん
07/12/13 19:09:25
ヘジたんが AOP 嫌いだとかクエリ式嫌いだと書かれてたアレ?
そんなガクブルな話書かれてたか?
513:デフォルトの名無しさん
07/12/13 20:18:43
>>512
そんなことは常識だろ
514:デフォルトの名無しさん
07/12/13 20:52:09
>>513
いや、だから、常識なのに何をガクブルしてんの?と。
515:デフォルトの名無しさん
07/12/13 21:34:46
クエリ式もあれはひどいよな
使い物にならん
516:デフォルトの名無しさん
07/12/13 22:38:37
いやいや、クエリ式は使い出すと便利でしょうがないよ。
517:デフォルトの名無しさん
07/12/13 22:41:45
>>516
LINQのほとんどの演算子が使えないのに?
518:デフォルトの名無しさん
07/12/13 22:59:40
>>517
どういうこと?
「LINQ to SQL では LINQ の標準クエリ演算子を全部サポートしてないのに?」といいたいのかな?
519:デフォルトの名無しさん
07/12/13 23:02:05
>>518
拡張メソッドでは呼び出せて、SQLにも使えるのに
クエリ式では使えないものがいっぱいあるだろ
520:デフォルトの名無しさん
07/12/13 23:11:29
>>519
ああ、そういうことね。
まあ、それでも、let とか2重 from とか使うときはクエリ式便利。
from x in a
from y in b
select new { x, y };
とか、クエリ式使わないと SelectMany 使って書くの大変よ。
521:デフォルトの名無しさん
07/12/13 23:16:59
正直letとか使われるとコードがわけわかんなくなる
拡張メソッドでいいじゃん
522:デフォルトの名無しさん
07/12/13 23:25:31
や、let はむしろ便利だろ
il からコード起こしてみたらすごいことになってたけどw
523:デフォルトの名無しさん
07/12/13 23:26:16
クエリ式この世からなくなってくれればコード読みやすくなるのに
524:デフォルトの名無しさん
07/12/14 00:33:05
csvファイルを読み込んで数値計算をさせたいのですけれど
どうやったらいいのか分かりません。
条件式書くのとcsvファイルを読み込んでそのまま出力することはできます。
むしろそれくらいしかできない初心者です。
アドバイスお願いします。
525:デフォルトの名無しさん
07/12/14 00:34:09
>>524
そのまま出力できるならその値を出力せずに計算すればよかろ
526:デフォルトの名無しさん
07/12/14 00:37:08
>>525
普通に計算式を書いてから、その後出力する処理を書けばいいということでしょうか?
527:デフォルトの名無しさん
07/12/14 00:38:05
>>526
その通りだ
528:デフォルトの名無しさん
07/12/14 00:41:13
>>527
あああああ そうだったんですか。
難しく考えすぎてました。ありがとうございました。ものすごく助かりました。
529:デフォルトの名無しさん
07/12/14 08:35:40
てもその計算式をどうやって解析するかは想像できてるか?
530:デフォルトの名無しさん
07/12/14 08:36:06
天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。
天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。
天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。
天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。
531:デフォルトの名無しさん
07/12/14 10:33:22
WinAPI の DllImport やら、 const int WM_HOGE みたいなのをC++ヘッダファイルから
自動生成するようなツールってないの? VB6 にあったやつみたいな。
それか、WinAPI をひたすらラッピングした .NET Frx 向けライブラリ。
532:デフォルトの名無しさん
07/12/14 10:38:01
>>531
こういうのは?
URLリンク(www.pinvoke.net)
533:デフォルトの名無しさん
07/12/14 11:14:51
>>532
おおサンクス。ググっても DllImport の解説やら、WinAPI を使ったサンプルばっか出てきて
困ってたんだよね。これで幸せになれそうだ。
534:デフォルトの名無しさん
07/12/14 12:18:55
たしかアドインでPInvoke関連のヤツがあったはず。
具体的に何を補助してくれるのかしらんが、余裕があれば試してみたらいい。
535:デフォルトの名無しさん
07/12/14 12:23:20
そのアドインも>>532のリンク先にある
536:デフォルトの名無しさん
07/12/14 15:06:38
隔離スレなのにずいぶん機能してるな
537:デフォルトの名無しさん
07/12/14 15:14:57
オライリー プログラミングC#
プログラミング Microsoft Visual C# 2005 言語編
C#の勉強をはじめる場合、どちらがお勧めですか?
538:デフォルトの名無しさん
07/12/14 15:29:59
難しくなさそうなのをちょっと読んで
あとは使ってれば分かる
539:デフォルトの名無しさん
07/12/14 17:47:31
>>537
すでにほかの言語が使えるなら、オライリーが無駄な説明がなく理解しやすい。
下はシラネ。ただ、言語編とかつくのは他のも読む前提で書かれてることが多い。
後、@itのC#入門改訂版ならタダで読める。正直助長な部分もあるが、本を買う前に一度見てみて、
それだけでは不十分だと感じてから本を買っても遅くないんじゃないか?
540:デフォルトの名無しさん
07/12/14 18:58:04
ってかMSDNとかの Microsoft 様のドキュメント読めば十分すぐるだろ・・・
541:デフォルトの名無しさん
07/12/14 20:11:48
>>540
リファレンスには十分だが、携行できないしいろんな意味で不十分
「C#の勉強を始める場合」だからな。
542:デフォルトの名無しさん
07/12/14 20:13:03
>>539
C++は使えるのとJAVAの文法の基本は分かっているので
オライリーにしてみます。MSの本は高すぎるのもネックです。
>>540
基本を押さえたら適宜参照してみます。
543:デフォルトの名無しさん
07/12/14 20:48:26
携行できないのはたしかにその通りだけど、↓あたりとか折角無料なのに
スルーしてしまうのはもったいないと思う。
URLリンク(msdn2.microsoft.com)
544:デフォルトの名無しさん
07/12/14 20:51:56
>>542
正直、C++ と Java 使えるなら MS のドキュメントだけで十分だと思うけど。
545:デフォルトの名無しさん
07/12/14 21:07:26
MSDNの
・C# プログラミング ガイド
・Java 開発者のための C# プログラミング言語
あたりに一通り目を通しとけば、まあいけると思うけどな。
どうしても紙媒体が好きならオライリーのC#いいと思うよ。
546:デフォルトの名無しさん
07/12/14 21:19:20
以外とWebですますっていう人間多いのか?
俺は新しい言語を勉強するときには、とりあえず一冊本を買うんだが、
Webだけだと記憶しづらくないか?
547:デフォルトの名無しさん
07/12/14 21:20:23
msdnはローカルに入れますよ
548:デフォルトの名無しさん
07/12/14 21:25:51
>>547
ごめん、Webっていうのは言葉のあやで、デジタルデータでってこと。
549:デフォルトの名無しさん
07/12/14 21:30:31
あんまり紙資源を無駄にしたくないから本は買わない
ウラニウムとどっちが無駄かは知らんけど
550:デフォルトの名無しさん
07/12/14 21:42:48
「Web ですます」というより、C# は「Web ですむ」。
それくらい日本語情報充実してる。
551:デフォルトの名無しさん
07/12/14 22:00:43
どっちにしろ公式のドキュメントには目を通しておく必要があるし、
MSの物の場合それだけで十分なことも多いからなぁ・・・
552:デフォルトの名無しさん
07/12/14 22:02:49
俺の場合基本的に本ですべてすませて、必要なところだけ公式のドキュメントを見る。
553:デフォルトの名無しさん
07/12/14 23:18:24
俺も情報をつかむ程度ならweb、じっくり勉強するなら本だな。
論文とかもできるだけ印刷して読む・・・あ、単純に紙媒体が好きなだけかな?結局好みの問題かも。
でもディスプレイとずっと睨めっこするのは辛くない?
というかMSDNは重いのが・・・
動的生成なサイトってイライラが溜まって好きじゃないんだよなw
554:デフォルトの名無しさん
07/12/14 23:30:20
>>553
禿胴。昔はモニター越しの情報も紙媒体も一緒だと考えてたんだが、
長年やってるうちに結局紙媒体の方が覚えやすいっていう結論になった。
555:デフォルトの名無しさん
07/12/15 00:38:52
オライリーの本は二部が難しいな。
のマーシャリングやらアセンブリやら属性、シリアル化とか
わけわからん。
ここはC#というよりは.NETの世界なんだろうけど。
556:デフォルトの名無しさん
07/12/15 00:57:36
>>555
二部って何を指してるの?
557:デフォルトの名無しさん
07/12/15 00:59:39
何らかの言語触ってりゃC#なんか一日で書けると思うが
まークラスライブラリは必要になったときに引くが
558:デフォルトの名無しさん
07/12/15 01:07:27
1日もかかるかよ
559:デフォルトの名無しさん
07/12/15 09:48:19
>>556
本の目次
560:デフォルトの名無しさん
07/12/15 10:01:01
>>557は本当に一日で習得できた?
プログラムを動かすだけならコピペでも出来るし、
それに一通り使えるようになった後ではいままでやってきたことがひどく簡単なことだったと思うもんだよ。
561:デフォルトの名無しさん
07/12/15 10:09:47
何らかの言語触ってりゃ
コボラー
絶対無理w
まあ、かけるだけならアホプログラムでも書けるといえなくもないから、
1日でとか短時間を自慢げに言うのって馬鹿にしか見えんよね。
562:デフォルトの名無しさん
07/12/15 10:13:54
このスレらしいくだらない話だなw
563:デフォルトの名無しさん
07/12/15 10:18:49
>>560
C++やらJavaやらやってたんで、楽勝だったよ。
564:デフォルトの名無しさん
07/12/15 10:20:54
文法理解しただけで「習得」したと思っちゃう人いるよね。
565:デフォルトの名無しさん
07/12/15 10:34:09
何らかの言語と
C++やjavaじゃぜんぜん条件が違うわけだが。
まあそんなことはどうでもいい。
できるって言うレベルが人によって違いすぎて何の意味もないわな。
566:デフォルトの名無しさん
07/12/15 10:42:55
URLリンク(blog.livedoor.jp)
> 私自信、新しいプログラミング言語を3日でマスターできなかったら負けだと思っている。
> もちろん「マスター」にもピンからきりまであるが、ここでいう「マスター」は、もちろんライ
> ブラリーやクラスを端から端まで覚えるということではなく、その言語の特徴をつかんで、
> 一目見てその言語で書かれた事がわかるようなコードを読み書きできることを指す。
567:デフォルトの名無しさん
07/12/15 10:47:36
C#なんて、2.0あたりまでは、メジャーな言語の寄せ集めみたいな文法で、
入門書をパラパラと読んで「ああ、こういう言語ね」と思えないようなヤツは不勉強すぎ。
568:デフォルトの名無しさん
07/12/15 10:48:53
言語自体の割合は小さくなってフレームワークなんかの割合がでかいって
偉い人も言ってたのにね。
569:デフォルトの名無しさん
07/12/15 10:52:31
1.1まででの壁はデリゲートぐらいか
2.0は匿名メソッド(のスコープ)
言語としてはこじんまり
570:デフォルトの名無しさん
07/12/15 11:09:48
あ、こういう言語ね
書ける
ここでいうマスター
はいはいなんの意味もないね。
ほんとに言語固有の部分は少ないしね。
まあそれでも仕様のボリュームはそれなりにあるけど、
ごく基本的な部分だけでもプログラムは書けるしな。
571:デフォルトの名無しさん
07/12/15 11:13:31
そんなんだから、ライブラリでも設計実装させたら
とんでもないことになったりする。
572:デフォルトの名無しさん
07/12/15 11:22:58
深く考えずに、細かいところを検証せずに
やたらマニアックなことする奴も氏ね、
コードは複雑で冗長でそのくせ穴だらけでたいして役にも立たない、
ああもうトラウマだぜ。
573:デフォルトの名無しさん
07/12/15 11:30:57
みんなすごいんだね。
俺なんて、他人のサンプルコード見ては
「なんだよ、このアトリビュート。どうやって学んだんだよ」
「このプログラムの設計ってまず何からどうやって作ったんだ?」
ってな感じで右往左往して
C言語で作ったプログラムをC#で組んでみようと思っても
上手くいかないし。
よし、JAVA宿題スレにそのプログラムの問題投稿して
解いてもらって、そこからJAVA経由で理解しようと
思ったけど、返ってきた答えが答えになってない
不完全なプログラムだったりして、どーしたもんかと考えたり・・・
基本構文はすぐに解ったけどオブジェクト指向が出来てない
自分に辟易する。
574:デフォルトの名無しさん
07/12/15 11:32:45
それは単に自分の頭が悪いだけで、
みんながすごいわけじゃなかろう。
575:デフォルトの名無しさん
07/12/15 11:35:21
>>573
あんまりふらふらせずに一つの言語に専念してみたらどうだろうか?
ここで上がってる多言語使える人間も、基本的には一つの言語を十分に学んでから、
その言語を起点して他の言語を学んでる人が多いはず。
複数の言語を同時に習得しようとすると、文法やメトリックを混同してまったく勉強できないことも多い。
俺は、とりあえずjavaが使えれば、基本的なOOP的言語は文法の違いだけですぐに覚えられると思う。
576:デフォルトの名無しさん
07/12/15 11:42:36
多言語を習得するというのは、実はそれほどすごいことじゃない。
文法とライブラリを使用する程度なら、その言語の主要概念(OOPとか)をすでに習得していればそれこそ丸一日あれば十分。
だから、Javaさえ覚えられればCやC++、C#は使えるも同然だし(言語固有の習慣や文法を除いて)、
言語を習得したっていうのは、言語の設計概念を理解してるかということに直結すると思う。
だから、一日で十分とかいってる人間も、似たような概念で構成された言語を、
今まで覚えた言語の概念を流用して使えるといってるわけで、
関数型言語をまったく知らない状態から、haskellを一日で自由に使えるわけがない。
577:デフォルトの名無しさん
07/12/15 11:53:33
>だから、Javaさえ覚えられればCやC++、C#は使えるも同然だし(言語固有の習慣や文法を除いて)
無茶ゆうなw
ってか、言語固有の習慣や文法を除いて
ってどういうこったよ?それはどう使えるっていうんだ?
C++まともじゃなくてもやったことあるなら
そんな台詞はどうやっても出てこん。
578:デフォルトの名無しさん
07/12/15 11:56:40
java屋がC#始めると変なとこだけ潔癖症でかなわん。
C#の文法でjavaを書く癖が直ってくれない。
579:デフォルトの名無しさん
07/12/15 12:01:02
あるある、チェック済み例外がうじうじとか言い出すよな。
580:デフォルトの名無しさん
07/12/15 12:17:54
>>573
そうだね。
こんだけオブジェクト指向が広まってるのに、たとえば、
「C一筋で10年、それ以外にはまったく興味もなくてすごしてしました。
いまさらC#やJavaなんてできません」
みたいなPGって激しくオワットルね。
581:デフォルトの名無しさん
07/12/15 12:23:13
C++勉強してればオブジェクト指向の概念自体はだいたいわかるんじゃないのかな。
時歳に使いこなせるかどうかは別だけど。
582:デフォルトの名無しさん
07/12/15 12:28:23
C++よりゃよっぽどオブジェクト指向部分に集中し易いjavaでも
結局思い切り人次第だからな~
583:デフォルトの名無しさん
07/12/15 13:14:59
>>577
同意。C++の複雑度はJAVAの比ではない。C++を知ってる人間なら
JAVAはえらく簡単に覚えられるが、その逆は真ではない。
584:デフォルトの名無しさん
07/12/15 13:34:40
C++は手動でメモリ管理しなきゃならんし
標準ライブラリも足りないものだらけだし
言語自体にも罠がいっぱいある
585:デフォルトの名無しさん
07/12/15 13:44:33
>>584
メモリ管理なら、今やスマートポインタを使わない
なんて考えられない。boostがよりいっそう充実して
ライブラリが進化することを期待する。現にそうなって
きている。
586:デフォルトの名無しさん
07/12/15 13:47:44
いい加減すれ違い。
587:デフォルトの名無しさん
07/12/15 13:50:49
ここを隔離スレと知っての発言か?
588:デフォルトの名無しさん
07/12/15 14:10:25
いや、おまいらまずC#が生まれた背景を理解しろよ。一言だとJavaのパクリだがw
「C#はC++をモデルとしてプログラマーを面倒で煩雑な作業から開放するために
作られたより効率的開発のしやすい言語」でC++プログラマーが開発者なんだよ。
つまり、C#はC++からメモリ開放や宣言の煩雑さを省いたオートマバージョンなんだよ。
つまらないCopyとCloneの違いなんてC++プログラマーは一瞬で理解できる。
それを勘違いしているC#ヲタはC#はすばらしいと思っているが、
C#でC++より優れたものを作れるかといったら答えはYESでもありNOでもある。
「何に優れたものか」によって尺度が違うからな。
C++⊃C#、VB.NET これは間違いない。C++を極めればどんな言語でも理解できるよな。
ただ、C++を極めると簡単に言ってもSTL、ATLからUNIX系、MS系や
地方言語のマクロ、コンパイラ、デバイスのインターフェースからOS制御、途方もないボリュームだ。
OSを記述する言語としてのC++ではなく、業務アプリを作るC++を学ぶなら
表面だけなら言語経験より開発手法や設計思想なんかの方がよっぽど重要なのかもな。
はい長文ゴメンなさ~い。
589:デフォルトの名無しさん
07/12/15 14:27:21
痛い
590:デフォルトの名無しさん
07/12/15 14:45:54
C#にはあってC++にはない致命的なもの
一つのクラスを一つのソースファイルに書く機能
リフレクション
object型
クロージャ
式ツリー
自動シリアライズ
そしてもちろんGC
C++にあってC#にない致命的なもの
なし
591:デフォルトの名無しさん
07/12/15 14:49:50
テンプレートがないのは重症だろ
592:デフォルトの名無しさん
07/12/15 14:53:58
素晴らしい!これぞ隔離スレ
593:デフォルトの名無しさん
07/12/15 14:57:30
ファイルのインクルードは?
あれがないおかげで、プロジェクト全体から見えるシンボル(#defineで定義するやつ)
を定義しようと思ったらプロジェクトのプロパティーでチマチマやらんといかん。
面倒だし明示的じゃない。
594:デフォルトの名無しさん
07/12/15 15:18:13
C++にあってC#に無い物はわざわざ削った物ばかり
595:デフォルトの名無しさん
07/12/15 15:30:26
>>593
何を言ってるのか分からん
#defineをプロジェクトのプロパティでどう代用するんだ
596:デフォルトの名無しさん
07/12/15 15:36:50
>>595
ただ君が知らないだけなわりになぜか偉そうな口ぶりなのはどうなのw
まあ落ち着いて
URLリンク(msdn2.microsoft.com)(VS.80).aspx
の「Visual Studio 開発環境でこのコンパイラ オプションを設定するには」でも読め。
597:デフォルトの名無しさん
07/12/15 15:46:21
C#で#defineはそんな使わんと思うんだが
マクロないんだし
598:デフォルトの名無しさん
07/12/15 15:54:10
>>596
この機能のことであればひとかけらも致命的ではないだろ
お前のコードはいろんなシンボルを使った#ifだらけなのかもしらんが
プロパティで設定すればいいだけの話だ
599:デフォルトの名無しさん
07/12/15 15:59:18
C# でも #if SYMBOL はやるけどもな。
#define は、
マクロ型関数は使うな、
プロジェクト全体に渡るシンボル定義はコンパイラオプション+プロジェクト設定でやれ
ってこと。
プロパティはあんまり関係ないと思うが。
600:デフォルトの名無しさん
07/12/15 16:20:24
>>598
たしかに致命的ではないね。
その点は申し訳ない。
601:デフォルトの名無しさん
07/12/15 17:39:33
つ C++/CLI
602:デフォルトの名無しさん
07/12/15 18:19:16
>>590
おまえは本当に痛い。
リソースの乏しい久組み込みではGCが激しく邪魔になる。
一生Winアプリでも作ってろカスが。
603:デフォルトの名無しさん
07/12/15 18:39:26
まるで組込用途でC#使ったことがあるような言いぐさだなw
604:デフォルトの名無しさん
07/12/15 18:43:33
まあ組み込み用途ならCだし
605:デフォルトの名無しさん
07/12/15 19:03:47
>>603
適当に言いました。
すいませんでした。
606:デフォルトの名無しさん
07/12/16 00:34:29
>>591
っジェネリック
607:デフォルトの名無しさん
07/12/16 00:36:45
C#のジェネリックは実体化しなくても型チェックされるから、
肝心なところで使い物にならない。
608:デフォルトの名無しさん
07/12/16 00:38:05
型のチェックがガチガチなのはむしろ好きだがね
ちょっと間違うとコンパイルも通らない
609:デフォルトの名無しさん
07/12/16 00:44:21
CとかC++は何でもかんでも値型にキャストできるのが気持ち悪い。
なんでchar[]とかがintにキャストできるのかと。
ポインタはパフォーマンスアップに繋がるのはわかるがこれだけは
気持ち悪くてしょうがない。
610:デフォルトの名無しさん
07/12/16 00:48:55
C#の将来は明るいですか?
Windowsのソフトを作る予定がなくてもC#
を覚える必要があるか。JAVAとどっちを
勉強すべきか。
611:デフォルトの名無しさん
07/12/16 00:49:47
基本的にC++はメモリ操作が特徴。
型なんてただのメモリの入れ物としてしか認識してないから。
612:デフォルトの名無しさん
07/12/16 00:52:04
>>611
CはともかくさすがにC++にそれは言い過ぎのように思う
613:デフォルトの名無しさん
07/12/16 00:52:26
>>611
C#の型はどうなの?
614:デフォルトの名無しさん
07/12/16 00:53:42
>>611
仮想関数があれば仮想テーブルや型情報、vptrもある。
ただの入れ物とは思えない。
615:デフォルトの名無しさん
07/12/16 01:11:04
Windowsのソフトを作る予定がないならC#使ってもしょうがない
作る予定があるソフトに必要な言語をやるといい
616:デフォルトの名無しさん
07/12/16 01:28:21
>>615
Linuxに移植されたら?
世界は変わるかも?
617:デフォルトの名無しさん
07/12/16 01:33:30
Monoのこと、ときどきでいいから思い出してください
618:デフォルトの名無しさん
07/12/16 01:35:46
>>617
しょっちゅう使ってるよ
ペンケースに入ってる
619:デフォルトの名無しさん
07/12/16 19:00:20
そういえばC++にはbool型をとる安全なifもないな
620:デフォルトの名無しさん
07/12/16 21:28:37
安全
そのようなものはC++の思想に反するのだよ
うそですすみません。
621:デフォルトの名無しさん
07/12/16 21:38:41
むしろif文にbool型しかとらないJava/C#が異端なんじゃねーの?
俺もbool型オンリーの方が好きだが、スクリプト言語してるとそうじゃない方が多い気がする。
622:デフォルトの名無しさん
07/12/16 21:47:50
型に寛容な言語だとboolだけってわけにもいかないから
623:デフォルトの名無しさん
07/12/16 21:48:27
D言語は
bool b = true;
if(b){} // これはいけるけど、
if(b = true) {} // これはだめだお
624:デフォルトの名無しさん
07/12/16 21:48:36
動的型じゃ意味ないわな
625:デフォルトの名無しさん
07/12/16 21:51:33
>>623
やるならここまできっちりやるべきなんだろうな
626:デフォルトの名無しさん
07/12/16 22:05:30
>>623
Dはbool以外の型の値もifに与えられるけど、
代入式を取れないってのは革新的だよね。
627:デフォルトの名無しさん
07/12/16 22:12:14
Dはよく知らんが
while ((line = reader.ReadLine()) != null)
こういうのはOKなの?
628:デフォルトの名無しさん
07/12/16 22:13:29
>>626
メソッドのリターンコードで条件判定するようなプログラミングが簡単に
表現できない欠陥品だろD言語は
629:デフォルトの名無しさん
07/12/16 23:00:27
何を言ってるの君は?
630:デフォルトの名無しさん
07/12/16 23:02:10
bool以外の値をifに与えられちゃダメだと思うがね
boolの代入は規制すべきだと思う
631:デフォルトの名無しさん
07/12/17 11:12:08
そういった人それぞれのプログラミング思想を具現化したものがそれぞれの言語な訳です
632:デフォルトの名無しさん
07/12/17 22:19:44
だな
633:デフォルトの名無しさん
07/12/26 02:04:33
C言語(C++)のDLLを、C#と連携を取ろうと思いました。
char*の受け渡しで、詰まるところがありました。
以下のコードで、環境により、エラーが出たりでなかったりします。
(現在、エラーが出る環境がないため、エラーメッセージ失念……)
--------エラーとなるコード C#側(Form1.cs)---------
[DllImport("Hoge.dll")]
extern static StringBuilder GetHogeMessage();
private void Form1_Load(object sender, EventArgs e)
{
StringBuilder msg = GetHogeMessage();
this.label1.Text = msg.ToString();
}
-------エラーとなるコード CのDLL側(Hoge.dll)----------
char msg[255];
extern "C" __declspec(dllexport) char* GetHogeMessage()
{
sprintf_s(msg, 255, "ホゲホゲプー");
return msg;
}
--------------------------------------
以下のように、ネットで、よく見かけるコードに変えましたら、
エラーが出なくなりました。
続きます。
634:デフォルトの名無しさん
07/12/26 02:04:57
--------正しく動くコード C#側(Form1.cs)---------
[DllImport("Hoge.dll")]
extern static void GetHogeMessage( StringBuilder name, int len );
private void Form1_Load(object sender, EventArgs e)
{
StringBuilder msg = new StringBuilder(255);
GetHogeMessage(msg, 255);
this.label1.Text = msg.ToString();
}
-------正しく動くコード CのDLL側(Hoge.dll)----------
extern "C" __declspec(dllexport) void GetCurrentName(char* msg, int length)
{
sprintf_s(msg, length, "ホゲホゲプー");
}
私のよく知る Delphiでは、string ←→ char*(PChar)間では、
コンパイル時に自動で変換コードを入れているのが、
デバッガで逆アセンブルすると、わかります。
同様に、動作を知ろうと、Reflectorで、
ILに変換したのも読んでみたのですが、コンパイラマジックなどなく、
理解にいたりませんでした。
C#は(というか、MSIL?)、内部動作的には、char* → StringBuilderでは、何をやっているのでしょうか?
私は想像では、StringBuilder.pChar のような非公開のプロパティに、char*を代入して処理しているのでは?と思っています。
そうなると、上記のエラーとなるコードでは、インスタンスを生成していないために、
強引なキャストが起き、StringBuilderとして処理はされるものの、
msg.ToString などで、エラーが起きることがある、と。
この辺の、動作に関するドキュメント等ありませんでしょうか?
635:デフォルトの名無しさん
07/12/26 02:05:54
コードミスりました orz
--------正しく動くコード C#側(Form1.cs)---------
[DllImport("Hoge.dll")]
extern static void GetHogeMessage(StringBuilder name, int len );
private void Form1_Load(object sender, EventArgs e)
{
StringBuilder msg = new StringBuilder(255);
GetHogeMessage(msg, 255);
this.label1.Text = msg.ToString();
}
-------正しく動くコード CのDLL側(Hoge.dll)----------
extern "C" __declspec(dllexport) void GetHogeMessage(char* msg, int length)
{
sprintf_s(msg, length, "ホゲホゲプー");
}
636:デフォルトの名無しさん
07/12/26 02:10:16
マーシャラがStringBuilderが持ってるバッファのポインタをchar*として渡すだけ。
char*を返す関数なら普通にStringで受ければいい。
637:デフォルトの名無しさん
07/12/26 02:12:17
>>634
URLリンク(msdn2.microsoft.com)(VS.80).aspx
638:デフォルトの名無しさん
07/12/26 03:00:09
>>636-637
サンクス!!
アンマネージドと、マネージドの相互変換をマーシャリングというのですね。
Buffers のサンプル
URLリンク(msdn2.microsoft.com)(VS.80).aspx
>>637の文字列のところに書いてありました。
文字列の変更の可能性がある場合は、StringBuilderを使うのはあってるみたいです。
引数などで渡した場合、StringBuilderのバッファのポインタが渡されるだけなんですね。
アンマネージドで確保されたchar* を返却値としてもらう場合は、
自動的に、解放されるのを防ぐために、IntPtr でアンマネージのままもらって、
Marshal.PtrToStringAuto で、stringに変換すればいいのですね。
わかりました!
ありがとうございました。
639:デフォルトの名無しさん
07/12/26 11:48:22
.net のVBコードをC#に変換できるツールってないですか?
640:デフォルトの名無しさん
07/12/26 12:12:05
ありますよ
641:デフォルトの名無しさん
07/12/26 12:21:21
ありがとうです
642:デフォルトの名無しさん
07/12/27 18:45:28
ツールでVBコードをC#に変換して
勉強がてらいじってるけどさっぱり分からん
c++でネイティブ書くなんて一生無理だなこれは
643:デフォルトの名無しさん
07/12/27 18:53:27
それはない
プログラミングが上達しない才能が無い限りいつかできるようになっちゃうよ
644:デフォルトの名無しさん
07/12/28 00:38:35
>>638
char*からなら、PtrToStringAnsiではないのか?
645:デフォルトの名無しさん
07/12/28 01:18:07
こんばんは。質問があります。
[管理ツール]-[データ ソース (ODBC)]-[ユーザDSN]でデータソースの設定を行う際、
表示される画面(例えばアクセスの場合だとデータベースの選択画面)をプログラム上で
出すにはどうすればいいのでしょうか?
ヒントか参考になるサイトでもいいので教えていただけないでしょうか。
よろしくお願いします。
646:デフォルトの名無しさん
07/12/28 02:11:03
GetLastErrorをHRESULTに加工して
それから例外を作る装備はないですか?
647:デフォルトの名無しさん
07/12/28 04:48:09
>>644
そうですね。
Buffers のサンプル
URLリンク(msdn2.microsoft.com)(VS.80).aspx
の方でも同じようなやり方で、できるとありました。
どもです。
648:デフォルトの名無しさん
07/12/28 11:10:04
throw Marshal.GetExceptionForHR(Marshal.GetLastWin32Error());
649:デフォルトの名無しさん
07/12/28 11:18:20
LastWin32ErrorはHRESULTじゃないと言うに
GetHRForLastWin32Error
650:デフォルトの名無しさん
07/12/28 21:48:02
>>643
すげぇ才能だなww
逆にそれは見てみたい
>上達しない才能
651:デフォルトの名無しさん
07/12/28 22:17:45
論理的思考を拒否する人。
感情や直感が最優先の人。
自分の思いが総て正しいと思う人。(これはちょっと微妙か
実際居ると思うぞ。
652:デフォルトの名無しさん
07/12/28 22:19:38
急に何の話してるの?
653:デフォルトの名無しさん
07/12/29 08:03:35
>>650
俺いっぱい見てきてるよ・・・
654:デフォルトの名無しさん
08/01/09 05:55:52
URLリンク(imepita.jp)
655:デフォルトの名無しさん
08/01/13 23:45:17
da.Fill(dt)で取得したデータの内容をColumnNameでダイレクトに取得したいのですが
foreach以外に良い方法があるでしょうか?
656:デフォルトの名無しさん
08/01/13 23:57:24
URLリンク(www.atmarkit.co.jp)
657:655
08/01/14 00:05:49
>>656
理解が足りてませんでした・・
ありがとうございました
658:デフォルトの名無しさん
08/01/14 12:01:58
質問です
SizeChangedイベントをハンドルしてInvalidateを呼び出して画面全体を再描画したいんですが
領域全体が無効化→背景色クリアが入ってしまい、その後に全体を書くので偉くちらつきます。
で、この背景色クリアを無効化したいんですが、どのようにしたら良いですか?
背景色クリアに関してはWinAPIで叩いてたころは確か
ブラシを入れないとか、Invalidateの引数でRedrawするかしないかを指定できたと思うんですが…
よろしくお願いします。
659:デフォルトの名無しさん
08/01/14 12:13:19
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer,true);
と設定してダブルバッファリングすればいい
660:デフォルトの名無しさん
08/01/14 12:18:12
いやダブルバッファするかどうかは別問題でしょ。
>>658についてはResizeRedrawを有効にすればOKだと思うけど。
なんか>>658はあまりよくわかってなさそうだから一応補足すると、
これは要するにいちいちInvalidateしなくてよくなるって意味ね。
661:デフォルトの名無しさん
08/01/14 12:21:52
用途によって違うだろ
662:658
08/01/14 13:24:59
>>660
ResizeRedraw=trueにしても駄目でした。
おっしゃるとおり、いちいちInvalidateしなくてよくなるんですが、
単に勝手にInvalidateを呼び出しているだけみたいですね。
結局ですが、多分.NETのInvalidateの実装が
InvalidateRect( m_hWnd, NULL, TRUE );
みたいにされちゃってるんだと思ったんで、
直接user32.dllのInvalidateRectをDllImportして
bEraseをFALSEで呼び出したらブラシのクリアが無くなりました。
ご返信していただいた方ありがとうございました。
663:デフォルトの名無しさん
08/01/14 15:07:20
>>658
なにもしない OnPaintBackground は?
664:658
08/01/14 16:11:11
>>663
.NET的にはそれが一番よさそうな実装方法ですね…
ありがとうございます。そちらのコードに修正します。
665:デフォルトの名無しさん
08/01/15 11:05:58
WM_ERASEBKGND をいじった事なかったのか
666:デフォルトの名無しさん
08/01/17 07:35:08
すみませんが教えてください。C#とC++は、.NETで行っても処理速度は
あくまでも同じなのでしょうか?それとも、C++の方が圧倒的に早いのでしょうか?
C#とVBでは処理速度は描画も含めて同じだと思いますが、C++では直接
Win32APIで動かしていて高速動作するようになっているのでしょうか?
よろしくお願いします。
667:デフォルトの名無しさん
08/01/17 08:43:03
>>666
.NETが扱えるのはC++ではなくC++/CLI
C++/CLIが吐き出す中間コードはC#,VBと同じ
よって速度は同じ
668:デフォルトの名無しさん
08/01/17 09:33:13
C++/CLIはネイティブコードを埋め込める
669:デフォルトの名無しさん
08/01/17 11:07:18
>>668
C#もunmanaged使えば同じじゃないの?
670:デフォルトの名無しさん
08/01/17 11:18:37
同じ内容を書けば同じ速さになるはずということで
671:666
08/01/17 11:21:15
>>667-669
解説ありがとうございます。
たとえば、Windowsのエクスプローラはフォルダのフォーカス移動に伴う
ファイル表示でもものすごく高速に実行され、画面の描画もめちゃくちゃ
瞬時に行われ、ノートPCなどの描画が比較的遅いPCですと.NETの
Formアプリケーションなどとはけっこう速度差を体感します。レインボウ
のような現象も顕著に出ていて、ネイティブのアプリケーションとでは
ものすごく遅い感じが否めませんでした。
こうした差は、C++/CLIを使って、すべてをネイティブコードにコンパイル
してしまうと、たとえばエクスプローラ並みにすばらしく高速で動くように
体感できるようになるということなのでしょうか。(長くてすみません)
672:デフォルトの名無しさん
08/01/17 11:22:25
>>669
C#でunmanagedは使えないだろ
673:デフォルトの名無しさん
08/01/17 11:27:32
>>671
それはWindows.Formsが遅いだけ。
C++/CLIを使っても同じGUIライブラリを使う限り、もっさりするのは換わらない
674:デフォルトの名無しさん
08/01/17 11:33:04
>>673
なるほど、そうだったんですか。
ということは、C++/CLIで、Formsを使わずに何かネイティブのGUI処理をする
方法を使う(MFCでしょうか、よくは知らないのですが)などすれば、
エクスプローラ並みの高速処理が実現できるということでしょうか、
そしてそういうことはC#やVBでは実現できないと・・・、この辺がよくわかりません、
よろしくお願いします。
675:デフォルトの名無しさん
08/01/17 12:04:06
>>674
C# と GDI+ でも、あんまり Forms の世話にならないで自前で描画する
大型のコントロール等書いて使えばそこそこ高速になるよ。
下手に Forms で UI 書くより、ブラウザ埋め込んで Ajax でもした方が
高速になるケースもあるだろうし (ブラウザはレンダリングが結構速いから・・・)。
>この辺がよくわかりません
「ネイティブ」の意味が分からないということ?
676:デフォルトの名無しさん
08/01/17 12:10:02
Forms はなんであんなに重いのかね?
677:デフォルトの名無しさん
08/01/17 12:37:29
>>675
たびたびすみません。
>自前で描画する大型のコントロール等書いて
これは要するに、Paintイベントなどでの処理を描くということでしょうか。
>「ネイティブ」の意味が分からないということ?
「自前で描画する大型のコントロール等」という場合に、そこに.NETFramework
のクラスで描画をするだけでよくて、いちいちAPIを使うことなく高速化できるという
ことでしょうか?
678:666
08/01/17 12:41:00
名前入れるの忘れました。
そのようにしてコントロールを高速化した場合、たとえば現在Form の右下を
つまんでリサイズすると、Formのサイズ変更がやたらと遅くてボーダーの移動が
ぱらぱらと目に見えて動きます。こういったことも高速になるでしょうか?
679:デフォルトの名無しさん
08/01/17 12:44:57
GDIのAPIを直接叩くGraphicsクラスみたいなのは作ったことあるぜ
680:デフォルトの名無しさん
08/01/17 12:45:19
たとえばTextBoxを100個WinFormに貼り付けて使うより、
普段はTextBoxの「ハリボテ」を100個描画しておいてユーザーがマウスポインタで
クリックしたときだけ本物のTextBoxを該当位置にひとつだけ表示するような
コントロールを自作した方が早いってことじゃない?
でもこの手のコントロールの自作ってかなり面倒なんだよね。
情報すくないから手探りでいろいろ調べる必要があったり。
681:デフォルトの名無しさん
08/01/17 12:54:09
>>678
そう。
同時にOnPaintBackgroundで一瞬背景色で塗られるなどのUI 的に不快な動作も直す。
Panel を Dock させてあれこれやるより、OnSizeChanged 等で自前でレイアウトする方が速いし。
ただ GDI+ の遅さは非力なPCでは如何ともしがたいところもあるので、低スペックPCでも
超軽快に動くようにしたいなら C++ でネイティブでやるより無いと思う。
682:666
08/01/17 13:03:35
>>679-681
いろいろご指導ありがとうございます!
>>680
>同時にOnPaintBackgroundで一瞬背景色で塗られるなどのUI 的に不快な動作も直す。
あの動きも改善方法があったんですね、うれしいです。自分でも実装できる
かどうかわかりませんが勉強してみます!
>Panel を Dock させてあれこれやるより、OnSizeChanged 等で自前でレイアウトする方が速いし。
このPanelのDockやDocking機能のコントロ-ルは使っていました。
そうすることなく自分でコントロールの移動やリサイズをさせた方が早い
のですね。いまからそれやると大変かとも思いましたが、今後の参考に致します!
勉強になります、ご指導ありがとうございました!!
683:666
08/01/17 13:07:33
>>682(訂正)
すみませんリンク先まちがえました。訂正>>680→>>681
>ただ GDI+ の遅さは非力なPCでは如何ともしがたいところもあるので、低スペックPCでも
>超軽快に動くようにしたいなら C++ でネイティブでやるより無いと思う。
この件も頭に置いておきます。どうもでした!
684:デフォルトの名無しさん
08/01/17 23:54:33
フォルダのタイムスタンプについて教えてください。サブフォルダを追加してそこに
ファイルを作成して編集したりしてあるフォルダの中身が変化していましたが、
なぜかそのフォルダのタイムスタンプがその変更よりも前のままになっていました。
こうならずに、更新日時が反映されている場合もありました。これは何か更新される
ために必要な条件のようなものがあってそれが異なっているためなのでしょうか?
685:デフォルトの名無しさん
08/01/18 10:40:29
そりゃディレクトリエントリが更新された時刻だもの
686:684
08/01/18 15:57:46
>>685
そうだったのですか、ということは内部のサブフォルダ内の何かのファイルが変更された
としてもそれの時刻は繁栄されないのですね。わかりました。
すみませんがもう一つお願いします。
アプリケーションのアイコンを探すときにレジストリ内のDefaultIconキーの値のところに、
次のようにマイナスの番号が入っている場合、shell32.dllのファイルの中の番号としては
使えないのでしょうか?kernel32.dllの LoadLibraryExA で検索してアイコンを見つける
ときにも使えるのでしょうか?
HKEY_CLASSES_ROOT\VBSFile\DefaultIcon\"(default)" = "shell32.dll,-298"
HKEY_CLASSES_ROOT\txtfile\DefaultIcon\"(default)" = "shell32.dll,-16"
(これでサウンドの場合の C:\WINDOWS\system32\wmploc.dll,-734 の-734 を
そのまま使ったところ、音符マークのアイコンとは別のものが来たのでした)
687:デフォルトの名無しさん
08/01/18 16:11:30
わからんが、wmploc.dllを開いてみたら 734 に音符のアイコン入ってたけど。
マイナスは別の意味を持たせてるのかも?
688:684
08/01/18 17:24:42
>>687
あ、すみませんでした、一つ間違いがあることに気がつきました。とはいうものの、
プラスとしてやってみたもののそれでも取ることができませんでした。なんだろう、
映画のフイルムの絵のようなアイコンなのですが・・・。まずは、そのアイコンの
ビューワを探して見てみます、ありがとうございました。
689:デフォルトの名無しさん
08/01/18 17:34:14
アイコンはVisualStudioでDLL読んでみたんだけど、
EEだとリソースは無理か
690:デフォルトの名無しさん
08/01/18 18:43:00
>>686-687
0以上の値は、0からの連番で何個目という指定(シェルのアイコン指定のダイアログの順番)。
負の値は、絶対値がリソースIDを表すという指定。
691:デフォルトの名無しさん
08/01/18 19:15:16
>>690
あーそうだったのですか、わかりました。それでもう一度やってみます、
どうもありがとうございました!!
692:691
08/01/18 21:20:38
>>689-690
アイコンの取得に成功しました、ありがとうございました。助かりました!!
693:デフォルトの名無しさん
08/01/19 22:18:09
int / int で小数点が出てこないのはなんでだぜ?
694:デフォルトの名無しさん
08/01/19 22:19:29
その方が速いから
695:デフォルトの名無しさん
08/01/19 23:10:17
>>693
int/intの結果はintになると規格で決まってるから
696:デフォルトの名無しさん
08/01/19 23:11:29
LOG4NETで設定ファイルを使わずに、ソース上で出力先やAppenderの指定をできる方法ってありますか?
クライアントアプリケーションとして扱う場合に、ユーザに勝手に設定を弄られたくないから
LogManagerでApp.Configの設定を読むような方式にはしたくないのです。
ログ出力クラスを自作したほうが早いですかね?
697:デフォルトの名無しさん
08/01/19 23:49:42
そのまんまコードで初期化すりゃいいんでは?
698:696
08/01/20 03:49:16
>697
ログメッセージを出力するためのILogインタフェースを持った
インスタンスを取得するには、LogManagerクラスから取得する
しかないようなんですよね。
LogManagerクラスからはRepositoryやAppenderを取得できても、
設定はできないので、どうしたらいいのか分かりません。
RollingFileAppender appender = new RollingFileAppender();
appender.AppendToFile = true;
appender.File = @"C:\test.log";
appender.Layout = new PatternLayout("%d %5p %c{2} - %m%n");
RootLogger root = new RootLogger(Level.Debug);
root.AddAppender(appender);
root.Log(Level.Debug,"tset", new Exception());
以上のコードでログが出ないか期待しましたがダメでした...
699:デフォルトの名無しさん
08/01/20 04:18:03
>698
log4netのソースを直に書き換えて埋め込んじゃえばいいんじゃない?
700:デフォルトの名無しさん
08/01/20 08:13:51
>>699 あほですか?
701:デフォルトの名無しさん
08/01/20 20:53:54
アホちゃいまんねん
702:デフォルトの名無しさん
08/01/20 20:59:58
パーでんねん
703:698
08/01/20 23:56:26
>699
なるべくOSSのモジュールはソース変更したくないんですよ。
ライセンスに従って公開しなきゃいけなくなっちゃうし。
公開するだけならまだ変更部分だけで済みそうですが、
公開するための環境を維持しておかなきゃいけなかったり、面倒です。
704:デフォルトの名無しさん
08/01/21 00:16:31
>703
log4netはアパッチライセンスだから融通が利くよ。
705:デフォルトの名無しさん
08/01/25 13:26:49
ParallelFXのParallel.Forで実行されるスレッド数はいじることができますか?
706:デフォルトの名無しさん
08/01/25 23:21:36
>>705
System.Threading.Tasks.TaskManagerPolicy
のコンストラクタで、minThreads, idealThreads, maxThreads を指定可能。
707:デフォルトの名無しさん
08/01/29 21:49:38
FlowLayoutPanelにコントロールを追加しているのですが、
下記のようなコードだと一瞬ちらつきます。
FlowLayoutPanelにBeginUpdate、EndUpdateのような描画を一時止めるようなメソッドはないでしょうか?
Panel.BeginUpdate;←のようなものありませんか?
Panel.Controls.Clear();←ここでクリアしてる為、一瞬まっさらになり、ちらつく
for (int i = 0; i < max; i++)
{
Panel.Controls.Add( コントロール );
}
Panel.EndUpdate;←のようなものありませんか?
708:デフォルトの名無しさん
08/01/29 22:28:31
節穴?
SuspendLayout/ResumeLayout
709:デフォルトの名無しさん
08/01/29 23:21:31
PictureBoxの非同期読み込みみたいに、画像の読み込みを途中でキャンセルしたり
読み込み状況をモニターできるようにしたいです。
Image.FromFile等ではそのようなコールバックを指定できないようです。
どうやればいいのでしょうか?
710:デフォルトの名無しさん
08/01/29 23:26:44
ためしもしないで適当に書くと
Image.FromSteamに非同期Streamを渡せばいいんじゃね
711:デフォルトの名無しさん
08/01/30 00:02:26
>>710
Streamを自分で実装してReadの中でゴニョゴニョ、ってことでしょうか。
そういうやり方しかないんかなあ。
712:デフォルトの名無しさん
08/01/30 06:00:26
画像のデコード程度、キャンセルしたくなるほどの時間もかからんと思うが
713:デフォルトの名無しさん
08/01/30 17:05:46
Image.FromStreamするとImageが生きてる間はStreamも生きてなきゃダメなのか…
と思ってKB309482見て試してみたけど、アニメーションGIFだとダメだった…
714:デフォルトの名無しさん
08/01/30 19:33:03
DataSetを使ってレコード単位にDBを操作する場合に、
DataSet.DataTable.Rows[i]["カラム名"]
のような記述が必要になりますよね。
(DataGridのDataSourceを使えばそんな意識はしないですが)
この、文字列でカラム名を指定するのがイマイチだと思うのです。
文字列だからインテリセンスも効かないですし、打ち間違えの可能性も。
カラム名を入れたenumを作れば解決できるような気もしますが、
DataSetの中に既に定義があるのですから、それを流用できないでしょうか?
要するに、カラムをカラム名で指定する際に、intと文字列以外の方法が
あるでしょうか?
715:デフォルトの名無しさん
08/01/30 20:12:22
>>714
DataSet継承してカラム名をプロパティにしたクラスを作る。
VisualStudioでテーブルから自動生成すればできるだろ。
716:デフォルトの名無しさん
08/01/31 09:26:24
>>713
一旦 MemoryStream に読み込んでそっから Image 作ればいいよ
717:714
08/01/31 10:22:15
>>715
どうも有り難うございます。
しばらく考えているんですけれど、どうもイメージが浮かばないです。
DataSetを継承しても、汎用的なものは出来ないように思うのですが。
VSで自動生成と言う意味は、VSのデザイナで自動生成されたDataSetの
ソースを何らかの方法で解析して、カラム名を格納するという意味なのでしょうか‥‥。
718:デフォルトの名無しさん
08/01/31 13:51:08
>>717
厳密に型指定されたDataSetでググる。
DataSetをそのまま使うならカラムやその型の情報はクエリーの応答があるまでわからない。
その場合はカラム名の文字列か序数で指定するしかないな。
719:714
08/01/31 18:19:17
>>718
なるほど、DataSetを作る段階で別の種類のDataSetだったのですね。
どうも有り難うございます。調べてみます。
720:デフォルトの名無しさん
08/01/31 22:15:17
DBと接続して使うんじゃなく、dataset単独で簡易なデータベースとして使うなら、
プロジェクトに新規でxsd(スキーマ)を追加してテーブルやリレーション、キーを定義して、
いっぺんコンパイルすると、ツールボックスにdatasetを継承したdataset1(xsdファイルで定義した
名前による)コンポーネントが現れる。フォームのデザイナでこいつをD&Dしてやると型付けの
あるdatasetとして使えるよ。
721:デフォルトの名無しさん
08/02/01 02:47:42
表計算ソフトの=REPT(x;y)を模倣した自作関数をfprintfの第3引数以降に使う場合です。
rept(int x,int y)の記述にはfor,while,do~whileのどれが適任でしょう?
回数を指定するyは0の場合もあります。
722:デフォルトの名無しさん
08/02/01 15:04:16
それは本当にC#の質問ですか
723:デフォルトの名無しさん
08/02/02 09:11:50
ウィンドウを持ったアプリケーションが起動されるのを
監視することはできますか?
724:デフォルトの名無しさん
08/02/02 12:20:47
できます。
725:723
08/02/02 13:09:26
>>724
やり方か調べるためのキーワードを教えていただけませんか?
726:デフォルトの名無しさん
08/02/02 13:19:43
findwindow
727:デフォルトの名無しさん
08/02/02 22:26:37
>712
画像のデコードがそこまで重いことはまずないと思うが、
ファイルアクセスが妙に遅延することはあると思うよ。
ノートンとかウイルスバスターがファイルアクセスに
むやみやたらに割り込むから信じられないくらい応答が返ってこないことがあったり。
728:デフォルトの名無しさん
08/02/02 22:51:34
や、それなら普通に事前にMemoryStreamに(非同期で)読んどけば良いじゃん?
729:デフォルトの名無しさん
08/02/02 22:59:01
画像がWeb上とかにあって数KBダウンロード毎に描画するんならキャンセルとかあってもいいかもしれんが、
既にハードディスクあるものを表示するだけで、わざわざキャンセルとか普通やらないな
730:デフォルトの名無しさん
08/02/05 20:08:01
.NETでATLのCComPtrみたいな
タイプライブラリのないInterfaceを扱う仕組みはあるですか?
731:デフォルトの名無しさん
08/02/05 20:26:03
Managed DirectX
732:デフォルトの名無しさん
08/02/05 21:38:05
自前でinterface再定義はできる Guid属性とかComImport属性とか使う
IDispatchならType.InvokeMemberでレイトバインディングもできる
733:デフォルトの名無しさん
08/02/05 23:35:42
std::exceptionにUNICODE入れると文字が壊れますか?
734:デフォルトの名無しさん
08/02/05 23:37:43
スレ違い
735:デフォルトの名無しさん
08/02/13 00:08:55
すみません、よろしければ
スレリンク(tech板:182-183番)
について教えてください。何卒よろしくお願いします。
736:デフォルトの名無しさん
08/02/13 00:36:45
その質問には答えるなということか。
了解した。
737:デフォルトの名無しさん
08/02/13 11:45:38
IPCをチャンネルに使ったリモーティングを使って、同一PC内でプロセス間通信を
しているのですが、厳密署名したら少し動かなくなりました。
Clinet.exeとServer.exeとRemote.dllの3つのプロジェクトからなるソリューションです。
それぞれのアセンブリに同一のsnkファイルで署名したところ、
Client.exeが、Server.exeからのコールバックのみを受け取れなくなりました。
クライアントからサーバへのメッセージングは今までどおりに出来ています。
こういうモノなのでしょうか?どなたかご存知の方がいらしたら、宜しくお願いします。
738:737
08/02/13 13:33:40
IpcChannel channel = new IpcChannel(properties,
null, new BinaryServerFormatterSinkProvider(properties, null));
クライアントとサービスの両方を、上記の書き方で初期化したら出来ました。
739:デフォルトの名無しさん
08/02/13 21:14:32
SqlTransactionのCommit()のタイムアウト時間を変更したいのですが
どこで設定すればいいのでしょうか?
サーバーの負荷がでかいときにCommitのタイムアウト時間だけ短くてタイムアウトしてしまいます。
740:デフォルトの名無しさん
08/02/14 09:36:26
start tran somewhere here
SqlCommand cmd = new SqlCommand(mySqlCommand, conn);
cmd.CommandTimeout = 0; // NO TIMEOUT
cmd.ExecuteNonQuery();
commit here
741:デフォルトの名無しさん
08/02/14 09:58:26
>740
それで変わるのはExecuteNonQuery()のタイムアウト時間だけで
Commit()のタイムアウト時間は変わらないから困ってるんだよ。
742:デフォルトの名無しさん
08/02/14 10:23:36
なるほど。
しかし、"BEGIN TRANSACTION"と"COMMIT"をExecuteNonQueryで実行したら?
743:デフォルトの名無しさん
08/02/14 22:05:21
>742
確かにSqlTransactionのCommitもExecuteNonQueryでCOMMIT叩いてるだけにしか見えないのでそれでもいいかなとか思ってました…。
やってみたらそれで問題なく動いてしまったし。
SqlTransactionの存在意義がなくなってしまうけど仕方がないか。
744:デフォルトの名無しさん
08/02/26 18:18:25
マクロメディアFlashの
タイムラインみたいなウィンドウ作りたいけど
やっぱり自作しなきゃだめかな
なんか楽そうな方法ありませんか?
745:デフォルトの名無しさん
08/02/27 00:20:43
最近どっかで見たな
746:デフォルトの名無しさん
08/02/28 13:04:29
NiVEとか?
747:747
08/02/29 01:44:05
axWindowsMediaPlayerを使ってオーディオファイルを再生しています。
ListBoxにプレイリストの内容を表示しようと
this.listBox1.SuspendLayout();
for(int i = 0; i < wmp.currentPlaylist.count; i++) {
this.listBox1.Items.Add(wmp.currentPlaylist.get_Item(i));
}
として、ListBoxにプレイリストの内容を表示しました。
更に再生中のMediaを選択状態にしたく、続けて
for(int i = 0; i < this.listBox1.Items.Count; i++) {
if(this.listBox1.Items[i].Equals(wmp.Ctlcontrols.currentItem)) {
this.listBox1.SelectedIndex = i;
}
}
this.listBox1.ResumeLayout();
としました。しかし、再生中のMediaが選択されません。
インターフェース同士の比較が上手くいかないからなのかなと思っています。
上手くいく方法がありましたら教えて下さい。もう3時間位悩んでいます。
よろしくお願いします。
748:747
08/02/29 04:47:58
age忘れてました。まだ悩んでます。助けて下さい。orz
749:デフォルトの名無しさん
08/02/29 16:00:56
そもそも、PlayList[]の型とcurrentItemの型が違う。
750:747
08/02/29 16:37:55
wmp.currentPlaylist.get_Item(i)
も
wmp.Ctlcontrols.currentItem
もWMPLib.IWMPMediaかと思ったのですが、違うのでしょうか?
for(int i = 0; i < this.listBox1.Items.Count; i++) {
if(((WMPLib.IWMPMedia)(this.listBox1.Items[i])).Equals(wmp.Ctlcontrols.currentItem)) {
this.listBox1.SelectedIndex = i;
}
}
this.listBox1.ResumeLayout();
とキャストしても比較出来てないみたいだし、どうしましょ…orz
751:デフォルトの名無しさん
08/02/29 21:39:35
そもそもオブジェクトを比較してどうすんだ
メディアプレイヤーいぢったことないけども、普通に考えて実体はCOMの先だろう
何らかのインスタンスを識別するIDとかがあるだろうからそれで比較汁
752:デフォルトの名無しさん
08/02/29 21:49:27
>>751
何らかのインスタンスを識別するID
o...rz
753:747
08/02/29 22:35:46
解決しますた。
get_isIdenticalの戻り値と引数を見て、
もしかして…と思って試したら当たりですた。
this.listBox1.SuspendLayout();
for(int i = 0; i < wmp.currentPlaylist.count; i++) {
WMPLib.IWMPMedia media = wmp.currentPlaylist.get_Item(i);
int j = this.listBox1.Items.Add(media);
if(wmp.Ctlcontrols.currentItem.get_isIdentical(media)) {
this.listBox1.SelectedIndex = j;
}
}
this.listBox1.ResumeLayout();
754:デフォルトの名無しさん
08/03/05 19:03:45
listViewに大量のデータを設定していると
スクロールした時とか、再描画がとてつもなく重いんです。
プロパティとかで回避方法ってありますか?
また、セル表示で別のコントロールでお勧めのやつってありますか?
755:デフォルトの名無しさん
08/03/05 19:22:28
VirtualMode やや面倒だけどな
DataGridView
756:756
08/03/06 18:09:14
相談があります。
URLリンク(forums.fanatic.net.nz)
のCのコードを参考にしてC#で同じ事をしようとコードを書きました。
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace msnTest {
public partial class Form1 :Form {
private const int WM_COPYDATA = 0x004A;
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref COPYDATASTRUCT lParam);
[StructLayout(LayoutKind.Sequential)]
private struct COPYDATASTRUCT {
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}
}
続く
757:756
08/03/06 18:13:37
COPYDATASTRUCT sendData = new COPYDATASTRUCT();
sendData.dwData = (IntPtr)0x547;
sendData.lpData = songDataPtr;
sendData.cbData = Marshal.SizeOf(songData);
IntPtr msnHandle = FindWindow("MsnMsgrUIManager", null);
MessageBox.Show(SendMessage(msnHandle, WM_COPYDATA, IntPtr.Zero, ref sendData).ToString());
Marshal.FreeHGlobal(songDataPtr);
}
}
}
758:756
08/03/06 18:16:53
あれ、なぜか書けない…。間が飛んでる…
759:デフォルトの名無しさん
08/03/06 22:39:53
そのまま放置とはどういう了見だ
760:デフォルトの名無しさん
08/03/07 12:40:24
ワロタ
761:756
08/03/08 20:39:33
すみません。何か突然書き込めなくなったので…。
解決しました。リンク先のCのソースは送信データが間違っていて、
Cのままコンパイルしても動かないものでした。
正解が
URLリンク(yuuan.net)
にありました。
762:デフォルトの名無しさん
08/03/10 03:11:16
しつもんです。
Graphics g = pictureBox1.CreateGraphics();
mypen = new Pen(Color.White);
fillbrush = new SolidBrush(Color.Black);
g.FillEllipse(fillbrush, 10, 140, 400, 400);
g.DrawEllipse(mypen, 10, 140, 400, 400);
pictureBox1.BackColor = Color.Red;
とやると、せっかくかいた円が消えてしまうのですが、
どうすれば消えないでかけるのでしょうか?
背景の色の設定と、円を書く順番を変えても意味ありませんでした。
763:デフォルトの名無しさん
08/03/10 03:23:50
>Graphics g = pictureBox1.CreateGraphics();
なにこれ
764:デフォルトの名無しさん
08/03/10 03:27:44
>>763
pictureBox1に円を書きたかったのでこうしたんですけれど、
必要ないんですか?
765:デフォルトの名無しさん
08/03/10 03:35:20
コントロールを継承したクラスでOnPaintメソッドをオーバライドする
CreateGraphics()じゃなくてOnPaintに渡されるe.GraphicsのGraphicsで描画する
766:デフォルトの名無しさん
08/03/10 03:44:49
>>765
???
すいません、もう少し分かりやすく説明してもらえませんか?
767:デフォルトの名無しさん
08/03/10 03:53:17
おいおい・・・
768:デフォルトの名無しさん
08/03/10 04:18:29
人間やめろ。
769:デフォルトの名無しさん
08/03/10 05:14:01
>>766
君にはまだ早い
C#の基礎を理解してから来なさい
770:デフォルトの名無しさん
08/03/10 11:55:04
>>768
>>769
「現在のウィンドウのメッセージの存続期間だけ有効です。」
を具体的に説明してくれ。
771:デフォルトの名無しさん
08/03/10 12:59:21
おいおい・・・
772:デフォルトの名無しさん
08/03/10 13:13:41
人間やめろ。
773:デフォルトの名無しさん
08/03/10 14:18:21
>>770
君にはまだ早い
C#の基礎を理解してから来なさい
774:デフォルトの名無しさん
08/03/10 14:48:31
ここ、もう相談スレじゃないよな…
775:デフォルトの名無しさん
08/03/10 17:23:26
本スレ行けよ
776:無知な人間
08/03/10 17:34:46
WinXPのC#.NET2003での質問ですが、
DDLのChangedで動的に選択したインデックスが上手く取得できません
どうしたらよろしいでしょうか?
777:デフォルトの名無しさん
08/03/10 18:11:18
ファイト
778:デフォルトの名無しさん
08/03/10 18:45:10
笑えばいいと思うよ
779:デフォルトの名無しさん
08/03/11 14:30:22
何、このスレ
780:デフォルトの名無しさん
08/03/13 10:59:40
垂直同期をとるためにVsync待ちをしたいと思い調べたところ
C++では
IDirectDraw::WaitForVerticalBlank
IDirectDraw::GetVerticalBlankStatus
IDirentDraw::GetScanLine
などを使うようなのですが、
これらの機能をC#で使用する方法はあるでしょうか?
また、C#で垂直同期をとる手法として一般的なものがあれば
教えていただけないでしょうか
781:デフォルトの名無しさん
08/03/13 12:57:50
Managed DirectX
782:デフォルトの名無しさん
08/03/13 21:40:54
ずいぶん懐かしい言葉だなー。
垂直同期待ちって。
783:デフォルトの名無しさん
08/03/13 21:42:50
液晶全盛、リフレッシュレートいじり放題のこのご時勢にVSync待ちはないだろ
784:デフォルトの名無しさん
08/03/13 21:54:57
へーCRTのリフレッシュレートが「いじり放題」じゃなかったなんて知らなかったよw
むしろ液晶の方がそういう面では不自由なデバイスのはずだと思ってたけど
785:デフォルトの名無しさん
08/03/13 22:43:07
液晶のリフレッシュレートが弄りやすいかどうかなんて話してないんだが
786:デフォルトの名無しさん
08/03/13 23:26:20
へーじゃあ「どんな話」をするつもりだったのかとっくり語ってもらおうじゃないの。
いやまあできないなら無理すんなよw
787:デフォルトの名無しさん
08/03/13 23:51:20
液晶全盛 かつ リフレッシュレートいじり放題という意味で、
液晶全盛 だから リフレッシュレートいじり放題という解釈ではないということだと思う。
788:783
08/03/14 00:07:04
おまえら俺の言葉が足りなくて悪かった
言いたい事は>>787さんのいう通りだ
おやすみ
789:デフォルトの名無しさん
08/03/14 01:33:35
いや普通はそう解釈するよ
揚げ足を取ろうとするなら別だけど
790:デフォルトの名無しさん
08/03/14 04:35:47
>>781
解決しました
有り難うございました
791:デフォルトの名無しさん
08/03/14 08:04:13
>>789
君も頭悪いなw
>>788は図らずも自分を擁護できる発言をする奴がいたからそれを利用してるだけ。
そんなことねえだろ、と言いたいのなら、>>783の意図が>>787の通りだとして(それでも全然かまわないが)
「なぜ」「このご時勢にVSync待ちはない」という結論に繋がるのか説明してみな。
792:デフォルトの名無しさん
08/03/14 08:10:25
必ずいい方向に脳内補完する人と必ず悪い方向に脳内補完する人が
この世の中にはいるんだな。
なぜ分かれるかというと性格がいいか悪いかなんだな。
793:デフォルトの名無しさん
08/03/14 08:37:00
>>788は利用してるのか?
794:デフォルトの名無しさん
08/03/14 11:40:10
Vistaは垂直同期取ってるんじゃなかったっけ
795:デフォルトの名無しさん
08/03/14 12:21:13
もうそろそろカスはほっとこうぜ
796:デフォルトの名無しさん
08/03/14 18:29:31
>>795
Vistaのことをひどく言うのはやめてあげてください。
797:デフォルトの名無しさん
08/03/14 18:34:44
Vistaは、悪くない
悪いのは、サンプルプログラムのフォント関連部分と>>791の頭
798:デフォルトの名無しさん
08/03/14 18:38:22
まあ>>797がそういう「負け惜しみ」はみっともないと思う程度の恥の意識もない奴だ、
というのはよくわかったよw
799:デフォルトの名無しさん
08/03/14 18:39:43
うわ、反応早ww
800:デフォルトの名無しさん
08/03/14 18:50:14
反応早かったら何?
っていうか、どうしてこの手の馬鹿ってのは自分の言葉を自分に適用しようとしないのかねw
一言で言えば恥を知らないからだろうけどさ。
そんなことはどうでもいいから>>791に書いた疑問を説明してみてよ早く。
801:783
08/03/14 20:59:24
ちょっとおまえら俺の事はもうスルーしてC#の話ししてくださいホントお願いします
802:デフォルトの名無しさん
08/03/14 21:22:54
C#の話はC#スレでやりましょう
803:デフォルトの名無しさん
08/03/15 11:31:51
テアリング避けでVsync待ちしたいこともあるけど、
漏れのやり方が悪いのかビジーループになるんで非ゲームでは
あんまり使いたくないな・・・
804:デフォルトの名無しさん
08/03/15 18:57:26
もうリフレッシュレート論争やめようや
805:デフォルトの名無しさん
08/03/15 19:20:24
続けたい奴は続けていいよ
どうせ糞スレだし
806:デフォルトの名無しさん
08/03/15 19:26:10
中途半端に機能してるから紛らわしいw
807:デフォルトの名無しさん
08/03/19 17:02:16
>>784で書いた自分の勘違いを認めたくないだけだろ
こういうバカは何言っても食いついてくるからほっとけばよろし
808:デフォルトの名無しさん
08/03/19 17:35:42
ここで質問ですよ
リッチテキストボックスに画像貼り付けたり、背景を自前で描画したりやりたいんですが
WndProcのWM_PAINTを捕らえても文字の上に描画されてしまいます
文字の下に描画できませんか?
809:デフォルトの名無しさん
08/03/19 18:48:37
つWPF
810:デフォルトの名無しさん
08/03/19 19:44:09
>>809製品?
811:デフォルトの名無しさん
08/03/19 21:14:14
ググレ押忍
812:デフォルトの名無しさん
08/03/19 21:38:24
>>807
それって>>783のことだと思うけどね。
こういうバカ?
それって君とか>>783みたいなバカのこと?w
813:デフォルトの名無しさん
08/03/19 21:39:32
>>808
そんなの簡単だろ・・・と思ってやってみると意外とできないねこれ
814:デフォルトの名無しさん
08/03/21 11:21:46
Func<T,TResult>に共通化されつつある今、
Converter<T>やPredicate<T>などを使う意味はあるのでしょうか?
815:デフォルトの名無しさん
08/03/21 11:22:30
意味を明確にできる
816:デフォルトの名無しさん
08/03/21 13:13:34
>>814
前からいちいち定義するのがいやでDelegate<Result,Param1,Param2>とか普通のメソッドの型の順番にあわせて使ってたんだが、
Funcniそのまま使えないんだよなぁ・・・どうしよう
817:デフォルトの名無しさん
08/03/23 20:49:21
DataGridViewでNullValueが設定されている列のセルの値を、プログ
ラムでDBNull.Valueに設定したとき、セルにNullValueの値を表示す
るにはどうしたらいいのですか?
MSDNライブラリには、DBNull.Valueを設定するだけではできないと書
いてあるけど...
セルの値がDBNull.Valueで、セルの表示はNullValueの値にする方法
を教えてください。
818:デフォルトの名無しさん
08/03/23 21:08:56
変換は行われないってのはDataSourceNullValueがDBNull.Valueで(ryってところの解説だぜ?
819:デフォルトの名無しさん
08/03/23 21:43:29
>>818
ありがとうございます。よく読んだらその通りでした。
その列の型はstringで、DataSourceNullValueを設定してないため、MSDNライブラリの
「DataSourceNullValue が DBNull.Value で、セルの ValueType が参照型」に見事に
合致してました。
DataSourceNullValueをstring.Emptyにして試してみます。
820:デフォルトの名無しさん
08/03/24 18:48:31
コレクション要素の変更をコレクションのオーナーに通知する方法
はないですか?オーナーをコレクションとしてラッピングするくらいしか
思いつかなくて。
821:デフォルトの名無しさん
08/03/24 18:55:21
その方法でいいんでない?
何か問題があるのか?
822:デフォルトの名無しさん
08/03/24 19:09:34
IBindingListでも実装しとけ
823:デフォルトの名無しさん
08/03/24 19:55:39
>>820
そういう用途だとObservableCollection使っておくといいんじゃないかね。
URLリンク(msdn2.microsoft.com)
824:デフォルトの名無しさん
08/04/01 14:57:38
配列の配列にアクセスする方法について教えていただけないでしょうか?
int data = new int[5][5];
に数値データが入っているとして、例えば全要素を表示させることを考えます。
その際あえて、ポインタを使ってアクセスすることを考えてます。
(ポインタなんて使わず、添字を使えばいいというのはわかっていますが、 あくまで、勉強のためということで。。。)
ポインタ(*p)を使う方法はわかるのですが(ソースの上半分)、ポインタのポインタ(**p)を使ったやり方が(ソース下半分)がわかりません。
ちなみに具体的にはソース中の<<<<data>>>の部分の書き方がわかりません。
(もしかしたら、ぜんぜん違うのかもしれませんが。。。) わかる方教えていただけないでしょうか?よろしくお願いします。m(_ _)m
//とりあえず うまくいった ポインタ を使う方法
fixed (int* p = &data[0][0]) {
for (int* px = p; px != p + 5; px++) {
for (int py = *px; py != *px + 5; py++)
Console.Write("<" + (int)&py + "," + py + ">");
Console.WriteLine();
}
}
//うまくいかない ポインタのポインタ を使う方法
fixed (int** p = <<<<data>>>) {
for (int** px = p; px != p + 5; px++) {
for (int* py = *px; py != *px + 5; py++)
Console.Write("<" + (int)py + "," + *py + ">");
Console.WriteLine();
}
}
825:デフォルトの名無しさん
08/04/01 16:01:03
>>824
ポインタなんて使わず、添字を使え
こうですか?
C#でわざわざポインタなんて勉強する価値無し
826:デフォルトの名無しさん
08/04/01 16:15:55
int*[] temp = new int*[data.Length];
for (int i = 0; i < temp.Length; i++) {
temp[i] = (int*)(void*)Marshal.UnsafeAddrOfPinnedArrayElement(data[i], 0);
}
fixed (int** p = temp) { ...
こうじゃね
本気でこんなの書く奴がいたら頭おかしい
827:デフォルトの名無しさん
08/04/01 18:05:17
>>824
上も全然ダメ。めちゃくちゃ。
コンパイル通りゃいいってもんじゃないよ・・・
828:デフォルトの名無しさん
08/04/01 20:47:06
そこまでやるならC++/CLI使えって話しだな
829:デフォルトの名無しさん
08/04/01 23:24:50
MSも unsafe 使えと推奨している。
URLリンク(www.microsoft.com)
830:デフォルトの名無しさん
08/04/01 23:36:12
その記事,すごく客観的で秀逸だよな
831:デフォルトの名無しさん
08/04/01 23:58:45
この記事には続きがあって、その記事とセットで初めて客観的と言える。
URLリンク(www.microsoft.com)
832:824
08/04/02 18:38:08
>>826
具体的なソースをご提示いただき、ありがとうございます。
>>827
上のソースも、ポインタの使い方に間違いがありますか。。。
一応、ほしい結果は得られたので、正しいかと思ったのですが。。。
>>828
もちろん、その通りですが、あくまで勉強ということで。。。。
>>829
この記事読みました。
実際に簡単なループをまわして何パターンかのソースで確認したところ、配列とポインタとでそんなに大きく処理時間がかわらないようです。
(逆にポインタが遅い場合もありました。。。)
ポインタのポインタは関数の文字列型の引数に使う程度で、やっぱりあまり出番がないんでしょうか。。。。
833:デフォルトの名無しさん
08/04/02 22:22:26
|┃三 / ̄\
|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \.
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
834:デフォルトの名無しさん
08/04/05 11:43:48
C++とC#の違いを教えて下され
835:デフォルトの名無しさん
08/04/05 12:00:13
全然違うので説明が逆に難しい。
836:デフォルトの名無しさん
08/04/05 12:09:15
JAVAとC#の違いを教えて下され
837:デフォルトの名無しさん
08/04/05 12:13:29
中途半端に似てるから鬱陶しい
特にJavaのジェネリックの糞さには発狂しそうになる
838:デフォルトの名無しさん
08/04/05 12:15:36
>>836
Sunが作ったのがJava。
Microsoftが作ったのがC#。
839:デフォルトの名無しさん
08/04/05 12:46:37
JavaとJ#の違いを教えて
840:デフォルトの名無しさん
08/04/05 12:54:39
JavaをWindowsに最適化したのがJ#
841:デフォルトの名無しさん
08/04/15 00:05:48
そーいや大学の研究科目でjavaを使ったGUIとかいうのがあったがどうにもなあ
「最終的には1000行を超えるコード~」とか「毎年大人気の科目」とか意味の分からん宣伝ばっかで萎えた。
そんなん個人でもうやってるって話だし。チームプログラミングとかを前面に押し出してたなら魅力があっただろうに
842:デフォルトの名無しさん
08/04/15 00:07:50
学部一回生向けの授業?
843:デフォルトの名無しさん
08/04/15 00:21:35
>>841
大学でチームプログラミングなんて教えれる先生がいないって。
844:デフォルトの名無しさん
08/04/15 02:23:01
>>842
三回生向けだからあれなわけで
一回生でそこまでやったらそれは別にいいと思うけどね
845:デフォルトの名無しさん
08/04/15 12:48:39
大学でチーム開発してもできるやつが全部やっちゃうから意味なし。
>>842
学部一回生でそんな高級なことしたら単位が全然でないじゃないか!
学部一回だとこんなもんだ。
・電源の入れ方、終了のしかた。
・エディタのつかいかた
・ファイル操作のしかた
・ほーむぺーじをつくろう
・一番最後に hello world(全角スペース入れてコンパイル通せないヤツ多発)
846:デフォルトの名無しさん
08/04/15 13:05:54
これは酷いww
847:デフォルトの名無しさん
08/04/15 13:11:51
>>845
卒論を二人で一つ書く大学もあるらしいからな
ありえる