C#, C♯, C#相談室 Part43

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part42
http://pc11.2ch.net/test/read.cgi/tech/1188099745/
2デフォルトの名無しさん:2007/09/27(木) 07:18:34
Visual C# 2005 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

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

MSDNライブラリ
http://msdn.microsoft.com/library/ja/

MSDN2
http://msdn2.microsoft.com/ja-jp/library/default.aspx

pinvoke.net: the interop wiki!
http://pinvoke.net/
3デフォルトの名無しさん:2007/09/27(木) 07:19:16
Visual C# Express Edition (無料)ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
http://msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
http://forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
http://vsug.jp/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
4デフォルトの名無しさん:2007/09/27(木) 07:20:00
5デフォルトの名無しさん:2007/09/27(木) 09:40:47
  ________ 
  (会長のメッセージ)
   ̄ ̄ ̄\| ̄ ̄ ̄ 
http://www.freewebs.com/premiumtv/?BEAT/?rTV=rimo.tv/en/ch/3802
6デフォルトの名無しさん:2007/09/27(木) 12:02:17
C#2005を使っています。Win32 APIを使いたいと思い、下記のコードを書きましたが、

>エラー CS0246: 型または名前空間名 'DllImport' が見つかりませんでした。
>using ディレクティブまたはアセンブリ参照が不足しています。

というエラーがでてしまい。コンパイルできません。何か特別な設定が必要なんで
しょうか?。他の部分は新規プロジェクトで、Windowsアプリケーションで作成した
素のままの状態です
何かアドバイスがあれば、よろしくお願いします。
-----以下コード-----
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace hoge
{
static class Program
{
[DllImport("user32.dll")]
public static extern int MessageBeep(uint uType);

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
MessageBeep(0);
}
}
}
7デフォルトの名無しさん:2007/09/27(木) 12:10:58
>>6
using System.Runtime.InteropServices;
8デフォルトの名無しさん:2007/09/27(木) 12:11:06
using System.Runtime.InteropServices;

DllImportの上で右クリック→競合の解決

ちなみにMessageBeep使わないでもSystem.Media.SystemSounds使える
9デフォルトの名無しさん:2007/09/27(木) 12:24:49
>DllImportの上で右クリック→競合の解決
おぉ、こんなのあるんだしらなかった。すごいよ(´д`)ママン…。
これ登録されてるライブラリから名前解決して推論して持ってきてるって感じなのかね?
自分のライブラリでも可?
10デフォルトの名無しさん:2007/09/27(木) 12:36:01
>>1
おつ
11デフォルトの名無しさん:2007/09/27(木) 16:09:36
12デフォルトの名無しさん:2007/09/27(木) 18:20:42
コピペ君って馬鹿だな、まで読んだ。
13デフォルトの名無しさん:2007/09/27(木) 22:31:00
>>12
北○まで読んだ。
14デフォルトの名無しさん:2007/09/30(日) 00:52:22
>>6
Win32 APIを使いたいならMFC使えば?
C#みたいなけったいな宣言なしに呼べるよ
15デフォルトの名無しさん:2007/09/30(日) 02:44:18
そこはC++/CLIだろ
なんでMFCなんていうクs
16デフォルトの名無しさん:2007/09/30(日) 02:48:56
ネイティブ吐けないじゃん
17デフォルトの名無しさん:2007/09/30(日) 11:53:22
どうしてここでネイティブを吐く必要があんの?
18デフォルトの名無しさん:2007/09/30(日) 19:47:26
ComboBoxのselectedIndexChangedイベントで、
ComboBox.selectedValueの値に応じて、処理を実行したいんですが、
このComboBoxがあるフォームを閉じたときにも(xをクリック)selectedIndexChangedが起きて、
そのときにselectedValueがnullになっていてこまってるのですが、どう対処すべきでしょう?
(フォームがdisposeされるから?)
19デフォルトの名無しさん:2007/09/30(日) 20:03:21
SelectedValueってのは初めて知ったけど
SelectedIndexじゃダメなのかな?
自分はこっち使ってます。
20デフォルトの名無しさん:2007/09/30(日) 20:12:52
>>19
閉じられるときはselectedIndexの値が-1になってるのでこちらもダメみたいです。
ちなみにComboBoxの内容はデータバインドでデータベースの内容をそのまま表示してるけど
ひょっとしてこれは関係ある・・・?
21デフォルトの名無しさん:2007/09/30(日) 20:14:05
そもそも閉じた時に何かする必要があんの?
22デフォルトの名無しさん:2007/09/30(日) 20:16:55
>>21

ないです。閉じたときにselectedIndexChangedが発生してしまうことで困ってます。
何で発生するかも分からないです。で、そのときにvalueがnullになってるのでヌルリが出てしまいます。
23デフォルトの名無しさん:2007/09/30(日) 20:19:42
イベントハンドラの先頭で
valueがnullかindexが-1なら何もしなけりゃいいんじゃね
24デフォルトの名無しさん:2007/09/30(日) 20:23:08
>>23
まあ、そりゃそうなんですが・・・
基本C#使いではないので、こういう場合のC#での定石みたいのがあったりするのかな、と。
そもそもselectedIndexChangedが発生したのにindexが-1であるのがそもそもおかしいようなきもするし、
ifでチェックするのはダサイというか正しくないような・・・
25デフォルトの名無しさん:2007/09/30(日) 20:24:50
フォーム閉じたときにSelectedIndexChangedが呼ばれるって時点で変。
他の人が書いたコードを引き継いでるの?
26デフォルトの名無しさん:2007/09/30(日) 20:35:34
>>25

俺も変だと思います。
自分で書いたコードです。勉強がてら昨日から始めました。

フォームのdisposeが呼ばれた後でselectedndexChangedが呼ばれているみたいなので、
俺の勝手な想像では、disposeされたことで、データバインドしているComboBoxの中身が削除されて、
それをトリガーにselectedIndexChangedが発生しているのではと思ってるのですが、
まあどっちにしろどうしたらいいのかわからない・・・
27デフォルトの名無しさん:2007/09/30(日) 20:38:51
補足

データバインドしない、ただのコンボボックスで試してみたら
フォームを閉じたときに、selectedIndexChangedは呼ばれないことは確認しました。
ということはやはりデータバインドがダメということっぽい?

やはり自分でフォームロード時にComboBoxの中身を設定すべきということなんですかね。
28デフォルトの名無しさん:2007/10/01(月) 04:41:36
というかComboBoxの状態としてインデックスが-1になることや、値が
nullになることがあるのは仕様なのでチェックしなさい。全然ダサくない

なんで仕様かって話なら何も選択されてない状態があるから。そもそも
インスタンス作った直後とか何も入ってないのに選択しようがないだろ
29デフォルトの名無しさん:2007/10/02(火) 02:25:51
Formだけが遅いのかと思ったら
Genericも超おせー

.NETってどんな局面で使えるのかさっぱりわからんぞ
30デフォルトの名無しさん:2007/10/02(火) 02:42:46
いったい何作ってんの?
31デフォルトの名無しさん:2007/10/02(火) 04:28:00
馬鹿は放置願います
32デフォルトの名無しさん:2007/10/02(火) 09:48:18
ジェネリックが遅いの意味を詳しく
33デフォルトの名無しさん:2007/10/02(火) 10:28:01
数学的処理とか画像処理とか膨大な処理ならともかく
それ以外なら十分満足できる速さだろ。
じゃなきゃ作り込みのロジックが悪いとしか・・・
34デフォルトの名無しさん:2007/10/02(火) 11:05:44
むしろ数学的処理とか画像処理とか膨大な処理でも遅くないが
35デフォルトの名無しさん:2007/10/02(火) 11:13:56
そういうののほうが差はでないんじゃまいか?
36デフォルトの名無しさん:2007/10/02(火) 12:49:59
このようにみんな混乱しているので
ジェネリック超おせーの詳細を超詳しく
37デフォルトの名無しさん:2007/10/02(火) 15:13:32
Javaのジェネリックなら、使ったら速くなると勘違いしてて
使ってみたら全く変わらなくてがっかりで「超おせー」っていうのはありそうだが
38デフォルトの名無しさん:2007/10/02(火) 15:20:18
boxingとかされると遅くなるのかな?
39デフォルトの名無しさん:2007/10/02(火) 15:42:10
boxingさせないためのジェネリクスだろ
40デフォルトの名無しさん:2007/10/02(火) 15:47:14
boxingったってnew一回分だろ
気にすることねえべ
41デフォルトの名無しさん:2007/10/02(火) 15:49:26
でも値型オブジェクトを入れるコレクションとしてArrayListを使ってたところを
List<T>に変えたら暴速になるべ
42デフォルトの名無しさん:2007/10/02(火) 15:51:09
>>40 ( ´ー`)フゥー...
43デフォルトの名無しさん:2007/10/02(火) 15:56:56
ボクシングを気にしないなら値型は使わなくていい
44デフォルトの名無しさん:2007/10/02(火) 15:59:29
Rubyは足し算するにも整数オブジェクトの加算メソッドを呼び出すらしいな
45デフォルトの名無しさん:2007/10/02(火) 16:04:36
C#のプリミティブ型がオブジェクトとして扱えるみたいに、
内部の実装は全然違うけどいちおう辻褄合わせしてあるだけなんじゃないの?
46デフォルトの名無しさん:2007/10/02(火) 16:07:48
いや、Rubyでは全てがオブジェクトで
足し算もメソッド呼び出しで行うらしい
次のランタイムはそこをもうちょっとまともにして五倍ぐらい早くするって
47デフォルトの名無しさん:2007/10/02(火) 16:45:35
最初から.NETみたいにしてれば良かったのに・・・( ´ー`)フゥー...
48デフォルトの名無しさん:2007/10/02(火) 22:19:25
まぁ、STLとかと比べてじゃないかな?
そうだとしたら当たり前。
49デフォルトの名無しさん:2007/10/02(火) 22:36:00
エスパーすると構造体形式の値型をジェネリックで使う場合、
IEquatable<T>.Equals(T o)を実装してないという話じゃないかい。
比較もするならIComparable<T>.CompareTo(T o)も必要。
これがないと、比較や同値の検査のとき、
いったんBoxingされてしまうからジェネリックのメリットがなくなる。
Int32などのプリミティブの値型ははじめから実装済み。
50デフォルトの名無しさん:2007/10/02(火) 22:52:57
genericをプリミティブで特化する奴なんていねーよ
ばかか?おめー
51デフォルトの名無しさん:2007/10/02(火) 22:55:06
>>50
もしかしてJavaの人ですか?
52デフォルトの名無しさん:2007/10/02(火) 23:26:24
JavaでもList<Integer>のオートボクシングとかあるだろ
C#はそんなことしなくてもそのままの型でスマートに使えるんだよ
53デフォルトの名無しさん:2007/10/03(水) 00:13:54
>>50
っていうか言いたいことがいまいちよくわからない。
どこにプリミティブで特化するって書いてる?
54デフォルトの名無しさん:2007/10/03(水) 00:40:36
よくわかってないんだろ
55デフォルトの名無しさん:2007/10/03(水) 04:05:25
超プリミティブで特化するし
56デフォルトの名無しさん:2007/10/03(水) 15:49:15
C#で、mdbとsqlとSQL serverを切り替えれるようにしようかなと思って、次のようなフォルダ分けをしてみた


DbClass--
|
|--- Mdb
| |------Mdbにアクセスするクラス
|
|--- Sql
       |    |------Sql Serverにアクセスするクラス
|
|----設定に応じてMdbとSqlを呼び分けるクラス


これで特に問題がないのだが、デザイナで作ったデータセットのTableAdapterがうまく切り替えができん。
何かいい方法ないかな。
データセットのxsdファイルを二つにして、毎回切り替えるような感じにすればいいのかな
57デフォルトの名無しさん:2007/10/03(水) 15:49:45
すまん、ずれた・・・↑
58デフォルトの名無しさん:2007/10/03(水) 22:18:18
readonlyとconstの違いがよくわからん。
なんで二つも似たようなキーワードを用意する必要があったの?
59デフォルトの名無しさん:2007/10/03(水) 22:26:23
だって違うものだから。
constは定数。
readonly読み取り専用フィールド。
60デフォルトの名無しさん:2007/10/03(水) 22:28:17
機能面で言えば、readonlyのフィールドはコンストラクタで初期化できる、
という点が大きな違いだろうね。
61デフォルトの名無しさん:2007/10/03(水) 22:28:45
それじゃわからんです。
では、どちらかのキーワードが欠けていたばあい、こんな困ったことがある、
という事例おしえて
62デフォルトの名無しさん:2007/10/03(水) 22:30:44
だから、readonlyのフィールドならメソッドの返り値で初期化することもできるよ。
6361:2007/10/03(水) 22:34:24
>>62

ごめん。
>>61>>59向けに書きました。
64デフォルトの名無しさん:2007/10/03(水) 22:38:01
まぁ、constが無くて困るような事例はほぼ無いような。
readonlyだとリフレクションで弄れる余地が残っているくらいかなぁ。

あんま難しく考えない方がいいかも。
絶対不変の定数であることをコード書く人が明確にするため、
程度の認識でいいんじゃない?
65デフォルトの名無しさん:2007/10/03(水) 22:50:07
>>61
const int MyIntValue = 1;

foo(MyIntValue);

と書くと、生成されるMSILにはfoo(1);と定数が埋め込まれる
#define MyIntValue 1
みたいな感じ。
MyIntValueの定義場所とfooを呼び出している場所が
別のアセンブリでも、やっぱりコンパイル時に定数が展開される。

問題はMyIntValueを別の値に修正したとき。

MyIntValueがどのアセンブリに定義されていようと
利用場所ではコンパイル時に定数が埋め込まれるから、
結果的にMyIntValueを使ってるプログラムは全部コンパイルし直しになる。
つまりそういうところにconstを使うべきじゃない。

readonlyの場合は、実行時に変数から読み出されるので
利用側の再コンパイルは必要ない。
66デフォルトの名無しさん:2007/10/03(水) 23:01:30
switchで使えんとか属性で使えんとかあるだろ
67デフォルトの名無しさん:2007/10/03(水) 23:40:45
constは定数として解釈される。
定数式とそうでないものは静的言語使うんならきちんと区別しる。Typeだけの話やないぞ

>>66 もいってるけどまあ実際主にswitchやAttributeとかぐらいやけどな
68デフォルトの名無しさん:2007/10/03(水) 23:58:37
>>65の方が重要じゃね?
バージョン管理絡みとかで
69デフォルトの名無しさん:2007/10/04(木) 00:11:58
どっちも重要だけど、まあ>>65のはやっちまう可能性があるから注意が必要だな。
>>66とかのはいきなりコンパイルできない時点で直すことになるので、まあ実害まではいかない。
70デフォルトの名無しさん:2007/10/04(木) 00:21:48
良いこと聞いた。
71デフォルトの名無しさん:2007/10/04(木) 07:06:32
巨大なBitmapの一部を切り出して画面に描画しています
GraphicsクラスのDrawImageを使っていますが、このメソッドが300msも掛かってしまいます

なにかいい方法ありませんか?
72デフォルトの名無しさん:2007/10/04(木) 09:16:32
WIN32のBitblt使え
73デフォルトの名無しさん:2007/10/04(木) 09:18:46
GDI+使うなら、巨大なBitmapを分割して保持する。
DrawImageは描画元が大きければそれだけでコストが鰻上りだからな。
あとはGDIのBitBltとかWPFに移行するとか。
74デフォルトの名無しさん:2007/10/04(木) 11:34:00
DrawImageUnscaled
75デフォルトの名無しさん:2007/10/04(木) 11:37:30
>>68,69
>>64,65 の話はreadonlyでなければ困る話で >>66,67 はconstでなければ困る話。
「どちらかなければ」困るでreadonlyだけでいいに対する反論という流れ
だからずれてる。
76デフォルトの名無しさん:2007/10/04(木) 14:59:26
constはstaticだから複数個インスタンスを作ればメモリの消費が少ない。じゃダメ?
1000個や2000個の定数を複数個宣言する場合、そのまま
変数のbyte差分×インスタンスの数だけメモリが浮くんじゃない?

static readonlyとかあるけど。
そんな事いったらstaticクラスもabstractでsealedができないと言う制限をコンパイラからはずせば不要だし。
77デフォルトの名無しさん:2007/10/04(木) 15:01:50
なにゆってんの?
78デフォルトの名無しさん:2007/10/04(木) 15:13:03
ごめんなさい、よくわかってないだけです。
79デフォルトの名無しさん:2007/10/04(木) 17:26:54
ソリューションを別名で保存ってできないんですか?
一々ソリューション閉じてエクスプローラでフォルダごとコピペしてリネームって
結構面倒なんですよね
80デフォルトの名無しさん:2007/10/04(木) 18:56:55
googleで
「.NET アプリ 遅」を検索すると 837,000 件
「MFC アプリ 遅」を検索すると  23,800 件

この差はなんですか?
81デフォルトの名無しさん:2007/10/04(木) 19:10:07
きちんと議論したいのならば持ってくる数字が足りないよ
82デフォルトの名無しさん:2007/10/04(木) 22:55:23
誹謗中傷乙!


c# アプリ 遅 に一致する日本語のページ 約 43,100 件
c++ アプリ 遅 に一致する日本語のページ 約 93,800 件
83デフォルトの名無しさん:2007/10/04(木) 22:57:17
それは普及度の差のような希ガスw
84デフォルトの名無しさん:2007/10/04(木) 23:03:32
なるほどMFCはあまり普及してないのか。
85デフォルトの名無しさん:2007/10/04(木) 23:05:11
php アプリ 遅 に一致する日本語のページ 約 302,000 件

今日のgoogleはスプートニク?
86デフォルトの名無しさん:2007/10/05(金) 01:47:38
Tcl アプリ 遅 に一致する日本語のページ 約 954 件
Haskellに一番 ... アプリ 遅 に一致する日本語のページ 約 1,110 件
awk アプリ 遅 に一致する日本語のページ 約 13,100 件
Haskell アプリ 遅 に一致する日本語のページ 約 20,800 件
Scheme アプリ 遅 に一致する日本語のページ 約 22,400 件
Lisp アプリ 遅 に一致する日本語のページ 約 31,900 件
Python アプリ 遅 に一致する日本語のページ 約 50,400 件
C言語 アプリ 遅 に一致する日本語のページ 約 53,500 件
VB アプリ 遅 に一致する日本語のページ 約 78,700 件
Ruby アプリ 遅 に一致する日本語のページ 約 118,000 件
Perl アプリ 遅 に一致する日本語のページ 約 133,000 件
Java アプリ 遅 に一致する日本語のページ 約 238,000 件
F# アプリ 遅 に一致する日本語のページ 約 363,000 件
87デフォルトの名無しさん:2007/10/05(金) 02:15:51
アプリ 遅 に一致する日本語のページ 約 408,000
合計が合わないから重複してるね。
88デフォルトの名無しさん:2007/10/05(金) 02:21:07
F#で検索してもほとんどFで引っかかってるだけだな。
そうするとJavaがトップか。
89デフォルトの名無しさん:2007/10/05(金) 11:56:58
いまのオープンソースの流れから考えてもC#は数年後には今のJ#と同じ道を辿る。

利潤追求の激しい企業が本来ならば仲間にしなければならない開発者までも食い物に
していることも分からず、M$マンセーしている奴は頭を齧られ過ぎて考えることも出来ない
くらいに脳みそがなくなっているんだろ。可哀想だよ。
90デフォルトの名無しさん:2007/10/05(金) 12:17:44
フリーソフトって.NET物が増えてきたけど
C#で開発してんのかなぁ。
91デフォルトの名無しさん:2007/10/05(金) 12:20:16
俺には脳味噌がない

まで読んだ
92デフォルトの名無しさん:2007/10/05(金) 14:07:55
>>90
.NETで作成されたソフトなんて1%もないだろ?
93デフォルトの名無しさん:2007/10/05(金) 14:28:19
増えてきたってだけで既存のソフト群を超えたなんてかかれてないだろ。
94デフォルトの名無しさん:2007/10/05(金) 14:35:31
.netのフリーソフト多くは無いだろうけど
1%とか適当なこというなよ
そもそも、.netのソフトが多いか少ないかを質問
してるのではないだろ

95デフォルトの名無しさん:2007/10/05(金) 14:40:10
いくらなんでもスレチのチラ裏に必死すぎだろ・・・
96デフォルトの名無しさん:2007/10/05(金) 15:17:24
開発環境がタダってことで、前はdelphiで作ったものが結構あったけど
今はそれがC#EEに移ってきてるんじゃね?
windowsに限定するなら、javaよりも.netの方が何かと便利だし。
97デフォルトの名無しさん:2007/10/05(金) 17:45:28
FxCopでアナライズすると
大量に「プロパティのgetterが呼ばれてません」て警告がでるんですが
setterだけのプロパティを作るのって抵抗ありません?
98デフォルトの名無しさん:2007/10/05(金) 17:48:11
いるなら作るし、いらないなら作らない。
それだけだろ…。
99デフォルトの名無しさん:2007/10/05(金) 17:54:57
漢字のシンボルの使用ってどう思う?
中途半端な英語を使うよりプログラムの可読性とかは向上するけど
どんな問題が考えられるのかな
100デフォルトの名無しさん:2007/10/05(金) 17:55:27
なんちゃら.CodeAnalisysとかに抑制するクラスがあったような
101デフォルトの名無しさん:2007/10/05(金) 17:57:12
intellisenceが効かない
誤字が多い
打つのがめんどくさい
102デフォルトの名無しさん:2007/10/05(金) 18:32:45
intellisense は、売った後に ctrl+space でできるけど。
あと、enum とかに使うなら、型名の後 . 打った時点で intellisense 出るし。

やっぱ、一番うっとおしい問題は誤変換とか、IME 的な問題かと。

まあ、ローマ字を書かなくて済むようになったと思えば、いい時代よ。
103:2007/10/05(金) 18:47:42
すみません、もしわかったら教えていただきたいのですが。。
現在C#を使って開発しているのですが
最近極端にデバッグのステップ実行速度が遅くなってしまいました。
検索したのですが見つからなかったので質問しました。
104デフォルトの名無しさん:2007/10/05(金) 19:30:44
>>103 マルチ( ゚Д゚)<氏ね!
105デフォルトの名無しさん:2007/10/05(金) 20:07:34
enumに↑、→、↓、←が使えない・・・
106デフォルトの名無しさん:2007/10/05(金) 20:16:46
Unicode でも、記号関係の文字はたいていアウト。
107デフォルトの名無しさん:2007/10/05(金) 20:25:56
ntellisense問題は、英文字の接頭語とかつければ問題は無いと思うよ
ローカル変数のコメントとかどうでもいいコメントを省略できるから
コーディング量は減らせると思うんだけど
やっぱり書き手が美しく感じるかとかの問題だけなのかな
108デフォルトの名無しさん:2007/10/05(金) 20:38:54
英文字の接頭辞に日本語ってよけい見にくいんじゃない?
接頭辞に悩みそうだし
109デフォルトの名無しさん:2007/10/05(金) 20:51:22
ハンガリー記法の復活ですね!
110デフォルトの名無しさん:2007/10/06(土) 22:48:50
それをいうならジャンガリアン記法。
111デフォルトの名無しさん:2007/10/06(土) 22:54:53
いやハンガリー記法で合ってるよ
112デフォルトの名無しさん:2007/10/07(日) 00:16:01
サンガリア記法だろ
113デフォルトの名無しさん:2007/10/07(日) 00:38:44
いやモンゴリアンチョップだろ
114デフォルトの名無しさん:2007/10/07(日) 00:44:41
それ言うならシャングリラ
115デフォルトの名無しさん:2007/10/07(日) 12:53:58
.NETで作成されたWINDOWSアプリが普及するまでMSは.NETを推していくんでしょうか?
.NETが発表されてから約8年が過ぎましたが、.NETでアプリが店頭に並んでいるを見たときがありません。

ネイティブと比較すると速度面であまりにも不利ですし、ソースコードが簡単に覗ける
これでは商用ソフトとしては無理がありますよね

うちの部署も未だにVC6++SP2/MFCですし・・・
116デフォルトの名無しさん:2007/10/07(日) 12:56:31
日本語でw
てか
>.NETでアプリが店頭に並んでいる
なんだそりゃw
117デフォルトの名無しさん:2007/10/07(日) 13:09:19
推しもしませんし
あまりにも不利ですし
無理があります。

次の質問どうぞ
118デフォルトの名無しさん:2007/10/07(日) 13:33:18
「次の質問どうぞ」なんてセリフを吐く奴が回答しているのを見たこと無いよw
カスは来るな、とまでは言わないが、カスならカスでオブザーバーに徹すればいいのに。
119デフォルトの名無しさん:2007/10/07(日) 13:34:52
とりあえずお前ら帰れ
邪魔
120デフォルトの名無しさん:2007/10/07(日) 13:45:02
お前らオレの日記帳汚すなよ・・・
121デフォルトの名無しさん:2007/10/07(日) 14:26:09
開発環境が只で手に入るし、敷居も低いから.NETはフリーソフト中心に増えていくんじゃないの?
てか店頭に並ぶアプリって大抵の物はフリーソフトで十分な糞ばっかり。
122デフォルトの名無しさん:2007/10/07(日) 14:30:04
>>118
よお、カス
123デフォルトの名無しさん:2007/10/07(日) 15:28:10
.NETアプリって敷居が低いか?
MFCと大して変わらん気がするが・・・

124デフォルトの名無しさん:2007/10/07(日) 15:30:23
何せタダだ
125デフォルトの名無しさん:2007/10/07(日) 15:32:36
敷居は低いでしょ
コレクションの中身をポインタ経由で誰かが参照してる時に
コレクションを壊す、といった類の危険な操作に対してC++はひどく脆弱だが、
.NETではそんなことは(基本的には)ないし

MFCと.NETでは、ライブラリのデキもカバーする範囲も段違いだ
126デフォルトの名無しさん:2007/10/07(日) 15:33:52
美しい言語と美しいライブラリに勝るものなし
127デフォルトの名無しさん:2007/10/07(日) 15:38:52
美しい、美しくないの議論は全く無味乾燥。

.NETの最大の弱点
遅い

これに尽きる
128デフォルトの名無しさん:2007/10/07(日) 15:39:28
そうだねー
129デフォルトの名無しさん:2007/10/07(日) 15:41:46
世間でよく使われてるようなスクリプト言語よりずっと早いけどな
130デフォルトの名無しさん:2007/10/07(日) 15:42:37
下を見るな
上を見ろ
131デフォルトの名無しさん:2007/10/07(日) 15:43:32
安全性やプログラミングのしやすさのためなら
速さなんていくら犠牲になってもかまわない
132デフォルトの名無しさん:2007/10/07(日) 15:44:41
つーか8年?
133デフォルトの名無しさん:2007/10/07(日) 15:46:26
てか正しいアルゴリズムで書けば言語の違いで遅くなるなんてことはないのだ
言語が早いとか遅いとか言ってるやつは正しいアルゴリズムが書けないだけ
134デフォルトの名無しさん:2007/10/07(日) 15:50:45
>>133
言語のベンチマークの類を見たことが無い人かな?
FORTRANでやるような数値計算の類をスクリプトでやってみるといいよ
135デフォルトの名無しさん:2007/10/07(日) 15:55:58
そんな数値計算なんぞCのライブラリでも呼び出せばいいだけの話じゃねーか
136デフォルトの名無しさん:2007/10/07(日) 15:57:35
>>131
アプリケーションを使う側からしたら
プログラミングのしやすさなんてどうでもいいのでは?

速いアプリケーションより遅いアプリケーションを選択するユーザなんているのかな?
137デフォルトの名無しさん:2007/10/07(日) 15:57:58
>>135
まず人と会話出来るようになろうぜ・・・
138デフォルトの名無しさん:2007/10/07(日) 16:02:06
基本的に、現代のコンピュータで処理すれば体感できるほど処理時間はかからない
処理時間がかかるような処理はCで書いてそれを呼び出せばいい
それ以外のところは美しい言語と美しいライブラリでプログラミングしやすくするのがいいわけ
生産性の高い言語を使えばバグが少なくて値段も安いソフトが作れるわけだ
それはユーザーに大いにメリットのある話だ
139デフォルトの名無しさん:2007/10/07(日) 16:06:47
その手の議論は.NET出た頃からさんざんされていただろうという
想像力はないのかね
140デフォルトの名無しさん:2007/10/07(日) 16:09:41
Windows Formのロードの遅さが要らない誤解を招いているのがドトネトの不幸ではあるね。
141デフォルトの名無しさん:2007/10/07(日) 16:11:20
>>138
だったらなぜ、.NETで書かれたアプリは極少数なんでしょうか?

そのうち、LightWave、Maya等も.NETで書かれるんでしょうかね?w
142デフォルトの名無しさん:2007/10/07(日) 16:17:14
こういう「延々ループするのが好きな暇な馬鹿」を囲い込んでおく
ホイホイスレが必要かもね。

「ドトネトアプリはなぜ普及しないのか?」って
OOPスレみたいにさw
143デフォルトの名無しさん:2007/10/07(日) 16:20:03
こいつは単に荒らしたいだけなんだからホイホイには行きはしないよ
144デフォルトの名無しさん:2007/10/07(日) 16:22:25
遅いなんて言われると、.NET信者は目くじら立てるから
注意しましょうhw
145デフォルトの名無しさん:2007/10/07(日) 16:24:59
hw
146デフォルトの名無しさん:2007/10/07(日) 16:25:40
既存のソフトをわざわざ.NETに直すメーカーはそういないだろう。
これは.NETに限らず。
147デフォルトの名無しさん:2007/10/07(日) 16:27:44
まあランタイムもあんま普及してないしなあ
148デフォルトの名無しさん:2007/10/07(日) 16:29:33
すいません、大変恐縮ですが質問よろしいでしょうか。

ファイルの中身が同一かどうかを調べたいです。
実装要件としては、
・合致しているかどうかわかればいい
・間違ってるとわかったらすぐ比較をやめたい

なんですが、
1.比較するためにファイルの中身をバイト型配列に読み込もうとしてますが
これをせずに、ファイルの中身を比較できる関数ありますか?

2.バイト型配列に読み込んで比較するとしたら、
0のインデックスからお互い比較していって、
間違えて抜けるというループという方法と
どこかの比較関数使った方法は
どちらがパフォーマンスが優れていますか?
私は前者のfor文で回して間違ったら抜ける方が全部見ずに
早いのかなと思っておりますが。。。

教えてくださいわかる人!
149148:2007/10/07(日) 16:31:09
1.が出来るならバイト型配列に読み込まなくてもいいから
こっちの方がパフォーマンスいいと思っています。
150デフォルトの名無しさん:2007/10/07(日) 16:34:24
>>148
> 1.比較するためにファイルの中身をバイト型配列に読み込もうとしてますが
> これをせずに、ファイルの中身を比較できる関数ありますか?
ない
あとC#的に関数じゃなくてクラスとメソッド
> 1.が出来るならバイト型配列に読み込まなくてもいいから
> こっちの方がパフォーマンスいいと思っています。
その関数とやらでも結局内部でファイルの中身をバイト配列に読み込むと思うよ

> 2.バイト型配列に読み込んで比較するとしたら、
> 0のインデックスからお互い比較していって、
> 間違えて抜けるというループという方法と
> どこかの比較関数使った方法は
> どちらがパフォーマンスが優れていますか?
どこかって何だ?

あと同じファイルを何回も比較するならチェックサムを使うとか、
中身よりまずファイルサイズで比較するとか
151148:2007/10/07(日) 16:43:37
> その関数とやらでも結局内部でファイルの中身をバイト配列に読み込むと思うよ
やっぱりそうでしたか。何か特殊なアルゴリズムでもあると思ってました。

> どこかって何だ?
確かに。すんません。何だ?

> 中身よりまずファイルサイズで比較するとか
ごもっとも!

ありがとうございますエライ人!
152デフォルトの名無しさん:2007/10/07(日) 16:49:27
バイト配列をforループで比較したら遅いだろ
せめて4バイトずつとか比較したいところだが
153デフォルトの名無しさん:2007/10/07(日) 16:57:54
適当な大きさにバッファリングされたファイルストリームを使ってるなら、
1文字ずつ読んで比較してもさほど時間は変わらないと思うけどな。
一度にバイト配列に読み込んでメモリに入りきらないほどのサイズだったらどうするのよ。
154148:2007/10/07(日) 17:04:42
> 一度にバイト配列に読み込んでメモリに入りきらないほどのサイズだったらどうするのよ。
どうしよう・・・

ってことでFileStream.ReadByte()を使って1バイトずつ
比較して合致しなかったらreturn falseっていう方法が
妥当だと考えましたがいかがでしょうか。
155デフォルトの名無しさん:2007/10/07(日) 17:11:06
>>154
BinaryReader(new BufferedStream(new FileStream(file, ...)))
156148:2007/10/07(日) 17:11:59
ちなみに今一度全部バイト型配列にRead()で読み込んで比較する方法と
一バイトずつReadByte()で比較する方法を
Stopwatchクラスで計ったら1msしか違いは出ませんでした。
テストしたファイルは9118バイトで(小さいかも)378msです。

というとことは、これでReadByte()でOKかも
157デフォルトの名無しさん:2007/10/07(日) 17:16:48
なんかすごい低レベルの議論だな。。

>>154
別に一度に配列に全部よまなくても、「適当なサイズ」の配列に読めばいいでしょ。
どのぐらいの大きさが「適当なサイズ」かは判断が難しいところだろうけど。

実際に確認したわけじゃないけど、普通に考えればストリームがいくらバッファリング
されているからといって、配列と同じ効率でアクセスできるとは考えにくいから、
配列に一度読み出すことには意味があると思う。

それに、これも実際に確認したわけじゃないけど、
そんなことより>>152の言ってる事の方が恐らく重要。
158デフォルトの名無しさん:2007/10/07(日) 17:19:11
ファイルアクセスの方が圧倒的に遅くなるのは当たり前田のコンコンチキじゃないか?
159デフォルトの名無しさん:2007/10/07(日) 17:30:48
>>155
FileStream自体がバッファを持ってるからBufferedStreamはいらないか。
標準で8K、サイズはコンストラクタでも指定できるそうだ。
BinaryReaderは一応使っといて。
160デフォルトの名無しさん:2007/10/07(日) 17:31:19
ファイル全部読み出す時間に比べたら
比較にかかる時間なんて誤差の範囲
終了
161デフォルトの名無しさん:2007/10/07(日) 18:46:17
いちいち1バイトずつ比較するよりも数十KB単位でMD5出した方が速いような気がするのは俺だけ?
小さいの(数KB)ならいいかもしれんが。
162デフォルトの名無しさん:2007/10/07(日) 18:48:04
おまいだけ
MD5じゃコリジョンが発生しうる
163デフォルトの名無しさん:2007/10/07(日) 18:55:29
>>161
特に問題ないからそれでいいと思うよ
164デフォルトの名無しさん:2007/10/07(日) 19:16:26
MD5ったって一バイトずつ見てかないと計算できないだろ・・・
165デフォルトの名無しさん:2007/10/07(日) 19:18:52
MD5出すなら比較した方が早い
166148:2007/10/07(日) 19:22:38
148です。
1.5MBのテキストファイルを1バイトずつ計算したら63000msかかり
けっこう使い物にならないかも・・・

とにかく早い比較方法はないでしょうか。
MD5?調べてみます。
167デフォルトの名無しさん:2007/10/07(日) 19:24:36
読み出しだけの時間と比較しなさいよ
168デフォルトの名無しさん:2007/10/07(日) 19:26:19
1対1の比較ならMD5は不要だけれども
1対多数を比較するならMD5がいいね
169デフォルトの名無しさん:2007/10/07(日) 19:33:25
1対多でもハッシュは無用
多対多ではすごく有用
170デフォルトの名無しさん:2007/10/07(日) 19:36:03
てか同じじゃないのを同じと判断する確率が
約1/2^128 あるでしょ
171デフォルトの名無しさん:2007/10/07(日) 19:36:19
aho
172デフォルトの名無しさん:2007/10/07(日) 19:38:09
>>169
1対多でも有用ですよ
173デフォルトの名無しさん:2007/10/07(日) 19:41:01
>>166
>1.5MBのテキストファイルを1バイトずつ計算したら63000ms
あり得んよ。一体どんなコード書いたの?
174デフォルトの名無しさん:2007/10/07(日) 19:47:30
>>172
n回ハッシュ計算するのとn回バイト列の比較するのとどっちが効率いいと思う?
175デフォルトの名無しさん:2007/10/07(日) 19:49:58
ヒント:メモリの効率
176デフォルトの名無しさん:2007/10/07(日) 19:53:29
どう有用なのか教えてくれ。
ってか1対多って、ひとつのファイルを、複数のファイルそれぞれと比べてって話でいいんだよな?

しかしこういう時すぐにハッシュを出してくるやるはどういう発想なんだ?
多対多とかの話は別だが、単に2つのファイルの比較でもすぐに言い出すやつが出る。

177デフォルトの名無しさん:2007/10/07(日) 19:54:54
メモリマップしてメモリ比較でいいんじゃねww
178デフォルトの名無しさん:2007/10/07(日) 19:55:53
>>174
一つのファイルから1回読み込むのとn回読み込むのとどっちが効率いいと思う?
179デフォルトの名無しさん:2007/10/07(日) 19:56:28
ハッシュ計算するにも結局全バイト舐める必要があんだろ
何にもかわらんと思うが

それより、ReadByte()でバイト読みするんなら、せめてBufferedStream()
使うべきじゃね
180デフォルトの名無しさん:2007/10/07(日) 19:58:07
そのまんまメモリ上に置いても大丈夫なくらい小さいファイルならハッシュ使わなくていいんじゃない
181デフォルトの名無しさん:2007/10/07(日) 20:01:12
ていうかな、ハッシュだけ残して比較しようとしたら、一バイト目で違っても全部読まなきゃならないんだぞ。
あふぉか?
182デフォルトの名無しさん:2007/10/07(日) 20:02:09
BufferedStream
いらんて話がとうに出とろうがw
183148:2007/10/07(日) 20:29:00
148っす
こんなコードです。
FileStream fs1 = new FileStream(path1, FileMode.Open, FileAccess.Read);
FileStream fs2 = new FileStream(path2, FileMode.Open, FileAccess.Read);
if(fs1.Length != fs2.Length){
return false;
}
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//How to 1
byte[] bt1 = new byte[fs1.Length];
byte[] bt2 = new byte[fs2.Length];
fs1.Read(bt1, 0, (int)fs1.Length);
fs2.Read(bt2, 0, (int)fs2.Length);
Console.WriteLine("読み出し完了" + stopWatch.ElapsedMilliseconds.ToString());
for(int i = 0; i< fs1.Length; i++){
if(bt1[i] != bt2[i]){
Console.WriteLine("見っけ"+stopWatch.ElapsedMilliseconds.ToString());
//return false;
}
}
stopWatch.Stop();
Console.WriteLine("How To 1 全部で" + stopWatch.ElapsedMilliseconds.ToString());
stopWatch.Reset();
fs1.Seek(0, SeekOrigin.Begin);
fs2.Seek(0, SeekOrigin.Begin);
184148:2007/10/07(日) 20:29:44
続きっす
stopWatch.Start();
//How to 2
for (int i = 0; i < fs1.Length; i++) {
if (fs1.ReadByte() != fs2.ReadByte()) {
Console.WriteLine("見っけ" + stopWatch.ElapsedMilliseconds.ToString());
//return false;
}
}
stopWatch.Stop();
Console.WriteLine("How To 2 全部で" + stopWatch.ElapsedMilliseconds.ToString());
fs1.Close();
fs2.Close();
185148:2007/10/07(日) 20:30:16
ちなみにHowTo1の二つのファイルをバイト配列に読み込んだ段階で
だしたログが
>読み出し完了7ms
で7msだったのが意味わからんかったです。つまり実際byte配列には
ポインタのようなものだけ与えてるってことでしょうか。
その後は
>見っけ57491
>How To 1 全部57493
>見っけ65137
>How To 2 全部65138
って感じですけど、この全部ってのは1が早くなったり2が早くなったり
ほぼ同じくらいになったりします。
186デフォルトの名無しさん:2007/10/07(日) 20:33:27
> ちなみにHowTo1の二つのファイルをバイト配列に読み込んだ段階で
> だしたログが
> >読み出し完了7ms
> で7msだったのが意味わからんかったです。つまり実際byte配列には

たぶんキャッシュされてるのを持ってきてる
187デフォルトの名無しさん:2007/10/07(日) 20:35:10
異なるバイト列から作ったMD5のハッシュが衝突する可能性は無いものと考えていい
188デフォルトの名無しさん:2007/10/07(日) 20:37:25
見た感じだけだとfs1.Lengthが遅いんじゃないかな
189デフォルトの名無しさん:2007/10/07(日) 20:39:27
>>184-185
遅いのは毎回ストリームからLengthプロパティを取得してるからだよ。
190デフォルトの名無しさん:2007/10/07(日) 20:44:33
>>187
おいおい……
191148:2007/10/07(日) 20:46:10
あっ!!!
確かに!!

今Lengthプロパティを変数にいれてfor文回してくるんで
ちょっと待っててください!!
192デフォルトの名無しさん:2007/10/07(日) 20:46:14
もう一荒れする予感
193デフォルトの名無しさん:2007/10/07(日) 20:49:53
How To 1って
194デフォルトの名無しさん:2007/10/07(日) 20:51:33
時間かかるような処理をプロパティにしないでもらいたいものだ
195デフォルトの名無しさん:2007/10/07(日) 20:57:07
だからそんな小手先のことより>>152の指摘の方がずっと重要だっつーのにw
CPUがデータバスの本数を増やしてきた歴史を何だと思ってるんだよ
196デフォルトの名無しさん:2007/10/07(日) 20:58:47
てかバイト配列を一気に比較したりするメソッドって
なんかなかったっけ
197148:2007/10/07(日) 21:00:35
結果です。すいませんでした。

読み出し完了8
見っけ19
How To 1 全部で19
見っけ103
How To 2 全部で103

超早かったです・・・。1.5Mbの5万行のコード比較でした。
ちなみに間違った行は49999行くらいにいれてます。
この速さなら全然要望通りです。

しかもこれだと結局バイト配列に入れた方が結局早いってこと?
バイト配列ってどのくらい読み込むことできるんでしょうか。

> How To 1って
そこは触れないでください。

> 時間かかるような処理をプロパティにしないでもらいたいものだ
この50近いスレ汚しをどう償えばいいでしょうか。
198デフォルトの名無しさん:2007/10/07(日) 21:04:22
だから最初から要ってるじゃん。
いくらバッファリングされてるといっても配列の効率に敵うはずがないって。
だからそんなことより>>152の指摘の方がずっとw
199148:2007/10/07(日) 21:08:31
>だからそんな小手先のことより>>152の指摘の方がずっと重要だっつーのにw
>CPUがデータバスの本数を増やしてきた歴史を何だと思ってるんだよ
それはRead()メソッドのときに4バイトずつ読み込んで
byte配列[4]をuintにシフトして代入して比較するということで
合っていますか?
200デフォルトの名無しさん:2007/10/07(日) 21:09:38
違います
201148:2007/10/07(日) 21:13:40
むぅ。ということは

>いくらバッファリングされてるといっても配列の効率に敵うはずがないって。
を踏まえると、配列に全部読み込んで
そこから4バイトずつでuintに代入して4バイトごと比較する!
もしくはUINT64!?
202デフォルトの名無しさん:2007/10/07(日) 21:15:20
もしかしたらbyte配列の比較も最適化されてるかもしれないし
203148:2007/10/07(日) 21:20:31
一応プロジェクト-プロパティ-ビルドタブの
コードを最適化するチェックボックスを外してたんですが
ここは関係ないですか?
204デフォルトの名無しさん:2007/10/07(日) 23:48:07
バイト配列を作らないで4バイトずつ比較

bool Hikaku(string file1, string file2)
{
using (FileStream fs1=new FileStream(file1, FileMode.Open))
using (BinaryReader br1=new BinaryReader(fs1))
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
using (BinaryReader br2=new BinaryReader(fs2))
{
if (fs1.Length != fs2.Length) return false;
long num = fs1.Length / 4;
for (long i = 0; i < num; i++)
if (br1.ReadUInt32() != br2.ReadUInt32())
return false;
num = fs1.Length % 4;
for (long i = 0; i < num; i++)
if (br1.ReadByte() != br2.ReadByte())
return false;
return true;
}
}

60MBのファイルで2秒ぐらいかかった。
1バイトずつ比較しても速度が同じだったんで最適化される模様。
205デフォルトの名無しさん:2007/10/07(日) 23:51:50
byte[] から int* で読んでくのがたぶん最速だろうけど
206デフォルトの名無しさん:2007/10/07(日) 23:53:10
まあReadByteが遅いのは仕方が無い。

バスがどうこうとかいう問題じゃないけどな。
単純に無駄な処理が多すぎるから。

Readで適当なサイズのバッファに読み込んで、
forで同じように比較してもぜんぜん変わるだろう。
ただし4バイトとかだと多分まだ無駄が多いと思う。
どのくらいがいいかはなんともいえんけど、
適当なサイズで試して、大きく改善される範囲で適当にきめたらいいだろう。
数十から数百バイト以上まとめたらもうそんなに変わらんのじゃないかな、わからんけど。
207デフォルトの名無しさん:2007/10/07(日) 23:54:05
そんなちょっと読むのにBinaryReaderとかかましたら余計遅くなるんで無いの
208204:2007/10/07(日) 23:56:13
60MBのファイルをバイト配列に読み込んだら一瞬だった。
ただ、メモリ食いすぎるが。
ちなみにStirlingっていうバイナリエディタのバイナリ比較を試したら3秒かかった。
209デフォルトの名無しさん:2007/10/07(日) 23:56:28
4バイト処理するだけに無駄なことしすぎ。
210デフォルトの名無しさん:2007/10/07(日) 23:56:57
unsafeで書けよ
211デフォルトの名無しさん:2007/10/07(日) 23:57:11
>60MBのファイルをバイト配列に読み込んだら一瞬だった。
明らかにキャッシュされてるっての。
212デフォルトの名無しさん:2007/10/07(日) 23:57:50
どんなディスクだよっ
213デフォルトの名無しさん:2007/10/07(日) 23:58:54
>>211
バイナリエディタでファイルの末尾だけ弄ってるんだけどそれでもだめ?
214デフォルトの名無しさん:2007/10/08(月) 00:00:12
だめ。
ってか一瞬てどれくらい?
215デフォルトの名無しさん:2007/10/08(月) 00:04:54
>>214
同じぐらいサイズの別のファイルで試してみた900_秒ぐらい。
216148:2007/10/08(月) 00:19:30
148です
もう一度Read()でバイト配列の比較と一バイトずつのReadByte()比較を
テストしてみたらReadByte()の方が早いという結果が出ました。
50MBのバイナリファイルで
前者が3190ms
後者が2743ms
そして204の言うとおりメモリ食いすぎなので、どっちもこれだけ早いなら
超巨大なファイルが来たときのことを考えて、
ReadByte()で1バイトずつ比較した方がいいのかも。

てかWinMergeですら同じ条件で3秒くらいかかるからもういいかなぁ
217204:2007/10/08(月) 00:22:15
>>216
これで60MBのファイルが600ミリ秒になったよ。


64KBずつ配列に読んで比較。

using (FileStream fs1=new FileStream(file1, FileMode.Open))
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
{
if (fs1.Length != fs2.Length) return false;
int num = (int)fs1.Length;
byte[] data1 = new byte[num];
byte[] data2 = new byte[num];
int read;
while (true)
{
if (fs1.Position == fs1.Length) return true;
read = fs1.Read(data1, 0, 1024 * 64);
fs2.Read(data2, 0, 1024 * 64);
for (int i = 0; i < read; i++)
if (data1[i] != data2[i])
return false;
}
}

218204:2007/10/08(月) 00:26:56
あ、new byte[num] は 1024*64 です。
219148:2007/10/08(月) 00:36:37
>> 218
ありがとうございますっ!

それなら最速で4GBファイルとか来ても大丈夫ですね。
それでいきたい思います。

皆様本当にありがとうございました。
220デフォルトの名無しさん:2007/10/08(月) 00:49:46
System.Array.Equals
221デフォルトの名無しさん:2007/10/08(月) 00:53:35
どういたしまして
がんばってね^^
222148:2007/10/08(月) 01:02:44
>>217
すいません。20秒かかるのですが、どこか間違ってますか?
int last = (int)fs1.Length;
byte[] data1 = new byte[1024 * 64];
byte[] data2 = new byte[1024 * 64];
int read;
int sumRead = 0;
while (true) {
if (sumRead == last) {
break;
}
read = fs1.Read(data1, 0, 1024 * 64);
sumRead += read;
fs2.Read(data2, 0, 1024 * 64);
for (int i = 0; i < read; i++) {
if (data1[i] != data2[i]) {
fs1.Close();
fs2.Close();
return false;
}
}
}
223148:2007/10/08(月) 01:05:38
>>217
のコードで
if (fs1.Position == fs1.Length) return true;
は64KBごとに2つプロパティを参照するから20秒かかるかなぁ
と思ってsumReadとlastに変えてみたのですが、
変わりませんでした。

???
224デフォルトの名無しさん:2007/10/08(月) 01:15:35
キャッシュされてないファイルを読み込んだからじゃない?
225デフォルトの名無しさん:2007/10/08(月) 01:20:45
>>216
なんでいきなりそんなに変わったんだ?
あ、サイズ大きくしたら逆転したってことか?
226デフォルトの名無しさん:2007/10/08(月) 01:25:08
>>223
そのコード、break後が不明なんで
勝手にreturn trueを補ったけど早かったよ。


何度やっても遅いのならキャッシュじゃない気がする。
227148:2007/10/08(月) 01:47:27
>>226
>そのコード、break後が不明なんで
>勝手にreturn trueを補ったけど早かったよ。
break後ファイルCloseしてreturn trueだけなので
変わらないと思います。

何度やっても遅かったからよくわからないです。
すいません、今日はもう限界なので明日またがんばります。

>>225
何ででしょう。結局ReadByte()ってそんなに遅くないって
ことなんでしょうか。

228デフォルトの名無しさん:2007/10/08(月) 01:56:08
まとめて読むよりは確実に遅いと思うが、
それは無駄な処理が多いからであって、
バッファされないとかそういう極端な差は無い。
結局IOが重過ぎてその程度の無駄な処理は
ほとんど影響ないってことかもね。
229デフォルトの名無しさん:2007/10/08(月) 02:02:47
>>227
ReadByte()も内部ではバッファに一度4KB読み込んでその配列から1バイトずつ返している
だけみたいだから、大して遅くはならないんじゃないか。
むしろRead()の方は結構面倒くさい処理を内部でやっているっぽい。幾つかの例外処理とか
配列のコピー処理とか。
230デフォルトの名無しさん:2007/10/08(月) 03:32:35
スレチだが、最近のスレ見てて思い出したので質問させてくれ。
パフォーマンス計測してて、
キャッシュをクリアしたいと思ったとき、
OS再起動してるんだ。もしくは、
メモリ量と同じサイズのファイルを読み込む
ことでもクリアと同等の意味を持つと思ってる。
もっとお手軽な方法ないのかな?
231デフォルトの名無しさん:2007/10/08(月) 03:36:57
キャッシュってどれの事?
232デフォルトの名無しさん:2007/10/08(月) 03:50:00
IO系のキャッシュでそ。
233230:2007/10/08(月) 03:52:00
たぶんシステムキャッシュだとおもう。
2回目以降のファイル読み込みが早くなるやつだ。

もっと正確にいうなら、
自作アプリのパフォーマンス計測する際に
何度か計測するが、キャッシュが効いてると
1回目と2回目以降の計測はあきらかに条件がこと
なってしまう。できるかぎり同じ条件で
計測したいってことなんだが。
良い方法ないだろうか?
234デフォルトの名無しさん:2007/10/08(月) 04:37:46
ファイルコピーして消せばいいんじゃねえの
235デフォルトの名無しさん:2007/10/08(月) 10:05:34
キャッシュが利かないときが20秒でキャッシュが利くと1秒以下
1バイト比較でも配列にバッファリングしてもたいした差はでないね〜

こういう配列の比較は
for (int i = 0; i<rsize1; i++) if (buf1[i] != buf2[i]) return false;
アンセーフ使うと早くはなるのは確認
unsafe {
 fixed (byte * fp1 = &buf1[0])
 fixed (byte * fp2 = &buf2[0]) {
  byte * p1 = fp1; byte * p2 = fp2;
  for (int i = 0; i<rsize1; i++) if (*p1++ != *p2++) return false;
}}
非同期IOも使ってみたが効果なしだった
236デフォルトの名無しさん:2007/10/08(月) 10:09:57
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-31903.htm
これと同じ事かな

リンク先では解決してないっぽいね
237デフォルトの名無しさん:2007/10/08(月) 10:26:38
結局int*にしたら早くなるの?
238デフォルトの名無しさん:2007/10/08(月) 10:27:50
メモリクリーナ系のツール実行が一番手っ取り早いんでない?やっぱり。
239デフォルトの名無しさん:2007/10/08(月) 10:42:10
>>237
早くなる。
ただし末尾が余る(ことがある)ので気をつける必要がある。
240230:2007/10/08(月) 11:39:34
>>234
いや。すでにあるファイルのリード系という前提で話してるから
それは使えない。

>>236
リンク先の質問と趣旨は違ってるけど、やりたいことは同じなので
ビンゴですね。でもM$の中の人が、
>システム ファイル キャッシュだけを解放するような手段は聞いたことがありません
って書いてるので、正攻法としてはできないっぽいですね(泣

>>238
メモリクリーナー系
いまいち何やってるかわからないので敬遠してたんだ。

いろいろさんきゅー
241デフォルトの名無しさん:2007/10/08(月) 11:47:35
メモリクリーナは、超大量のメモリを確保することで
ほかのメモリを強制的にスワップアウトさせてる。
たぶんシステムキャッシュもクリアされるだろうけどどうかな?
242204:2007/10/08(月) 15:04:09
4GBのファイルを二つ作ってやってみたよ。
大体一秒で10MB処理できる感じ。
なので>>217はキャッシュが効いているみたいだね。
実際に、4GB読み込んだ後に行ったら6秒かかった。
>>222との差は環境の差なのかもしれない。
うちの環境はSATAIIのHDDに2GBのメモリです。

maxBufSize以下のファイルサイズなら一括読込。それ以上なら分割読込するようにしてみた。
仮に100MBにしてあげると60MBのファイルは2.5秒で終りました。

using (FileStream fs1 = new FileStream(file1, FileMode.Open))
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
{
if (fs1.Length != fs2.Length) return false;
long last = fs1.Length;
int maxBufSize = 好きな数字を入れるだけ;
int bufsize = fs1.Length > maxBufSize ? maxBufSize : (int)fs1.Length;
byte[] data1 = new byte[bufsize];
byte[] data2 = new byte[bufsize];
int read;
long sumRead = 0;
while (true)
{
if (sumRead == last) return true;
read = fs1.Read(data1, 0, bufsize);
sumRead += read;
fs2.Read(data2, 0, bufsize);
for (int i = 0; i < read; i++)
if (data1[i] != data2[i])
return false;
}
}
243148:2007/10/08(月) 17:06:52
>>242
ありがとうございました。色々試して
自分も50MBのファイルが2.3秒くらいでできました。
これでOKです!
本当に親身になって頂きありがとうございました。

244デフォルトの名無しさん:2007/10/08(月) 17:10:11
何回もfs1.Lengthを呼ぶなっちゅーに
245デフォルトの名無しさん:2007/10/08(月) 17:17:28
たしかにlastで補えるな。
まぁ毛の先ほども皮欄だろうが。
246デフォルトの名無しさん:2007/10/08(月) 17:25:10
byte[]をint*にキャストする話はどうなったんだ
247デフォルトの名無しさん:2007/10/08(月) 17:29:41
非同期読み込みを使う話もまだ出てきていないよな。
248デフォルトの名無しさん:2007/10/08(月) 17:30:55
ファイル読み込みにかかる時間に比べたら
比較にかかる時間なんてわずかだから
非同期にしたところでたいした違いはないと思うけどな
249デフォルトの名無しさん:2007/10/08(月) 17:38:09
非同期をなんか勘違いしてないか?
って気がするよな。

そもそも単純なスループットは非同期の方が悪いんじゃなかったかな?
250デフォルトの名無しさん:2007/10/08(月) 17:40:10
どう考えてもボトルネックは記憶デバイスの読み込み速度なんだから、
どれだけシークを少なくするかにかかってるんじゃね?
251デフォルトの名無しさん:2007/10/08(月) 17:41:13
I/Oでボトルネックになってるんだったら、非同期でI/Oしながら読んだ部分から処理していくのは正しい処理。
252デフォルトの名無しさん:2007/10/08(月) 18:13:16
確かにnバイトディスクから読むときの時間とnバイトのコンペアに掛かる時間が
イコールの時には効率上がりそうだけど、問題はその効率を最大化するnが
環境によって大きく異なることが予想される上に計算可能性が低い(ない?)ことか?
253デフォルトの名無しさん:2007/10/08(月) 18:14:28
ディスクから読んでる間CPUはほとんど遊んでいるということを理解しておるかね
254デフォルトの名無しさん:2007/10/08(月) 18:23:37
あのなー
これなら大丈夫だってことで
質問者がOKっていってんだからもういいだろ
パフォーマンスは脳内妄想してるだけじゃ
あがらないんだから、気になるんだったら
自分でコード書け
255デフォルトの名無しさん:2007/10/08(月) 18:27:48
Sequential File Programming Patterns and Performance with .NET
ttp://arxiv.org/ftp/cs/papers/0502/0502012.pdf
256デフォルトの名無しさん:2007/10/08(月) 18:35:38
>>255
これは参考になるレポだわ
257148:2007/10/08(月) 18:38:38
すいません。大元の質問者の148です。

この比較自体Workerスレッドみたいな感じで呼んでて
その中でさらにI/Oのために別スレッド立てて比較するのって
効率の良い処理になりますか?
意図を汲み取ってなかったらすみません。

あとパフォーマンス的には>>242のコードで満足してますが、
>byte[]をint*にキャストする話はどうなったんだ
がとても気になってます。でもこれはさらに上のレスで
>早くなる。
>ただし末尾が余る(ことがある)ので気をつける必要がある。
が引っかかってとりあえず保留にしてました。

258デフォルトの名無しさん:2007/10/08(月) 18:40:12
>>257
気をつければいいだけの話じゃん
259デフォルトの名無しさん:2007/10/08(月) 18:41:12
>>257
> >ただし末尾が余る(ことがある)ので気をつける必要がある。
> が引っかかってとりあえず保留にしてました。
これが分からないなら手を出すべきじゃないね。文字通りunsafeな世界のわけだし。
260デフォルトの名無しさん:2007/10/08(月) 18:42:05
いつまで続くの
もうそこだけネイティブCで書けよ
261148:2007/10/08(月) 18:43:19


というか>>235で全てを物語ったレスが
IO非同期は効果なしって書いてある。

そして気をつけてbyte[]をint*キャストで
比較していけば最速ってことか
262デフォルトの名無しさん:2007/10/08(月) 18:50:14
>>253
分かってないなら無理して背伸びしない方がいいよ。
だからCPUを遊ばせないためにIOを非同期にするんでしょ。
「次」を読んでる間に「前」に読んだバイト列のコンペアを行うんだよ。
263デフォルトの名無しさん:2007/10/08(月) 18:51:35
>>262
なしてそんな分かりきったことをわざわざ言われにゃならんのだ
264デフォルトの名無しさん:2007/10/08(月) 19:00:56
それは本当に分かってたら253のようには決して書かないからだねw

nバイトのコンペアが終了する間に次のバイト列のリードが終わってなかったら?
あるいは逆の場合は?
265デフォルトの名無しさん:2007/10/08(月) 19:02:48
>>264
違うね
読み込みに100秒、比較に1秒かかるとする
順番にやったら101秒かかるが
非同期にやれば100秒ですむ
どっちか早い方の時間になる
266デフォルトの名無しさん:2007/10/08(月) 19:08:28
>>148
ファイル読み込みだけを考えると、
非同期I/Oつかおうがつかうまいが、
かかる時間は変わらない

非同期I/Oにして自由になった時間を何に使うかが問題
メモリコンペア程度のつまらん処理なら
ファイル読み込み>>>>>>>>>>>>>>>>メモリコンペア
だろうから、非同期I/Oにしたところで効果は薄い
ようは、自由になった時間遊ばせないだけの仕事があるのかということ
仕事が無いのに自由になっても結局遊ぶだけだ
267デフォルトの名無しさん:2007/10/08(月) 19:08:37
>どっちか早い方の時間になる
おいおいマジかよw
268デフォルトの名無しさん:2007/10/08(月) 19:09:07
理想的にはな
269148:2007/10/08(月) 19:12:36
>>266
なるほど! すげーわかりやすい・・・。

>>259
ういっす。
270デフォルトの名無しさん:2007/10/08(月) 19:15:04
非同期IO使ったことのないやつが多いんで言っておくが、ほとんど速くならん。むしろ遅くなるケースが多い。
271デフォルトの名無しさん:2007/10/08(月) 19:18:15
ディスクへのI./Oはオーバーヘッドでかすぎて非同期は速度体感できないくらいだよ
272デフォルトの名無しさん:2007/10/08(月) 19:18:16
>>270
にわかには信じられないね。
具体的にどういう理由でそうなるのか説明できる?
273デフォルトの名無しさん:2007/10/08(月) 19:21:12
スレッド間で同期取るのに掛かるコストが、メモリを比較するのに掛かるコストを上回る。
274デフォルトの名無しさん:2007/10/08(月) 19:47:27
おいおい「コスト」が掛かるのはIOの方じゃなかったのかよw
ネタか釣りか何か知らんが、さっきから意味不明なレスが多すぎないか
275デフォルトの名無しさん:2007/10/08(月) 19:48:52
同期: IO + 比較
非同期: IO + スレッド同期
276デフォルトの名無しさん:2007/10/08(月) 19:51:50
スレッド同期はCPUがやるんだから
IO中の余ってるCPUパワーでやればいいんじゃねえの
277デフォルトの名無しさん:2007/10/08(月) 19:57:47

おーい、これ見ろおまいら。

これが政府が答えられずに手も足もでなくなった最優秀質問だぜぃ!!!
長妻議員を総理大臣にしようぜい!!!

開会日 : 平成19年10月3日 (水) 長妻昭(民主党・無所属クラブ)  14時 56分  1時間 23分
http://www.shugiintv.go.jp/jp/wmpdyna.asx?deli_id=36730&media_type=wb&lang=j&spkid=578&time=02:04:16.0
278デフォルトの名無しさん:2007/10/08(月) 19:58:13
コピペ君って馬鹿だな、まで読んだ。
279デフォルトの名無しさん:2007/10/08(月) 20:01:51
何度か出てるが、比較があまりにも軽いからほぼ効果は出ない。
非同期IO機能は一般的に同期IOよりスループットは落ちる。
よってCPU処理がある程度負荷が高い場合で無いとむしろ効率は悪化する。

それから、単なるシーケンシャルの読み込みだとOS側のバッファなんかで実質
バックグラウンドで読んでるのと同じになって、さらに非同期の効果は無くなる。
280デフォルトの名無しさん:2007/10/08(月) 20:04:13
うんだからそんなことな一度に読み出すバイト数nの関数だから
一概には言えないって言ってるでしょ。
281デフォルトの名無しさん:2007/10/08(月) 20:04:15
なるほど
OSって偉いなあ
282デフォルトの名無しさん:2007/10/08(月) 20:14:17
>>278
このコピペって、あちこちで見るけど、貼ってるやつは常駐してるのか?
283デフォルトの名無しさん:2007/10/08(月) 20:44:15
おまえらコード書いて比較しろよw
284デフォルトの名無しさん:2007/10/08(月) 21:03:00
コードを書くのはいいが、I/Oにかかる時間がメモリ上の比較と比べて時間差がありすぎなので、
byte / int 幅の問題は単純にそれだけで比較したほうがいいと思う。

あとファイルI/Oだけに着目すると下記のバッファサイズでも多少変わる。
32k−64kバイトあたりがパフォーマンスがいい感じで1Mとると逆に遅くなった。
new FileStream(file1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, buffer_size)
285デフォルトの名無しさん:2007/10/08(月) 21:51:22
だべりながらも手を動かさないというこの感じね
286デフォルトの名無しさん:2007/10/08(月) 22:01:11
おまえらがんばれ! マジがんばれ!
287デフォルトの名無しさん:2007/10/08(月) 22:13:09
パフォーマンスに関する議論を長くやるコツは
実測せず、煽り気味に想像でレスをする事です
288デフォルトの名無しさん:2007/10/08(月) 22:51:51
最近は便利なクラスライブラリが沢山あるからちょっとしたアルゴリズムも実装できない
連中ばっかだな・・・
289デフォルトの名無しさん:2007/10/08(月) 22:54:25
そうやって誰でも簡単にプログラミングできるのがオブジェクト指向の理想なんだろうけど

まぁ、困ったもんだよな
290デフォルトの名無しさん:2007/10/08(月) 23:23:51
ポトペタ環境じゃなきゃ書けない奴とか
Makefileも書けない奴とか

まぁ、困ったもんだよな
291デフォルトの名無しさん:2007/10/08(月) 23:47:40
いまさらMakefileかけるかけないで判断されても困るだろ。
はっきりいうが

そ ん な も ん は 過 去 の 遺 物 だ
292デフォルトの名無しさん:2007/10/08(月) 23:50:07
ListViewでForeColorで行全体の文字色を変えているのですが
DrawSubItemでサブアイテムに自前の処理を入れると
ForeColorで指定した文字色が無効になってしまうようなのですが
行全体の文字色を変えるにはどうしたら良いですか?

最後にe.DrawDefault = true;でデフォルトの処理に放り投げても駄目だした。
293デフォルトの名無しさん:2007/10/09(火) 02:14:23
C厨こっちにもきてんのかよw

>>289
まず「オブジェクト指向」理解しようぜ
294デフォルトの名無しさん:2007/10/09(火) 02:17:41
>>291
だよな。
Makefileとか言うくせにcsproj書けないやつが多くて困る。
295デフォルトの名無しさん:2007/10/09(火) 03:22:58
csprojを手書きしてどうすんの
296デフォルトの名無しさん:2007/10/09(火) 03:25:11
MSBuild手書きで使うとか強すぎる
297デフォルトの名無しさん:2007/10/09(火) 03:53:26
>>295
VSの不具合でcsprojの手修正が必要な事もある。
普通に使ってりゃ気にする必要ないんだけどね。
298デフォルトの名無しさん:2007/10/09(火) 04:28:10
ミニマムで必要なのはこれだけ
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Compile">
    <Csc Sources="test1.cs" TargetType="Exe" Optimize="true" />
  </Target>
</Project>
299デフォルトの名無しさん:2007/10/09(火) 06:56:26
うぜー

Console.WriteLine("   ,;f     ヽ       ");
Console.WriteLine("  i:         i      ");
Console.WriteLine("  |         |      ");
Console.WriteLine("  |        |  ///;ト, ");
Console.WriteLine("  |    ^  ^ ) ////゙l゙l;");
Console.WriteLine("  (.  >ノ(、_, )ヽ、} l   .i .! | ");
Console.WriteLine("  ,,∧ヽ !-=ニ=- | │   | .| ");
Console.WriteLine("/\..\\`ニニ´ !, {   .ノ.ノ ");
Console.WriteLine("/  \ \ ̄ ̄ ̄../   / .| ");
300デフォルトの名無しさん:2007/10/09(火) 09:58:53
MSBuildってなんかこう使いにくいんだよね。
antのが分かりやすかった気がする。
301デフォルトの名無しさん:2007/10/09(火) 10:48:28
>>298
csc -O test1.csと言うだけのために冗長だよなあ
まあXMLだから、スキーマ知ってりゃ適当に自動生成すりゃいいだけなんだが

  
302デフォルトの名無しさん:2007/10/09(火) 13:08:39
非同期IOの処理だけど、Readは常時複数リクエストをキューイングしておかないと、
リクエスト毎に平均してディスク半回転分の時間が無駄になる危険が増すので
なるべく多重で発行しておくべきですよ。

特に物理的にも連続して配置されているデータのシーケンシャルな読み出しの場合。
書き込みはどうでもいいけど。

リクエスト1個で前のが終わってから次のリクエストを発行、なんていうのんびりした
発行の仕方だと>>266みたいに面倒なだけで意味ないってことにもなりかねない。
303デフォルトの名無しさん:2007/10/09(火) 13:11:07
だからコード書いて比較したうえでいってんだろうな?
304デフォルトの名無しさん:2007/10/09(火) 13:25:53
比較のためだけのコードは書いたことないけど、
DVD一枚分とかのISOイメージみたいなもののハッシュを計算するプログラムでは
常にリクエストが空にならないようにしとくのとそうでのないのでは倍くらい速度が変った。

コードが複雑になるのを避けつつ効率化するだけなら、
一度のリクエストで読む量を100Mとかに増やしてもいいわけだけど、
キャンセルボタン押したときの反応に時間かかることがあって却下された・・・
305デフォルトの名無しさん:2007/10/09(火) 13:35:24
だから実際に書いてから(ry
306デフォルトの名無しさん:2007/10/09(火) 13:38:19
暇ができたらテストのためのコード書いてもいいけど、別に>>305が書いてくれても
いいんじゃない?どうやろうが差がないよ、とか妙な主張したいならさ。
307デフォルトの名無しさん:2007/10/09(火) 13:42:17
むちゃくちゃだなw
308デフォルトの名無しさん:2007/10/09(火) 13:42:28
多分比較はLINQのSequenceEqualとか使えばもっと早くなるんだろうな
309デフォルトの名無しさん:2007/10/09(火) 15:54:52
同期I/O覚えるより、スレッド覚えたほうが
役に立ちそう
310デフォルトの名無しさん:2007/10/09(火) 16:07:22
常識的に計測しないでパフォーマンスの議論するのは時間の無駄
311デフォルトの名無しさん:2007/10/09(火) 16:27:48
脳内妄想
312デフォルトの名無しさん:2007/10/09(火) 16:28:40
そんなことを言いながらも
結局誰一人手を動かさないのであった
313デフォルトの名無しさん:2007/10/09(火) 16:38:24
すでに相談者は納得して買ってますから。
314デフォルトの名無しさん:2007/10/09(火) 17:18:51
そういや、>>308 に関連して、ちょっと 別の話だけど、
LINQ の標準クエリって大半がラムダ式を引数に取るのに、
SequenceEqual とかの比較系だけは、
比較デリゲートじゃなくて IEqualityComparer を取るよね?

デリゲートが匿名で作れるのに対して、
IEqualityComparer は匿名で作れないから使いづらいんだけど。
315デフォルトの名無しさん:2007/10/09(火) 18:02:11
買ってますからじゃなくて帰ってますからだた
316デフォルトの名無しさん:2007/10/09(火) 18:11:06
>>314
確かに意味わからんなあ
317デフォルトの名無しさん:2007/10/10(水) 08:58:34
匿名クラスがあったら対応できるのにね。
>>308 の件だがディスクIOなしの16Mのバイト配列で比較したらforを使ったのと変わらなかった。
SequenceEqualは特別なことはやってないもよう。

for (int i=0; i<size; i++) if (b1[i] != b2[i]) return false; return true;

return b1.SequenceEqual(b2);
で比較。
318デフォルトの名無しさん:2007/10/10(水) 18:38:18
DataGriDviewで、multiSelectをtrueにして複数選択を可能にしているのですが、
選択方法を、CTRL+クリック から 普通にクリックして選択・非選択を切り替えれるように
出来ますかね?

CellClickイベントで頑張ろうと思ったのですが、うまくいかなくてorz
319デフォルトの名無しさん:2007/10/10(水) 21:29:40
長方形を描画したくてdobonネットさんの
とこからサンプルを見てこのように書いたのですが
描画されないのは何が問題ですか?
public Form1() {
 InitializeComponent();
 Graphics g = this.CreateGraphics();
 Pen p = new Pen(Color.Black, 1);
 g.DrawRectangle(p, 10, 20, 100, 80);
 p.Dispose();
 g.Dispose();
}

http://dobon.net/vb/dotnet/graphics/drawrectangle.html
ここにはこれだけ書けばよさそうな感じですが・・・。
320デフォルトの名無しさん:2007/10/10(水) 21:39:36
全部問題っていうか君のお頭の問題でしょ。
せっかくdobon氏が丁寧に書いてくれてるんだからちゃんと読めよw

CreateGraphicsメソッド使え、なんて書いてあるか?
書いてねえよw
しかもコンストラクタで実行ってアホかw

まだ存在してもいないキャンバスに絵が描けるわけがないだろ
321デフォルトの名無しさん:2007/10/10(水) 21:40:14
CreateGraphicsは普通使わない
protected override void OnPaint(PaintEventArgs e){
Graphics g = e.Graphics;
//ここで描画
//g.Dispose()は不要
base.OnPaint(e);
}
322デフォルトの名無しさん:2007/10/10(水) 22:07:34
base.OnPaint(e)は先にやったほうがよくね?
323デフォルトの名無しさん:2007/10/10(水) 22:14:36
そうだね
書いてから自分でも思った
324デフォルトの名無しさん:2007/10/10(水) 22:29:37
商用のWindowsアプリをC#で書いてるって人いる?
325デフォルトの名無しさん:2007/10/10(水) 22:34:13
ノシ
326デフォルトの名無しさん:2007/10/10(水) 22:36:35
>>324
C#で書かれたアプリケーションをお金を払ってまでも使いたい人がいると思いますか?
327デフォルトの名無しさん:2007/10/10(水) 22:39:02
質問スレでむやみに煽らないように
328デフォルトの名無しさん:2007/10/10(水) 22:45:14
>>324
8000本ぐらい売れた。
329デフォルトの名無しさん:2007/10/10(水) 22:46:27
おめ
330デフォルトの名無しさん:2007/10/10(水) 22:50:27
>>328
ソフト名晒せばもっと売れんじゃん
331デフォルトの名無しさん:2007/10/10(水) 23:36:31
http://kouteizu.webi.co.jp/
これはC#だそうな。
2万本売れたと聞いた。
332デフォルトの名無しさん:2007/10/10(水) 23:56:57
海外じゃC#で書いたコンポーネントいっぱい出てるけどね
333デフォルトの名無しさん:2007/10/11(木) 00:00:41
>331
サーバー側はJavaでstrutsあたりだったと思う。
それ用にわざわざLinuxのサーバーを1台動かしてるよ。
クライアント側は一部のツールにC#が使えるようになってるだけで
さすがにドングルとかで認証してるんだし全部C#とは思えない…
ドングルが必要なので自分は使ってないので実際のアプリがどうなってるかはよくわからんが。
334デフォルトの名無しさん:2007/10/11(木) 00:12:57
サーバーなんて必要ないが?
335デフォルトの名無しさん:2007/10/11(木) 00:15:19
C#はフロントエンドに使っているな〜。一番楽で癖のないGUIを作れる。
336デフォルトの名無しさん:2007/10/11(木) 00:16:32
>>326
商用って何か分かってる?
VBAで書かれたソフトだらけですが何か?
337デフォルトの名無しさん:2007/10/11(木) 00:17:57
>>335
それがクセだらけ。

ctr-cとか使えない。
338デフォルトの名無しさん:2007/10/11(木) 00:26:19
釣られないもん
339デフォルトの名無しさん:2007/10/11(木) 00:29:39
商用:ヨドバシで売ってる
業務用:デスマーチの産物
340デフォルトの名無しさん:2007/10/11(木) 01:04:27
商用でも.NET製品色々出てるし、.NETだから商用では使えないなんてのは固定観念だろ
どんな用途で選ぶかってことだけなんだから
341デフォルトの名無しさん:2007/10/11(木) 10:52:35
>>333 お舞のいってるサーバー部分が本当だったとして、そんなのC#で楽勝に組めますが( ´Д`)なにか??
342デフォルトの名無しさん:2007/10/11(木) 11:33:33
MS OfficeもC++製だし、そろそろ騙されていることに気付こう。
343デフォルトの名無しさん:2007/10/11(木) 11:52:04
>>342
マ板だけにしてくれ
344デフォルトの名無しさん:2007/10/11(木) 13:52:48
VS2005のVC++のエディタの一部は.NETだよ
345デフォルトの名無しさん:2007/10/11(木) 14:03:28
騙すとか騙されるとかwww
346デフォルトの名無しさん:2007/10/11(木) 19:33:27
最新のSQLServerがどんだけ頑張って作られたと思ってるのか
347デフォルトの名無しさん:2007/10/11(木) 20:31:14
頑張ってるかも知れんがあれは糞すぎる・・・
348デフォルトの名無しさん:2007/10/11(木) 20:33:19
おまえオラクルと比較するんじゃねーよ
349デフォルトの名無しさん:2007/10/11(木) 21:27:02
何がどう糞なのか、後学のためにちょっと箇条書き的に希望
OracleもSQLServerも使ったことあるけど、DBの規模が小さいせいか糞ともなんとも思わなかったんですが・・
350デフォルトの名無しさん:2007/10/12(金) 07:51:18
・MS製
351デフォルトの名無しさん:2007/10/12(金) 09:02:27
Firebird使おうぜ!
352デフォルトの名無しさん:2007/10/13(土) 13:57:50
ListViewのItem追加の中身の文字列について質問です
文字列の先頭にタブ文字があってもこれは
認識されない仕様ですか?

353デフォルトの名無しさん:2007/10/13(土) 14:00:28
表示されないんならそうなんだろ
354デフォルトの名無しさん:2007/10/13(土) 14:02:16
先頭というか文字列の中にあっても認識されませんでした

表示する方法はないですか?
355デフォルトの名無しさん:2007/10/13(土) 14:05:41
オーナードローすりゃいいんじゃね
356デフォルトの名無しさん:2007/10/13(土) 14:31:35
できないんじゃないか?
357デフォルトの名無しさん:2007/10/13(土) 15:01:30
オーナードローかスペース*4に変換でいいんじゃね
358デフォルトの名無しさん:2007/10/13(土) 15:31:38
表示するだけなのでスペース*4でおkですね!
文字列の中に出た場合の計算がめんどいけど。
359デフォルトの名無しさん:2007/10/13(土) 17:12:43
360デフォルトの名無しさん:2007/10/13(土) 22:54:31
二つのTextBoxのスクロール同期をしているのですが、
二つとも仕込みをいれてるから片方動いたら片方も動いてそれにつられて
またもとの方にイベントがやってきて連鎖になって困ってます。

何かロックをかけるいい方法はないですかね。
361デフォルトの名無しさん:2007/10/13(土) 22:57:28
「俺からスクロール開始ね」ってフラグ立てりゃいいじゃん
362デフォルトの名無しさん:2007/10/13(土) 23:09:57
フラグを落とすタイミングは?
363デフォルトの名無しさん:2007/10/13(土) 23:36:30
フラグとか前世紀的な発想はどうかね。
2個のTextBoxの動作を調停する'Mediator'を作る方が考え方としてはシンプルだよ。
コードの量は増えるけど。
364デフォルトの名無しさん:2007/10/13(土) 23:39:58
DataGridView使えば?
365デフォルトの名無しさん:2007/10/13(土) 23:41:44
もう同期のとこまでつくりこんでるので、一から
書き直しは手痛いっす。
フラグを100msくらいにタイマーで落とせばいいかな。
366デフォルトの名無しさん:2007/10/13(土) 23:47:53
そんな手痛いほど作りこんでるようには見えないけどw
>>363でも結局実装はフラグでやるんだろ
367デフォルトの名無しさん:2007/10/14(日) 02:01:26
アクティブコントロールかどうかみたら?

1.TextBox1スクロール
2.TextBox2がスクロールされる
3.それにつられてTextBox1がスクロールされる ← アクティブならスクロールしない

2の時点でTextBox2がアクティブになったら使えないけどね。
368デフォルトの名無しさん:2007/10/14(日) 02:04:54
というか同期の基本は比較して違っていたときのみ変更するだと
思うんだがそれではいかんのか
369デフォルトの名無しさん:2007/10/14(日) 08:11:40
>>367
Focusedプロパティではないですよね?

>>368
すみません、それ教えてください。
もしくはそのようなサイトがあれば・・・。
370デフォルトの名無しさん:2007/10/14(日) 08:19:45
【ラヂヲ噴霧】(らぢをふんむ)

街中を歩きながら、「ラヂヲ・・ラヂヲ・・」とつぶやくこと。
誰に話しかけるでもなく、そんなに大きくない声で発声する。
ラヂヲ教を認知させるための手段の一つ。
371デフォルトの名無しさん:2007/10/14(日) 10:49:44
コピペ君って馬鹿だな、まで読んだ。
372デフォルトの名無しさん:2007/10/14(日) 10:58:13
コピペ君って馬鹿だ、なまで読んだ。
373デフォルトの名無しさん:2007/10/14(日) 11:44:00
>>369
タイマ使うんだったら、前の両方の値を覚えといて変化した方に合わせれば簡単なんじゃね
美しくないけど
374デフォルトの名無しさん:2007/10/14(日) 17:09:16
>367,369
1.TextBox1スクロール
2.TextBox2がスクロールされる
3.それにつられてTextBox1がスクロールされそうだけどスクロール位置が同じだからスクロールしない。
375デフォルトの名無しさん:2007/10/14(日) 17:31:28
>>374
すみません、その方法は3の時に既にTextBox1がスクロールされてたら
ってことにはならないでしょうか。ならなければいいんですが。

大変申し訳ないですが、今しがたフラグ方式でできたのでこれで
いこうと思います。タイマもつかわずに出来る方法ができました。

今のスクロールポジションをSendMessageする人をMediator?じゃないです
けど、調停する人がいて(というよりもTextBox二つを持つ上のレイヤーの
クラス)
スクロールされたらこの人にコールバックしてもう片方にSendMessage
します。そしてその時に1回だけフラグを立てておいて、送られた方から
コールバックがきてもフラグが立ってるのでこっちはSendMessageせずに
フラグを落とすだけにします。
そもそも1回のSendMessageにつき1回のスクロールイベントが飛ぶのだから
フラグを落とすタイミングはここにすればよかったんですね。
>>361が言ってたのはこういうことだったのかとわかりました。

本当にありがとうございました。
376デフォルトの名無しさん:2007/10/15(月) 13:18:56
Graphicsで描画していて、背景が白の中に二つの色付きの矩形があって、その二つの矩形が重なった部分だけ
白くなるようにしたいのですが、どういう処理をすればよいでしょうか? 生のビットマップのデータを操作する以外
の方法でお願いします。
377デフォルトの名無しさん:2007/10/15(月) 13:22:35
重なった部分に白い矩形を描けや
378デフォルトの名無しさん:2007/10/15(月) 13:26:55
>>377 重なった部分を判定する方が難しくないっすかね・・・
ちなみに描くのは矩形だけではなくて線とかも描きます。
画像のチャンネルいじればいいのかなとか思いますが画像処理の知識がゼロなんで
379デフォルトの名無しさん:2007/10/15(月) 13:29:42
Rectangle構造体のスタティックメソッドにそんなんがあったかな
380376:2007/10/15(月) 13:36:08
Intersectですかね。
描くのが矩形だけじゃないので他に方法ないっすか?
381デフォルトの名無しさん:2007/10/15(月) 13:37:27
Pathとかにあるんじゃねーの
しらん
382376:2007/10/15(月) 13:37:45
あ、あと>>376の最後の文は撤回で、生のビットマップのピクセル扱う方法でもいいですw
383デフォルトの名無しさん:2007/10/15(月) 13:43:29
>>376
>Graphicsで描画していて、背景が白の中に二つの色付きの矩形があって、その二つの矩形が重なった部分だけ
>白くなるようにしたいのですが、どういう処理をすればよいでしょうか?

やりたいこと自体この質問とは全然違うっぽいので、もういちどちゃんと
何がしたいのかを書かないと誰もまともには答えられないぞ。
抽象化できないなら、具体的に何をしようとしてるのか書く。

エスパーすると「C# の Graphics で xor 描画みたいなことはできますか?」
という質問の類のような気がするが・・・・

384376:2007/10/15(月) 13:46:00
>>383 すんません、要は、白い背景があって、その上に色々な図形を一つの同じ色で描くのですが、それらが
相互に重なった部分だけ白抜きされるようにしたいのです。
385デフォルトの名無しさん:2007/10/15(月) 13:50:24
半透明で描画して、重なってて色が違うところだけ白抜きするとかでいいんじゃない?
386デフォルトの名無しさん:2007/10/15(月) 17:20:17
PathでIntersectってなかったっけ?
387デフォルトの名無しさん:2007/10/15(月) 18:45:59
>>384
Region使えばできるよ。
dobon.netに解説があるから読め。

っていうか、なんで質問する前にこういうwebページで調べたりググったりしないの?
正直理解不能な神経だわ
388デフォルトの名無しさん:2007/10/16(火) 02:19:29
>>387は怒りながらも回答に加えて参考文献まで挙げてくれる
ナイスガイだけど、最後の2行に引っかかった。
そもそもRegionとかPathとかを知らないようなので、
ググってもなかなか正解にはたどり着けない気がする。
あと、DobonだとRegionの説明は「領域を塗りつぶす」ってタイトルだから
そこに正解があるとは気付きにくい(領域を塗りつぶすってのと重なりの処理が繋がらない)。

>>376はちゃんと検索してWebページも調べた上でここに来たのかもしれない。
それを確認せずそこまで強く言うことは無いと思うんだ。
まあ、ふらっと行けって言われたらそれまでだけど。
389デフォルトの名無しさん:2007/10/16(火) 08:43:46
>>387
「ググれ」で済むなら、このスレいらん。おまいが出て行け!
おまえ何様のつもりだ?このスレの主にでもなったつもりか?
キモヲタはさっさと市ねよ。
390デフォルトの名無しさん:2007/10/16(火) 08:50:50
>>389
君は余計
>>388氏を見習いなさい
391デフォルトの名無しさん:2007/10/16(火) 08:54:15
ご立派なもんだな、このスレ主様はよw
392デフォルトの名無しさん:2007/10/16(火) 08:57:59
はいはい
じゃー俺も>>388を見習いますよ
393デフォルトの名無しさん:2007/10/16(火) 10:28:20
スレ主ってなに
394デフォルトの名無しさん:2007/10/16(火) 10:48:42
mixiとの勘違い君ですかw
395デフォルトの名無しさん:2007/10/16(火) 10:49:43
オマイラ暇ならふらっとの問題も解決してやれよ
396デフォルトの名無しさん:2007/10/16(火) 10:57:49
レス番号plz
397デフォルトの名無しさん:2007/10/16(火) 11:09:39
>>393
このスレにもおわす電子妖精。
信仰ポイント集めれば誰かが萌えキャラ化して下々の者にもお姿を
拝見出来るようになる。
398デフォルトの名無しさん:2007/10/16(火) 23:00:08
あ〜ご立派ご立派。ここのスレ主気取りのキ●ガイ様はよう。
399デフォルトの名無しさん:2007/10/17(水) 00:38:29
スレ主なんかいたんだw
400デフォルトの名無しさん:2007/10/17(水) 00:51:23
居るわけないだろ
401デフォルトの名無しさん:2007/10/17(水) 00:55:48
C#以外の話題禁止
402デフォルトの名無しさん:2007/10/17(水) 01:06:06
ここはC#erの雑談スレですよ
403デフォルトの名無しさん:2007/10/17(水) 01:19:40
.netのもっさりはみなさんは、どう解決していますか?
404デフォルトの名無しさん:2007/10/17(水) 01:49:33
もっさり?
DBサーバが速いせいか快調だよ
C/S業務アプリだけど
405デフォルトの名無しさん:2007/10/17(水) 08:54:06
(1)プラグインインターフェイス.dll
(2) (1)のインターフェイスを実装したプラグイン1.dll
(3)メインプログラム

という構成で

(3)から動的に
(2)を参照の追加?をして
(2)の実装クラスを(1)のインターフェイスに生成する
方法は用意されているのでしょうか?
406デフォルトの名無しさん:2007/10/17(水) 09:16:09
>>405
インターフェイスは初めから作っておいて、メインとプラグインの両方から参照じゃいかんの?
407デフォルトの名無しさん:2007/10/17(水) 09:32:55
されてない。

仮にできたとして、そのインスタンスは誰が操作できるのか
408デフォルトの名無しさん:2007/10/17(水) 09:35:06
>>405
動的にインタフェースを追加して、どうやってそのインターフェースを扱うつもりだ?
ユーザー操作によってReflectionを使ってそのインターフェースを実装したクラスをコントロールするというならいくらでも出来るだろ。
つうかそんなのやろうとしてるぐらいだったらチャラッとサンプルプログラム作ってみなよ。
409デフォルトの名無しさん:2007/10/17(水) 10:06:29
Assembly asm = Assembly.LoadFrom("Foo.dll");
Type class = asm.GetType("Foo");
IFoo foo = (IFoo) Activator.CreateInstance(class);
--
csc /t:library /r:IFoo.dll Foo.cs
csc /r:IFoo.dll Hoge.cs
410デフォルトの名無しさん:2007/10/17(水) 10:12:03
exeとdllが逆だろ
exeの方がライブラリで、dllの方をexeにせえよ
411デフォルトの名無しさん:2007/10/17(水) 10:42:54
.NET 3.5 に追加されるらしい Add-Ins ってのならあるけど。
http://msdn2.microsoft.com/en-us/library/bb332048(VS.90).aspx

自動生成の機能とかはないとは思うけど、
標準ライブラリにこういうものあるなら
その作法に従っとくのがいい気がする。
まあ、まだ人柱情報もあんまりなくて、良し悪し分かんないけど。
412405:2007/10/17(水) 11:08:21
みんなありがとう。

抽象クラスならば、
IsSubclassOfで派生クラスを検出可能でした。

インターフェイスの場合は・・・ちょっと分からなかった。

参考URL:
ttp://d.hatena.ne.jp/isa1122/20070828/1188318861
413デフォルトの名無しさん:2007/10/17(水) 16:07:10
for文を使って連番のイメージを1秒おきに表示させたいのですが、
Uri uri = new Uri(i.ToString() + ".jpg", UriKind.RelativeOrAbsolute);
i++

これにThread.Sleep(1000)を使ってもうまく機能しません
1秒止まった後、一番最後の画像のみ表示されます
どうやればうまくいくのでしょうか?
414デフォルトの名無しさん:2007/10/17(水) 16:08:03
>>413
そりゃスレッドを止めたらだめだろ。
ターマー使え。
415デフォルトの名無しさん:2007/10/17(水) 16:09:59
>>412
IsAssignableFromのことを言ってるのか?
416デフォルトの名無しさん:2007/10/17(水) 16:47:13
>>414
タイマーを使ってもうまく動かないのです
どのように書けばよいのでしょうか?
417デフォルトの名無しさん:2007/10/17(水) 17:23:55
int カウンタ = 0;

void タイマー_ティック( ... )
{
 if( カウンタ < max ){
  画像表示( カウンタ++ );
 }
 else{
  タイマー.Enabled = false;
 }
}
418デフォルトの名無しさん:2007/10/17(水) 21:00:32
>>413
制御構造がおかしいだけだろ。
ソースさらせ。
419デフォルトの名無しさん:2007/10/17(水) 21:36:56
RichTextBoxにテキストを入れる速度がとても遅い気がするんですけど、
入れ方がTextプロパティに+=で代入してくのはまずいですか?

元テキストが全て改行付きでstring[]配列に入っているんですが
AppendText()だと改行が2個ついちゃうのでRichTextBox.Text += str[i]
みたいな感じでいれてるんですけど、900行くらいで5秒くらい
かかってます。こんなもんですか?それとも他に方法ありますか?
420デフォルトの名無しさん:2007/10/17(水) 21:47:01
そらゃStringの+=は遅いわな
421デフォルトの名無しさん:2007/10/17(水) 21:48:59
StringBuilderで

stringはimmutableなので+=の度に毎回インスタンスが作られます
422デフォルトの名無しさん:2007/10/17(水) 21:49:42
>>419
StringBuilderを使って一括で代入すれ。
Textプロパティの変更はかなり重い操作。
423デフォルトの名無しさん:2007/10/17(水) 22:11:11
おおぉぉ

さすがですね!即答だ。。。
StringBuilderで調べたら
dobonさんのとこにもありましたね
http://dobon.net/vb/dotnet/string/stringbuilder.html

即レスには驚きでした。ありがとうございました!

424デフォルトの名無しさん:2007/10/17(水) 22:11:48
>そらゃStringの+=は遅いわな
話はもっとややこしいw
425デフォルトの名無しさん:2007/10/17(水) 22:19:59
質問主です。
さっそくStringBuilderでやってみました。

めちゃくちゃ早いですね・・・・
勉強になりました。
426デフォルトの名無しさん:2007/10/17(水) 22:24:49
テキストプロパティーをいじるのが致命的にあかんので
stringのローカル変数に+=してけば体感できるぐらいの差は出なかったと思うよ
StringBuilderの方が圧倒的に早いけど、
stringの+=を体感できるほど遅くするには結構足し合わせないといけない
427425:2007/10/17(水) 22:36:19
普通プロパティの値ってそこのスコープで2回以上使う場合
変数に入れたりした方がいいのですか?
プロパティにアクセスするとそんなに遅くなるのですか?
428デフォルトの名無しさん:2007/10/17(水) 22:38:11
内部で色々してたり、GUIの場合再描画したり
429デフォルトの名無しさん:2007/10/17(水) 22:38:54
テキストボックスのTextに入れたら
なんか余計な処理をいろいろやるんだろうね
わからんけど
普通は別にプロパティそのまま使えばいい
430425:2007/10/17(水) 23:00:48
おお
何かプロパティにアクセスするのが悪みたいに思ってました

では普通に使っていいけど、ループとかには使うなってことで
いいですか?
431デフォルトの名無しさん:2007/10/17(水) 23:04:59
StringBuilderの方はあらかじめメモリを確保しているから。
その都度メモリを確保して処理するStringよりパフォーマンスは上。
432デフォルトの名無しさん:2007/10/17(水) 23:10:32
一概にプロパティだからどうという判断はできんよ。
ただ、特にコントロールのプロパティは余計な処理が多いことが多い。
433デフォルトの名無しさん:2007/10/17(水) 23:12:44
先生、
string a = "1" + "2" + …"100"
をStringBuilderにしたら圧倒的に遅くなりました!
434デフォルトの名無しさん:2007/10/17(水) 23:16:48
100ぐらいじゃ体感できるほど遅くはならんな
それを何回もやれば別だが
435デフォルトの名無しさん:2007/10/17(水) 23:17:59
ああ、まあ冗談だ、言っててみたかっただけw
436デフォルトの名無しさん:2007/10/17(水) 23:18:24
リテラルの連結なんて朝メシ前ですよ
こう見えてCの時代からやってます

437デフォルトの名無しさん:2007/10/17(水) 23:23:16
>>433
それ右辺がコンパイル時に定数式として結合されるからノーコスト。
438デフォルトの名無しさん:2007/10/17(水) 23:28:08
string.GetHashCode()って重複する事はないの?
439デフォルトの名無しさん:2007/10/17(水) 23:28:54
そりゃ重複することはある
int値なんだから40億ぐらいの値しか取れないし
440デフォルトの名無しさん:2007/10/17(水) 23:29:47
桁一つ多いよw
441デフォルトの名無しさん:2007/10/17(水) 23:30:40
あそっか4億か
442デフォルトの名無しさん:2007/10/17(水) 23:32:33
ちげえ
やっぱ42億じゃん
443デフォルトの名無しさん:2007/10/17(水) 23:33:21
>>440-441
やはり重複してしまうのですね
ありがとうございます
444デフォルトの名無しさん:2007/10/17(水) 23:34:40
stringは概念的には40億文字以上あってもいいわけだし
445デフォルトの名無しさん:2007/10/17(水) 23:41:06
>>437
だから冗談w
446デフォルトの名無しさん:2007/10/17(水) 23:41:23
int = String2文字 …たぶん。中には違法なデータがあるかも。
447デフォルトの名無しさん:2007/10/17(水) 23:42:05
一文字65536種類として二文字の各組み合わせですべて埋まるな
448デフォルトの名無しさん:2007/10/17(水) 23:43:23
三文字あればどれかと重複するな
449デフォルトの名無しさん:2007/10/18(木) 00:15:07
さぁ、みんなでハッシュが衝突する文字列ペアを探そうじゃないか
450デフォルトの名無しさん:2007/10/18(木) 11:26:06
そんなこといったらMD5だってデータが16バイト以上ならどれかと重複するわけだし
451デフォルトの名無しさん:2007/10/18(木) 13:16:42
public int GetHashCode()
{
fixed (char* str = ((char*) this))
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*) chPtr;
for (int i = this.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}
452デフォルトの名無しさん:2007/10/18(木) 15:50:29
フォーム配下に、関数を定義して
        private void ChangeYourNameEvent(string s) {
                this.Text = s;
        }

オートメーションのイベントに、登録し
        AppOjt.OnChange += this.ChangeYourNameEvent;

イベントが発生すると、上の関数が呼ばれるのですが
this.Text = s で例外が発生します
(MessageBox.show(s) ならOK)

どうも、呼び出された時には this が失われている様子なのですが
フォーム等のパーツへ反映させる方法って、あります???
453デフォルトの名無しさん:2007/10/18(木) 15:54:21
例外のメッセージは?
454デフォルトの名無しさん:2007/10/18(木) 16:12:10
>>453
--------
有効ではないスレッド間の操作:
コントロールが作成されたスレッド以外のスレッドからコントロール 'Form1' がアクセスされました。
--------
でした

関数の定義に問題があるのでしょうか???
Synchronize 辺りを調べ中です

455デフォルトの名無しさん:2007/10/18(木) 16:18:18
別のスレッドからだとアクセスできないから
form.Invokeを使ってformのスレッドに動かしてもらう必要がある
っていう話だと思うけどよく知らん
456デフォルトの名無しさん:2007/10/18(木) 16:21:57
それでいいよ
457デフォルトの名無しさん:2007/10/18(木) 16:30:15
ありがとうございます

なるほど this.InvokeRequired をチェックして、Invoke を使えということらしい
試してみます
458デフォルトの名無しさん:2007/10/18(木) 22:47:02
Web Browserコントロールに、
ローカルにあるswfが埋め込まれたhtmlを読み込ませ、表示させたいのです。
当然、
http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html
の設定で、ソフトもswfファイルも登録しているのですが
画面が真っ白のまま、何も表示されません。
ちなみに、IEで直接開くと、問題なく読めます。

ちなみに、サーバーにアップロードした場合、正常に読めましたが
今度は、Flash上のコントロールが、操作できません。
IEだと、操作は出来ます。

なので、セキュリティー設定か、何かの問題だと思ってるのですが・・・
このようなセキュリティー設定のプロパティーがWeb Browserクラスのメンバに見当たらないのですが、どうすれば良いのでしょうか?
よろしくお願いします。
459458:2007/10/18(木) 22:51:36
すみません。追記です。
後半の
>今度は、Flash上のコントロールが、操作できません。
ですが、キーボードのtabを押すと移動が出来て、エンターキーでボタンを押す事が出来ます。
何となくマウスイベントが伝わってないような雰囲気なのです。
460デフォルトの名無しさん:2007/10/18(木) 22:59:50
Flashの外側をクリックするとその直後だけクリックできるんだよね
461デフォルトの名無しさん:2007/10/18(木) 23:11:47
System.Windows.Forms.WebBrowserはいろいろ問題がありすぎるので
AxWebBrowser使わざるを得ない場合が多い
462デフォルトの名無しさん:2007/10/18(木) 23:45:15
Formのルールにあわせるために入力系をごにょごにょしてて
実装が中途半端な感じになっている。まぁバグみたいなもの
463デフォルトの名無しさん:2007/10/18(木) 23:50:46
「ごにょごにょ」言って誤魔化しるのは自分もじゃないかw
464デフォルトの名無しさん:2007/10/19(金) 00:12:51
あほかつまらんな。
465デフォルトの名無しさん:2007/10/19(金) 00:24:59
というか、ごにょごにょだの幸せになれるだの
特定の人格傾向の持ち主(まあ要するにヲタなんだと思うけど)しか使わない
言葉をよく平気で使えるよね。
466デフォルトの名無しさん:2007/10/19(金) 00:27:35
ごにょごにょ、幸せになれる
ってオタ用語だったの?
467デフォルトの名無しさん:2007/10/19(金) 00:29:17
ということにしたい人がいるらしい。
468デフォルトの名無しさん:2007/10/19(金) 00:33:37
>>465は反抗期か?
469デフォルトの名無しさん:2007/10/19(金) 00:51:42
オブジェクトをサーバ・クライアント間でやりとりするプログラム書いてて,
困ったことが起きたので相談に乗ってもらえないでしょうか.

 サーバ側:TcpListnerで待ちうけ
 クライアント側:TcpClientでサーバへ接続
 どちらも:TcpClientからNetworkStream取得してBinaryFormatterかまして通信

なぜかクライアント側だけCPU負荷が50%まであがるんです.
CPUはCore2Duoで,タスクマネージャで見ると両方とも50%あたりをうろうろしてるという・・・
サーバ側,クライアント側,ともに受信の無限ループのスレッドで組んでるんですが,
デシリアライズのときにStreamから情報がくるまではループはとまってます.
原因として考えられることがあったら教えていただけるとありがたいです.
470デフォルトの名無しさん:2007/10/19(金) 01:40:34
無限ループのスレッドで組んでるから。
471デフォルトの名無しさん:2007/10/19(金) 01:52:49
>469
ビジーループになってるから適当にThread.Sleep入れとけ。
472458:2007/10/19(金) 01:54:47
まず、HTTPサーバー上にアップロードしたFlashが埋め込まれたhtmlファイルですが
AxWebBrowserを使う事で、どういうわけかわかりませんがボタンのクリック含めて解決しました。
どうもありがとうございました。

ただ、ローカルに保存されている場合、やはり表示がされません。真っ白の画面です。
セキュリティー設定が原因だと思い
とりあえず、IInternetSecurityManagerを実装し、ProcessUrlAction()が呼び出された時
全てにreturn COM.URLPOLICY_ALLOW;を返してみましたが、やはりダメでした。

一体何が原因なのでしょうか・・・。
引き続きよろしくお願いします。
473デフォルトの名無しさん:2007/10/19(金) 02:44:19
>>472
ttp://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html
この設定は、あくまでIEの為の設定。
で、設定ファイルは
C:\Documents and Settings\ユーザ名\Application Data\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys
のsettings.solに保存されるわけだが
残念な事に、IEコンポネを使った場合、この設定を使ってくれない。
理由はわからないけどね。
474デフォルトの名無しさん:2007/10/19(金) 05:05:03
昨日学校の方で課題を2問出されたんですが何方か分かる方いらっしゃいますか?
プロジェクト名:kadai01
フォーム名:FrmCount
処理の内容:             結果
1.実行直後              初期画面が表示される   
2.(性別入力)ボタンクリック     (性別が選択されません)と表示される
3.性別(男性)を選択する
4.(性別入力)ボタンを2回クリック  1回目のクリックで(集計結果表示)ボタンが有効になる 
5.性別(女性)を選択する
6.(性別入力)ボタンを3回クリック  
7.(集計結果表示)ボタンクリック   男性2人 女性3人 と表示される
                    (性別入力)ボタンと(集計結果表示)ボタンが無効になる
8.3〜7の処理を実行 7の結果が表示される
9.(終了確認)のメッセージで     フォームを閉じる 
  (はい)ボタンクリック  
使用するコントロール、クラス、構文
1.RadioButtonコントロール
2.private 変数
テスト
 
475デフォルトの名無しさん:2007/10/19(金) 05:10:55
居ます。
476474:2007/10/19(金) 05:14:44
プロシージャ名     処理内容
FrmCount_Load     (集計結果表示)ボタンを使用不可になる

性別入力ボタン_Click  性別選択用ラジオボタン(男、女)が未選択の場合は、エラーメッセージを表示する
            性別選択用ラジオボタンが未選択でない場合は、(集計結果表示)ボタンを使用可にする
            性別を判断して、人数をカウントする(mintMan,mintWoman)

集計結果表示ボタン_Click  男性、女性の人数を表示する
              (性別入力)、(集計結果表示)ボタンを使用不可にする

集計結果リセットボタン_Click フォームの格コントロールを初期状態にする
               人数をカウントする変数を0クリアする

終了ボタン_Click フォームを閉じる

477デフォルトの名無しさん:2007/10/19(金) 07:52:11
>>463
ヒント:「まだ」WinFormsソースは公開されていない>お察しください
    単純に説明長くなる
478デフォルトの名無しさん:2007/10/19(金) 07:54:50
そう言えばソース公開されるらしいね
WinFormもWPFも
479デフォルトの名無しさん:2007/10/19(金) 09:58:51
Reflectorで見れるのに
480デフォルトの名無しさん:2007/10/19(金) 09:59:19
>>476
プロシージャってVBではないのですか?
ふらっとで質問した人?
481デフォルトの名無しさん:2007/10/19(金) 10:23:37
華麗なスルーっぷりに和露他
482デフォルトの名無しさん:2007/10/19(金) 11:48:03
>>479
デバッガが中に入れるようにするってのがポイント
483デフォルトの名無しさん:2007/10/19(金) 11:55:51
MySQL Connector/Net で開発してlinuxのmonoで動かそうとしても動きますかね?
484デフォルトの名無しさん:2007/10/19(金) 14:06:04
>>470,471
バイナリフォーマッタのデシリアライズでスレッドは止まっています.
だからループにSleepしても解決しませんでした.

ソースコードはこんな感じ

NetworkStream ns = tcpClient.Getstream();

threadClient = new Thread(delegate(){
 while(true){
  BinaryFormatter bf = new BinaryFormatter();
  object obj = bf.Deserialize(ns); ←ループはここで止まってます.
 }
});

threadClient.Start();

なんでここで止まってるのにCPU負荷が上がるのか不思議です.
485484:2007/10/19(金) 14:10:37
自己解決しました・・・
受信スレッドじゃない別のスレッドで無限ループが発生してた・・・('A`)
どうもすみません.お騒がせしました.
486デフォルトの名無しさん:2007/10/19(金) 14:22:51
アメーバみたいなブヨブヨした固体が、自由自在に変形して
移動するようなのを作りたい。
どう変形するかは事前に予測できませんので、
画像ファイルを何枚も用意してアニメみたいに・・・
ってやり方は不可です。

どうやるといいですかね?
普通にDrawLineとかで描画を繰り返すと若干チラチラしますね。
なにかスムーズに表現する方法知りませんか?
487486:2007/10/19(金) 14:24:57
補足しますが、アメーバはリアルでなくてかまいません。
とりあえず輪郭線くらいで十分です。
488デフォルトの名無しさん:2007/10/19(金) 14:28:27
ダブルバッファリング
489デフォルトの名無しさん:2007/10/19(金) 14:35:07
とりあえず、この辺か
http://msdn2.microsoft.com/ja-jp/library/db8dsek8(VS.80).aspx
490デフォルトの名無しさん:2007/10/19(金) 19:02:31
プロジェクトの全フォームの配色や、最大化・最小化のボタンを一気に変更する方法ってありますか?

491デフォルトの名無しさん:2007/10/19(金) 19:27:22
>>490
そういう質問はどういう回答を期待して言ってるの?
何か一発呼び出せば済む便利なメソッドが用意されてるはず、とでも思って
聞いてるわけ?

俺様が欲しいと思った処理なんだからライブラリの作者がきっと用意してくれてるに違いない、
っていう発想はセカイ系の発想そのものだな。
492デフォルトの名無しさん:2007/10/19(金) 19:47:44
最近、プログラ民具が面白くない
やっぱ、FPGAで画像圧縮プログラムをハードでやると面白いよ
493デフォルトの名無しさん:2007/10/19(金) 20:58:51
>>490
VisualStudio のスレで聞いてみたら?
494デフォルトの名無しさん:2007/10/19(金) 21:02:37
バッチでもマクロでも使って
*.Designer.csを書き換えたらいいんじゃね
495デフォルトの名無しさん:2007/10/19(金) 22:25:44
>>494
sed使えってことだね
496デフォルトの名無しさん:2007/10/20(土) 00:03:16
バイナリSJISファイルに6バイトで下記のようなデータが入っています。
0x0007, 0x0007, 0x0006, 0x0007, 0x0056, 0x0009
中身は日時情報みたいなのですが、どのようにしたら読み込めるのですか?
497デフォルトの名無しさん:2007/10/20(土) 00:07:40
バイナリSJISファイルの事はしらないけど、
2バイトづつBinaryReaderとかで読んでいけばいいんじゃね
498デフォルトの名無しさん:2007/10/20(土) 00:15:11
ただの二進化十進数のようにも見えるが
499デフォルトの名無しさん:2007/10/20(土) 00:22:20
>>497
byte[] read = br.ReadBytes(2);
として、その後が分かりません。
Encoding.GetEncoding(932).GetString(read)やってもダメですよね。検討違い?
500デフォルトの名無しさん:2007/10/20(土) 00:28:52
なんでSJISだと思ったの?
雲をつかむような話だね

501デフォルトの名無しさん:2007/10/20(土) 00:41:37
手がかりなさ杉
502デフォルトの名無しさん:2007/10/20(土) 00:51:52
2007/07/06 07:56:09

だよなあ……
503デフォルトの名無しさん:2007/10/20(土) 01:04:07
なんで6バイトなのに12バイトっぽい書き方するの?
504496:2007/10/20(土) 01:24:58
すいません。日時でなく、多分HHmmssじゃないかなと・・・。
会社でチラッと仕様書見ただけなので、またよく調べてみます。
テキストエディタ開くとSJISと出てたので信じてました。

すいません一旦中止して調べてから出直してきます。
505デフォルトの名無しさん:2007/10/20(土) 01:48:06
ファイルに書き込むとき FileMode.Truncate すると開いた時点でサイズが0になるけど、
その時点でアプリケーションが異常終了したら内容が消えちゃいますよね?

このサイズ0の期間をなくす方法ってありますか?
例えば別ファイルに書き出してそれを対象ファイルへとリネームするとか……
506デフォルトの名無しさん:2007/10/20(土) 02:15:41
ん?よく分からないのだけれどもどっち?
1.異常終了したら0バイトのファイルを削除したい
2.異常終了した場合でもその途中までを出力したい
507デフォルトの名無しさん:2007/10/20(土) 02:57:36
http://www.atmarkit.co.jp/fdotnet/special/networkprog/networkprog_03.html
このような通信(TcpClientからストリームを取得+送受信が別のスレッド)の例で
受信と送信が同時に起きた場合どうなりますか?
508デフォルトの名無しさん:2007/10/20(土) 03:04:09
送受信が別スレッドで動作するなら何の問題もありません。
509デフォルトの名無しさん:2007/10/20(土) 03:10:18
そもそも受信側はListner使って常にポート監視してるのでずっと動いている
510507:2007/10/20(土) 03:18:48
送信でのストリームへ書き込みと受信でのストリームからの読み込みが同時に発生しても競合とか起こらないんですか?
511デフォルトの名無しさん:2007/10/20(土) 03:21:25
競合って何の事言ってる?
512デフォルトの名無しさん:2007/10/20(土) 03:22:45
そんなのポートが同じならデータが混在するだろ
513507:2007/10/20(土) 03:28:56
>>511
受信データと送信データが同じストリーム使うのにlockとかいらないのかなと

>>512
受信は指定したポートから入ってくるんですが送信は勝手なポートから出てってます
514デフォルトの名無しさん:2007/10/20(土) 03:30:42
まず、同じストリームは使わない。IPEndPointが違うならデータは区別される。おやすみ。
515507:2007/10/20(土) 03:42:55
>>507のソースコード例だと
// クライアントがサーバとのデータのやりとりに使うストリームを取得
NetworkStream ns = client.GetStream();
clientReader = new StreamReader(ns, Encoding.UTF8);
clientWriter = new StreamWriter(ns, Encoding.UTF8);

となっててリードもライトも同じストリーム使ってる感じなのですが・・・

>>514
おやすみなさい
516505:2007/10/20(土) 10:59:47
>>506
「書き込みが全て完了するその時点まで、書き込み前の内容を保持したい」
ちょうど SQL の COMMIT みたいな感じで
517デフォルトの名無しさん:2007/10/20(土) 11:06:10
いったん別ファイルに書き出し
元ファイルリネーム
新ファイルリネーム
元ファイル削除
518デフォルトの名無しさん:2007/10/20(土) 11:47:17
リネームした瞬間がアウトだぜわひゃひゃ
519505:2007/10/20(土) 12:58:20
結局、書き換える直前にバックアップとっておくことにしました。
お騒がせしてすみません。
520デフォルトの名無しさん:2007/10/20(土) 13:04:35
DBみたいにメタファイルに更新を記録しておくとか
521デフォルトの名無しさん:2007/10/20(土) 13:40:33
>>518
再起動時にどのファイルが残ってるか確認してリカバリすればいいだけ
522デフォルトの名無しさん:2007/10/20(土) 13:47:16
>>516
最新OSのみ対応ってことにしてP/InvokeでTransactional NTFS使う。
523デフォルトの名無しさん:2007/10/20(土) 15:41:24
じゃMemoryStreamに書き出して保持しとけ。
もしくはFlushメソッドで途中まで書き出すとか
524デフォルトの名無しさん:2007/10/20(土) 18:23:13
もう解決したって本人が言ってるだろ。しつこいな。
525デフォルトの名無しさん:2007/10/20(土) 19:46:46
ここは本人が解決したら議論しちゃ駄目なスレになりました。
526デフォルトの名無しさん:2007/10/20(土) 21:43:58
ファイル比較で引っ張りまくったのはどの住人だよwww
527デフォルトの名無しさん:2007/10/20(土) 22:44:56
コントロールの描画を一時停止するようなメソッドありますか?
ちらつきを抑えたくて。
528デフォルトの名無しさん:2007/10/20(土) 22:53:59
>>527
この辺調べてみて
SuspendLayout
DoubleBuffered
529527:2007/10/20(土) 22:56:15
ちらつきの処理というのが
RichTextBox内の数行を選択して、文字の背景色を変えて
元のSelectionStartに戻ってくる
というものです。
ダブルバッファで回避とはまた違うと思うのですが。
530デフォルトの名無しさん:2007/10/20(土) 22:59:54
WM_SETREDRAW
531527:2007/10/20(土) 23:00:25
>>528
ありがとうございます。行き違いで書き込んでました。
SuspendLayoutとResumeLayoutはやってみたのですが、うまく
いかなかったです。
529で書いた処理で、行が多ければ多いほど一度選択による
反転がちらついてしまうように思います。
532デフォルトの名無しさん:2007/10/20(土) 23:01:01
最初っから詳細に質問したほうがいいよ
533527:2007/10/20(土) 23:11:27
今のところ無駄な抵抗として
VisibleでOffして処理してOn
しています。選択文字一瞬反転のちらつきよりはましです。
534デフォルトの名無しさん:2007/10/20(土) 23:11:54
530無視かよ!
535デフォルトの名無しさん:2007/10/20(土) 23:19:43
>>527 にコミニケーションの能力が欠如してるのはわかった。
ソースをアップしろ。そのほうが早いぞ。
536527:2007/10/20(土) 23:23:04
あっすみません!
WM_SETREDRAW を調べ中でした!

ソースは長いっす・・・。短縮できたらUPします。
537デフォルトの名無しさん:2007/10/20(土) 23:26:06
ソースなぞいらん 時間の無駄だ
538527:2007/10/20(土) 23:28:59
>ソースなぞいらん 時間の無駄だ
はい。では、WM_SETREDRAWでやってみます。
ありがとうございました。
539デフォルトの名無しさん:2007/10/21(日) 08:51:58
ファイルの書き込みについて教えてください。

System.IO.StreamWriterのWriteメソッドでファイルに書き込んでいますが
Discに確実に書き込まれたことを確認するにはどんな方法がありますか?
540デフォルトの名無しさん:2007/10/21(日) 09:04:43
あとで開いて読んでみる。
541デフォルトの名無しさん:2007/10/21(日) 10:30:38
>>539
Flush
542デフォルトの名無しさん:2007/10/21(日) 10:32:36
>>539
最初にFileOption.WriteThroughを指定して開き、適宜Flush()を呼べばいいと思う
「確認」にはならんが

>>540
他のプロセスに上書きされたり消されているかもしれんな
543デフォルトの名無しさん:2007/10/21(日) 10:36:24
AutoFlush 使えば Flush しなくても書き込んでくれるぜ

「確認」にはならんが
544デフォルトの名無しさん:2007/10/21(日) 10:57:29
ちょっと脱線するけど、StreamWriter.Writeとかって、たとえば書き込んでる対象の物理ディスクが
物理的にアクセス不能(ネットワークケーブルが切断されたとか、USBケーブルが抜かれたとかいう場合ね)
になった後で実行しても何の例外も投げない気がしたけど、これってどの階層の仕様と考えるべき?

StreamWriter自身?
.NET Framework?
Windows ?
545デフォルトの名無しさん:2007/10/21(日) 11:52:28
本当かどうかは知らんけど
.NetFrameworkかな
546デフォルトの名無しさん:2007/10/21(日) 11:52:40
Ctrl + Zのイベントを拾いたいんですけど
何で次のコードでひっかからないんでしょうか。

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Z) {
Console.WriteLine("Ctrl+Z");
}
この方法でCtrlがAlt、ZがDownとかだとうまくいくんですが・・・。
547デフォルトの名無しさん:2007/10/21(日) 11:59:49
普通にいけるが
548デフォルトの名無しさん:2007/10/21(日) 11:59:59
あれ?Z以外のDとかRとかだと拾います。。。
ってことは先にどこかに拾われてるってことか?
549デフォルトの名無しさん:2007/10/21(日) 12:04:44
本当かどうかは知らんけど
Windowsじゃね?
550デフォルトの名無しさん:2007/10/21(日) 12:07:01
わかりました。
MDIのShortCutKeyのプロパティで封じていたようです。
こんなことに・・・2時間も・・・
551デフォルトの名無しさん:2007/10/21(日) 14:20:11
>>544
NET Frameworkじゃね?
552デフォルトの名無しさん:2007/10/21(日) 14:27:17
>>551
これが悪名高い(?)遅延書き込みの効果なのかなとも思ったんだが、
またそれとは違うのかな。
553デフォルトの名無しさん:2007/10/21(日) 14:54:28
>>552
Delphiでは例外発生した記憶があるような気もしない訳でもない予感
554デフォルトの名無しさん:2007/10/22(月) 12:42:23
ライトスルーするとパフォーマンスがえぐいことになるぞ。
555デフォルトの名無しさん:2007/10/22(月) 16:38:51
原因がまったくわかりません。。。

アプリの設定情報を保存するのに、MDIなのですが、Formを閉じるイベントで
保存する仕込みをいれてて、子Formを作成しないときは保存できるのですが
子Formを作成すると、保存ができません。
INIファイルで保存していて、WritePrivateProfileStringを使っています。

このような経験された方いらっしゃいますでしょうか。

わかってもらうための詳細もどこを手がかりがなさすぎて
何を書いたらいいかわかりません。すみません。
「あれはちゃんと処理してる?」みたいに聞かれれば
それに対して答えます。

C#の神様助けて!
556デフォルトの名無しさん:2007/10/22(月) 16:40:56
無理w
557デフォルトの名無しさん:2007/10/22(月) 16:41:19
MDIの閉じるは変な処理するんだよな
よく覚えてないけど
558デフォルトの名無しさん:2007/10/22(月) 16:41:35
まずはなんで設定ファイルではなくわざわざINIを使うのか聞こうか
559デフォルトの名無しさん:2007/10/22(月) 16:47:54
>>558
はい。そもそもexeファイルと同じディレクトリに設定情報を
保存するのってXMLファイルでシリアライズするのが推奨ですか?
そんな記事をネットで見て、XMLで保存しようと思って、
dobonさんのXMLで保存をしようとしてました。
ところが、ここでFormを閉じるイベントでXML保存の仕込みを入れてた
けど、保存できてないことがわかりました。
6時間くらい格闘の末、INIファイルで断念しようとしたら
INIファイルでも保存できなくて、ここに来たという経緯です。

>>557
ちなみに閉じるイベントでなくて、子Form開いた後に保存自体が
だめだったようです。

まったくわからんです。
560デフォルトの名無しさん:2007/10/22(月) 16:48:39
あらゆる階層でキャッシュされてる可能性はあるが、
いずれにしてもOSはやってる。
アプリから見ると、OSが管理してるキャッシュにアクセス
して終わりってことね。

アプリ
↓↑
↓↑アプリはこのレベルで成功失敗程度しかわからん。
↓↑
キャッシュ(OS管理)
↓↑
↓↑いつ読んだり書いたりするかはOS次第
↓↑
物理ディスク

ちなみに、同期/非同期書きこみとか言ってるは
アプリがキャッシュへの書きこみを待つか?待たないか?
の話です。物理ディスクとデータレベルで同期している
という意味ではない。
561559:2007/10/22(月) 16:48:45
訂正)dobonさんのサイトを参考にXMLで保存をしようとしました。
562デフォルトの名無しさん:2007/10/22(月) 16:51:17
閉じるイベントがどういう順番で起こってるかしっかり調べれば多分答えが出ると思うよ
563559:2007/10/22(月) 17:15:56
どこから保存できないかわかりました。
子Formの中でShowDialogを呼び出した後です。
何で???
564559:2007/10/22(月) 17:34:06
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.ShowDialog()
の後には全く保存できなくなります。
565デフォルトの名無しさん:2007/10/22(月) 17:40:14
それは原因じゃなかろう
566デフォルトの名無しさん:2007/10/22(月) 17:41:20
おまえカレントディレクトリに保存してるだろ…
567デフォルトの名無しさん:2007/10/22(月) 17:43:42
まず切り分けよう
保存ルーチンが呼ばれてるのか、
呼ばれてるのに書き込みに失敗してるのか。
>>566の言うようなことかも知れんし

ブレークポイントでもメッセージボックスでも仕込んで
書き込みパスを表示してみそ
568559:2007/10/22(月) 17:45:42
さらに原因を追究したら
openFileDialog.ShowDialog()のDialogResultがOKだと保存できなくて
キャンセルだと保存できます。
こんな感じ
openFileDialog.ShowDialog(this)
config.SaveConfig();   //自分で作った保存関数

>>566
exeファイルのディレクトリに保存しちゃだめなんですか!?
569デフォルトの名無しさん:2007/10/22(月) 17:47:27
OpenFileDialogを呼び出すとカレントディレクトリがその場所に変わる
570559:2007/10/22(月) 17:48:46
569!!!

えーーーーーーー!!!???

ちょっと待っててください!確認してきます!
571559:2007/10/22(月) 17:50:55
うわわわわわわ・・・まじだー

569すげー!
そのカレントに保存してたファイルがありました!

これは参りました・・・
572デフォルトの名無しさん:2007/10/22(月) 17:51:32
>>569だなw
あれは何とかならンのかね・・・
573デフォルトの名無しさん:2007/10/22(月) 17:51:56
なぜ気づかんのだ・・・
574559:2007/10/22(月) 17:53:17
いやほんとwww
今までさんざんそのopenFileDialog開いているのに
そこに保存してたファイルがこっちみて笑ってるのに
何故きづかんのだ・・・

今自分で情けなさなさすぎて、笑ってます。。。
575559:2007/10/22(月) 17:55:15
ちなみにexeがある絶対パスを知る方法なんて
知ってたら教えてもらいたいです。

そんなことは自分で調べろですけど。

いや、ほんと今日はこれでまいったんで・・・
576デフォルトの名無しさん:2007/10/22(月) 18:01:06
Application.ExecutePathみたいな感じのものだった気がする
577デフォルトの名無しさん:2007/10/22(月) 18:03:36
WinFromアプリケーションを作っているときに、参照に追加したバイナリのアセンブリは、
DLLとしてEXEから読み込まれることになりますが、このDLLを内包した1つのバイナリのEXE
としてビルドすることは不可能なのでしょうか?

例えば、MSのEnterprise Libraryの以下のアセンブリですが、ソースコードも全て公開されています。
Microsoft.Practices.EnterpriseLibrary.Logging.dll
ソースコードレベルで取り込めば、1つの大きなEXEに出来ますが、
アセンブリレベルで取り込んで、1つのEXEにすることは可能でしょうか?
578559:2007/10/22(月) 18:05:46
ありがとーございます!もろもろこの御恩は忘れません。
誰もが通る道であって欲しいです。

あともう1点いいですか?
先に述べました、保存ファイルなんですが、
.NetだったらINIファイルよりXMLファイルで設定情報を
保存した方がよいですか?
「でもそんなの関係ない」ですか?
579デフォルトの名無しさん:2007/10/22(月) 18:06:43
>>578
俺ならObjectそのまま保存
用途によってはXML
580デフォルトの名無しさん:2007/10/22(月) 18:09:48
INIファイルはなんか怪しい
システムの復元で戻されたり
581デフォルトの名無しさん:2007/10/22(月) 18:10:08
>>578
.net で exe と同じ場所にファイルを作成するなんていう(行儀の悪い)仕様なんだから、
いまさらそんな細かいとこなんかどうでもいいと思う。
582559:2007/10/22(月) 18:14:21
行儀の悪いのは承知の上っす!
ありがとございました!

583デフォルトの名無しさん:2007/10/22(月) 18:15:49
拡張子を.iniにさえしなければ何でもいいと思う
584デフォルトの名無しさん:2007/10/22(月) 18:25:03
exeと同じ場所に保存するのが行儀悪いって流れになってるけど、
かといってMS様が推奨するように(あたかもユーザーから隠蔽するような)
暗号みたいなわけのわからん名前の、かつアプリ自体をアンインストールしても消えないような
ディレクトリに設定ファイル作るのが本当に「行儀が良い」ことなんかねえ。。

なんか素直に同意できかねるものがあるけど
585デフォルトの名無しさん:2007/10/22(月) 18:26:13
exeと同じ場所以外に作るという選択肢は俺にはないな
586デフォルトの名無しさん:2007/10/22(月) 18:40:29
同じ場所の方がわかりやすいけどC#はどうだかね
587デフォルトの名無しさん:2007/10/22(月) 18:43:51
ユーザが書き込み可能なディレクトリに置かなきゃ設定すら保存できないアプリなんて作らないほうがいいよ。
588デフォルトの名無しさん:2007/10/22(月) 18:57:06
使う側の事を考えられればどちらがいいかなんてすぐ判る
オナニーアプリなんて誰も使わない
589デフォルトの名無しさん:2007/10/22(月) 19:00:26
入出力をちょっといじれば、固有のパスへ保存できるよ。
590デフォルトの名無しさん:2007/10/22(月) 19:14:08
レジストリに書けよ
591デフォルトの名無しさん:2007/10/22(月) 19:17:12
アセンブリ書き換え
592デフォルトの名無しさん:2007/10/22(月) 19:17:25
システムカラーの一覧を作りたいのですが、Color.???でそういうのってありますでしょうか?
593デフォルトの名無しさん:2007/10/22(月) 19:29:06
SystemColors
594デフォルトの名無しさん:2007/10/22(月) 21:08:51
ちわー
ふらっとから北んだけど
オナニーアプリってWPFで作ったアプリのこと?
WPFのWEB側っていい感じに見えるけど…
595デフォルトの名無しさん:2007/10/22(月) 21:28:54
ふらっと池
596デフォルトの名無しさん:2007/10/23(火) 00:12:31
VC++6のクラスビユーではフォルダを作成することができたんですが、
VC#2005ではできないのですか?
597デフォルトの名無しさん:2007/10/23(火) 03:44:08
>>572
FileDialog.RestoreDirectoryプロパティをtrueにするのでは解決できない?
598デフォルトの名無しさん:2007/10/23(火) 05:06:02
>>597
気が付かなかったd
でもInitialDirectory指定してたら駄目そう・・・
599デフォルトの名無しさん:2007/10/23(火) 08:24:20
ならラップして表示の前後でカレント変えないお行儀のよい(いや気の利かない)
ファイルダイアログを書けばいいじゃん。

それ以前にDOSアプリじゃあるまいしカレントディレクトリなんて概念そのものを
使うのはどうなの
600デフォルトの名無しさん:2007/10/23(火) 09:45:09
ドローツールを作りたいんですが、次のようなフローを考えてます

折れ線を描画する場合
1 折れ線ツールを選択
2 マウスで左クリックした場所を配列に取り込み、ピクチャーボックスに点を描く
3 次にマウスで左クリックした場所を配列に取り込み、ピクチャーボックスに点を描く
4 (以下同様に点を描画)
5 マウス右クリックで折れ線ツールから抜け出る

この折れ線を移動する場合
1 移動ツールを選択
2 マウスで左クリックした場所に折れ線が描かれているかどうかを、マウスの位置と、配列(上記2〜4の配列)に書かれた位置で判断
3 マウスをドラッグした先に折れ線を移動し、元の位置の折れ線を削除
3A マウスで左クリックした場所に折れ線の先端があれば、マウスでドラッグした先に先端を移動して、折れ線を描き直す

こんなフローでよろしいんでしょうか?
もっとスマートなやり方があればご教示くださいm(__)m
601デフォルトの名無しさん:2007/10/23(火) 10:11:11
何故か600の内容が理解出来ないという不思議。なんでなんだろ。
なぜか、頭の中で理解できない。

えぇっと、MFCの頃はScribeというまんまドローツールのMSのサンプルコードがあったんだけれど、
C#版は無いのだろうか?
CodeProjectというサイトへ行ってドローツールで検索すれば、外人の作った素晴らしいソースが
見つかるのでは無いでしょうか?

602デフォルトの名無しさん:2007/10/23(火) 10:16:05
System.Windows.Forms.WebBrowserのDocumentCompleteを使って、
IEコンポーネントで取得したページをパースしたいのですが、
最近の複雑な入れ子のWebサイトのHTMLでは、1つのURLから取得したHTMLで、
DownloadCompleteやDocumentCompletedイベントが複数発生してしまいます。

ということで、DocumentCompletedが最後のものであるか調べる方法はあるでしょうか?
DownloadCompleteはダウンロードが完了した時点、DocumentCompletedはパースの準備が
完了した時点で起こるようです。

人間が見る分には、ページの読込が終わったか判断なんて必要ないと思うのですが・・・。
603デフォルトの名無しさん:2007/10/23(火) 10:21:11
>>601
ありがとうございます! 早速探してきます
604602:2007/10/23(火) 10:25:42
ごめんなさい、結構、メジャーな問題だったようです。
ググったら、色々出てきました。

URLが取得できているかでチェックするか、
フレームの数を自分で数えてチェックするか等のようです。
フレームの数 = DocumentCompletedの数かどうかは不明だと思うのですが・・・。
調べてみます。
605602:2007/10/23(火) 11:29:24
DocumentCompletedの回数が何に基づくのかは不明ですが、ReadyStateがCompleteになるのは
最後のDocumentCompletedのみでした。
ということで、ReadyStateで判断すればOK。
606デフォルトの名無しさん:2007/10/23(火) 15:14:25
>>601
Silverlight1.1alphaSDKのサンプルにC#版Scribblerがある
607デフォルトの名無しさん:2007/10/23(火) 16:22:53
http://msdn2.microsoft.com/en-us/library/ms973919.aspx
ここに
DO: Use ToUpperInvariant rather than ToLowerInvariant when normalizing strings for comparison.
っていう記述があるんですがこれはなぜですか?
理由はここには書いてないようなんですが。
608デフォルトの名無しさん:2007/10/23(火) 16:35:35
たぶん SS と ß が一致してほしいからじゃね?
609デフォルトの名無しさん:2007/10/23(火) 18:59:41
質問というより愚痴になっちゃうけど、TableLayoutPanelって
激烈にもっさりだね・・・。

8行×2列程度のものを数個貼り付けただけで、なんか20年前の
SX-Windowsかと思うようなパラパラマンガみたいな描画をしやがる。

実行時にはサイズ固定でかまわないから何か描画を早くするテクニックはないかなあ。
610デフォルトの名無しさん:2007/10/23(火) 21:02:53
>>609
俺も昔同じようなこと書いたら、コントロールの数だけウィンドウがあるのと同じだから遅くて当たり前と回答があった。

結局ボタン以外自前で描画した。
無駄なことにリソースを割いていたと実感できました。
611デフォルトの名無しさん:2007/10/23(火) 21:47:02
いやコントロールの数の問題じゃないでしょ。
同じ数のコントロールをベタにフォームに置いてもあんなに遅くならないから。

明らかにTableLayoutPanelそのものに問題がありそう
612デフォルトの名無しさん:2007/10/23(火) 21:51:28
>>611
普通に数の問題だと思うけどな。
WM_PAINTの優先順位は低いので同時に大量のメッセージが送られてきたら
延々と描画が後回しにされるし。

とりあえず描画が遅いのか再描画が遅延してるのかどっちかぐらいは確かめてみたら?
Spy++なりなんなり適当に使えば分かるかと。
613デフォルトの名無しさん:2007/10/23(火) 21:55:19
>>609
株価ボード?
614デフォルトの名無しさん:2007/10/23(火) 22:19:26
.NETってMFCよりメリットありますか?
615デフォルトの名無しさん:2007/10/23(火) 22:20:29
MFCみたいな糞ライブラリよりははるかに生産性が高いよ
616デフォルトの名無しさん:2007/10/23(火) 22:33:15
CやC++やMFCに挫折した方の意見は参考にならないので控えてください
617デフォルトの名無しさん:2007/10/23(火) 22:35:33
C++みたいな糞言語より生産性高いよ
618デフォルトの名無しさん:2007/10/23(火) 22:36:03
MFCはうんこすぎるのでATL(WTL)で
619デフォルトの名無しさん:2007/10/23(火) 22:36:05
人間やめますか?それともMFC辞めますか?

Microsoft さえ見放した禁断のライブラリ・MFC。
かつて人類はMFCの登場で、クソ汚い Windows API から開放されると信じた。
信じて戦った。

戦って負けた。

MFCに人生をかけて、敗北⇒廃人同様になった者は、
南京大虐殺30万人を裕に超えるものと推定される。

「DLL HELL」なる言葉を知っているだろうか?
直訳すれば「DLL地獄」。DLLとHELLの語感が似通っている事から生まれたのだが
この「DLL」とはMFCを指す。そう、DLL HELLとはMFCの事を指すのだ。
バグだらけ⇒バグ回避のコードでプログラミング⇒バグの直った別バージョンのMFC配布⇒既存ソフトが動かない
これを延々に繰り返す。
子々孫々、末代までも、輪廻転生しても、たとえ犬畜生に生まれ変わっても
DLL地獄=MFC地獄の呪縛からは逃れなれない。

人間やめますか?それともMFC辞めますか?
620デフォルトの名無しさん:2007/10/23(火) 22:39:14
コピペ君って馬鹿だな、まで読んだ。
621デフォルトの名無しさん:2007/10/23(火) 22:39:50
しかし、現状の大半のパッケージソフトはMFCで書かれている
逆に.NETで書かれているのものでお金を取れるものは極少数

この結果はどう見る?
622デフォルトの名無しさん:2007/10/23(火) 22:40:34
MFCで書かれている?
623デフォルトの名無しさん:2007/10/23(火) 22:41:53
有償ソフト ⊃ パッケージソフト
というか、何度も同じ話題をループして楽しいの?
そういうお馬鹿さんはOOPスレに行くといいと思うよ
624デフォルトの名無しさん:2007/10/23(火) 22:47:59
>>621
そんなの簡単に論破できる。
CString クラスみたいな、”ウインドウ・フレームワーク”以外の基本的なのしか使っていない。
あとは「::」で始まるAPIしか使っとらん。
625デフォルトの名無しさん:2007/10/23(火) 22:52:56
そもそもMFC使ってないんじゃないか
626デフォルトの名無しさん:2007/10/23(火) 22:57:27
また来たか・・・なんでココまで必死になれるのか疑問だな
627デフォルトの名無しさん:2007/10/23(火) 22:58:06
ネイティブコードを書けるC++万歳。
628デフォルトの名無しさん:2007/10/23(火) 23:07:28
定期的に変なのが沸くな
629デフォルトの名無しさん:2007/10/24(水) 00:01:58
「変な言語」には、「変なの」が集う。これ常識。
630デフォルトの名無しさん:2007/10/24(水) 00:04:21
起動が遅いから凄いUIを期待してた・・・
631デフォルトの名無しさん:2007/10/24(水) 00:08:45
.NETは本当に惜しいよ

あれで、ネイティブ吐けるならWinのビジネスアプリではC++の出る幕はなくなったんだけどな
632デフォルトの名無しさん:2007/10/24(水) 00:12:37
しょせんインタープリタ。それ以上でもそれ以下でも無い。
633デフォルトの名無しさん:2007/10/24(水) 00:12:40
UI、というかWindows Formの起動の遅さは、たとえネイティブコンパイラが出ても
ほとんど変わらないと思うけどね。
634デフォルトの名無しさん:2007/10/24(水) 00:14:30
そんな遅い遅い言うほど遅くないわな
Microsoft Officeの何十倍か早かろう
635バイナリ野郎:2007/10/24(水) 02:52:57
1バイトで表現できる値を出力する際は下記のような感じでOKですか?
Console.WriteLine(Convert.ToInt16(br.ReadByte()))
;
636デフォルトの名無しさん:2007/10/24(水) 02:54:44
なんでInt16?
637バイナリ野郎:2007/10/24(水) 03:03:24
>>636
・・・。突っ込まれると分かりません。
2バイトの場合はInt16ですよね、1バイトの場合は??ご教示ください!!!!!!!!
638デフォルトの名無しさん:2007/10/24(水) 03:04:48
一バイトはbyteだろ
だから何もせずそのままやりゃいいんじゃねえの
違ったっけ
639バイナリ野郎:2007/10/24(水) 03:30:07
すいません、そのままと言うのが分からないのです。
1バイトだと255まで表現できると思いますが、byteから何に変換すべきでしょうか?

ASCII文字列の場合・・・Encoding.ASCII.GetString(br.ReadByte(2));
2バイト数値の場合・・・BitConverter.ToInt16(br.ReadByte(2),0);
で変換してもますが問題ないでしょうか?
640デフォルトの名無しさん:2007/10/24(水) 03:41:34
BinaryReader.ReadByteに引数あったっけ
2バイト取りたいならbr.ReadInt16じゃないの?
641バイナリ野郎:2007/10/24(水) 03:54:52
>BinaryReader.ReadByteに引数あったっけ
すいませんBinaryReader.ReadBytes(2)です。
>2バイト取りたいならbr.ReadInt16じゃないの?
2バイトの場合はこれでOKです。

問題は1バイトの場合=BinaryReader.ReadByte()の場合です。
1バイトの情報を取得するにはどのようにすればよいのでしょうか?
Booleanではなく値を取得したいのですが
642デフォルトの名無しさん:2007/10/24(水) 04:00:17
ReadByte()
これが一バイトの取得じゃないとしたらなんなのか知りたい
あるいはReadSByte()
643デフォルトの名無しさん:2007/10/24(水) 08:51:33
いったい何を言ってるのかわからん…
644デフォルトの名無しさん:2007/10/24(水) 10:31:05
インタープリタ…
645デフォルトの名無しさん:2007/10/24(水) 11:56:23
Byteという型があるのを知らないとか
646デフォルトの名無しさん:2007/10/24(水) 14:41:18
意地悪せずに教えてやれよ。
Console.WriteLine(br.ReadByte());
647デフォルトの名無しさん:2007/10/24(水) 14:43:28
教えちょる
648デフォルトの名無しさん:2007/10/24(水) 16:12:49
グレースケール用のJPEGのライブラリ教えてください
649デフォルトの名無しさん:2007/10/24(水) 16:23:13
libjpeg
650デフォルトの名無しさん:2007/10/24(水) 16:26:44
GDI+でいいじゃん
651デフォルトの名無しさん:2007/10/24(水) 17:17:21
GDI+じゃロードはともかくセーブはサポートしとらんね。
WPFに移行するとか。
652デフォルトの名無しさん:2007/10/24(水) 17:21:51
WPFだとグレイスケールJPEGの保存が出来るのか。
ちょっと使いたいかも・・
653デフォルトの名無しさん:2007/10/24(水) 21:41:54
GDI+なんて遅くて、全く実用性がないだろ
654デフォルトの名無しさん:2007/10/25(木) 01:32:58
ListViewItemの内容をシリアル化したいのですが、MSDN見るとListViewItemCollectionはシリアル化
できないようですが、何か方法ありますか?
655デフォルトの名無しさん:2007/10/25(木) 02:22:24
GDI+なんだが、その上にフレームワークつけてほとんど気合で描画をするようにしたら複雑な画面でもまともな実用速度になった。
お舞らも適当に(,,゚Д゚) ガンガレ!
656デフォルトの名無しさん:2007/10/25(木) 09:18:25
>>654
適当に自前で再帰すれ
657デフォルトの名無しさん:2007/10/25(木) 21:01:15
byte[]が全部ヌル値か判定する便利な方法ありますか?
658デフォルトの名無しさん:2007/10/25(木) 21:04:06
頭から読めばいいだけ
659デフォルトの名無しさん:2007/10/25(木) 21:06:17
ヌル値って何だよw
660デフォルトの名無しさん:2007/10/25(木) 21:09:50
byte[]が全部ヌル値ってどういう事
661デフォルトの名無しさん:2007/10/25(木) 21:22:16
bool IsNull(byte[][] bb) {
    foreach(byte[] b in bb)
        if (b != null)
            return false;
    return true;
}

こうじゃね?
662デフォルトの名無しさん:2007/10/25(木) 21:26:00
>>661
なるほどよくわかった
663デフォルトの名無しさん:2007/10/25(木) 21:32:55
なるほど
byte?[]の全要素がnullの事かと思ったわ
664デフォルトの名無しさん:2007/10/26(金) 00:55:55
byteだからnullじゃなくて0x00のこと言ってんじゃね?
665デフォルトの名無しさん:2007/10/26(金) 01:35:18
「ヌル」ってカタカナで書くの、きもいよね。
null と 0 の違いはわかってるのかな?

bool IsEmpty(byte[] bb) {
 foreach (b in bb)
  if (b != 0) return false;
 return true;
}
666デフォルトの名無しさん:2007/10/26(金) 01:59:45
英語圏出身の人だったりして。
null って英語だと 0 って意味あるから。
667デフォルトの名無しさん:2007/10/26(金) 02:00:57
てかCだとnullは0だろう
668デフォルトの名無しさん:2007/10/26(金) 03:53:23
キモイのはヌルじゃなくてナルの間違いだろ。
narcistって言うんだけどね
669デフォルトの名無しさん:2007/10/26(金) 04:24:04
方言を間違いって言ってるのと同じ事
670デフォルトの名無しさん:2007/10/26(金) 08:06:23
ドイツ語習った俺はヌルとしか読めなくなった
671デフォルトの名無しさん:2007/10/26(金) 11:51:38
フランス語習った俺はニュルとしか読めなくなった
672デフォルトの名無しさん:2007/10/26(金) 12:11:54
nullって元々ドイツ語から来たものだし
673デフォルトの名無しさん:2007/10/26(金) 12:30:29
>>667
null 文字は 0 だけど、null ポインタが 0 な保証ってなかったと思う。
CPU によっては、「無効なポインタを表すアドレス」が 0 じゃないらしい。
まあ、ただ、(int*)0 とか書くと「無効なポインタを表すアドレス」に変換される仕様だけど。

>>672
フランス語由来の単語はフランス語チックに読む場合が多いけど、
ドイツ語由来の単語は、言語的に近いせいか、英語発音するよ。
674デフォルトの名無しさん:2007/10/26(金) 12:30:35
ギリシャ語だろw
675デフォルトの名無しさん:2007/10/26(金) 12:34:44
こんな話題で盛り上がるんだからほほえましいスレだよな
676デフォルトの名無しさん:2007/10/26(金) 13:07:09
皮肉って言いたいだけと違うか
677デフォルトの名無しさん:2007/10/26(金) 14:06:13
Excel風の画面分割付きのデータグリッドライブラリを教えてください。
スプリッタの片方だけを横スクロール、縦は追従するようなのを探しているのですが発見できません。
678デフォルトの名無しさん:2007/10/26(金) 14:11:12
標準のDataGridViewでいいじゃないか。
679デフォルトの名無しさん:2007/10/26(金) 14:46:53
>>678
DataGridView使ってみましたが、それらしき機能がみあたりません・・・
680デフォルトの名無しさん:2007/10/26(金) 15:32:22
>>679
おもいっきりあるだろ。固定したい列のFrozenプロパティをtrueにしたら固定列になる。
681デフォルトの名無しさん:2007/10/27(土) 02:36:27
なぜRichTextBox.SelectedTextに文字列を入れると変わるのに空文字列は
変わらないのでしょうか。また変える方法はありますでしょうか。

RichTextBox.SelectedText = "hogehoge"; //変わる
RichTextBox.SelectedText = ""; //変わらない
682デフォルトの名無しさん:2007/10/27(土) 03:01:29
>>681
ちゃんと置換できるよ。
ブレークポイントで止めてSelectedText見てみたら
683681:2007/10/27(土) 09:26:47
ブレークポイントでも見ると
"hogehoge"も""も代入した直後は、空の""になっており、
実際表示するとhogehogeは置換されてますが、""を代入した場合は
もとのテキストにもどっています。文字の背景色を変えている部分
なのですが、これが関係したりしますか?SelectedTextも変えなきゃだめ
とか。
因みに
RichTextBox.SelectedText = " "; //半角スペース
RichTextBox.Trim();
ってやると表示される文字は" "の半角スペースとなります。

困りました〜
684681:2007/10/27(土) 09:36:22
>SelectedTextも変えなきゃだめとか。
SelectedRtfの誤りでした。すみません。

685681:2007/10/27(土) 09:49:28
新しくテストプロジェクトを作って
FormにRichTextBoxとButtonを配置して
private void button1_Click(object sender, EventArgs e) {
this.richTextBox1.SelectedText = "";
}

private void button2_Click(object sender, EventArgs e) {
this.richTextBox1.SelectionBackColor = Color.RoyalBlue;
}
ってやると""の空文字にできるし、選択されたところを色ぬっても
""に出来ました。

あー原因がわからないですー
686681:2007/10/27(土) 10:14:57
原因の切り分けをしたところ、
ReadOnlyプロパティにすると""が代入できないようです。
仕様?
687681:2007/10/27(土) 10:54:51
ReadOnlyプロパティ以外でテキストを入力できないようにする方法
ってありますか?
もうこの方法でいこうと思います。
688デフォルトの名無しさん:2007/10/27(土) 11:56:20
falseして削除してtrueにしたらだめなん?
689681:2007/10/27(土) 12:31:16
>>688
頭よすぎです。

一気に解決しました。ありがとうございました!
690デフォルトの名無しさん:2007/10/27(土) 13:29:58
頭よすぎ吹いたww
691デフォルトの名無しさん:2007/10/27(土) 13:34:35
笑いのポイントが小学生って君よく言われるでしょw
692681:2007/10/27(土) 13:59:59
何で知ってるんですか!?
693デフォルトの名無しさん:2007/10/27(土) 16:51:51
List<Object>をList<String>に変換するのってどうすればいいですか?
(List<String>)objectListだとエラーが出るんですけど。
694デフォルトの名無しさん:2007/10/27(土) 16:55:12
最初からList<String>で作るのが正解
695デフォルトの名無しさん:2007/10/27(土) 16:56:39
>>693
一個ずつ取り出してキャストすれ
696デフォルトの名無しさん:2007/10/27(土) 17:33:55
ありがとう。
やっぱひとつづつやるしかないのか…
697デフォルトの名無しさん:2007/10/27(土) 18:07:04
>693
List<string> stringList = new List<string>(new ArrayList(objectList).ToArray(typeof(string)) as string[]);
なんか無駄なことやってる気が…
最初からList<string>にしとけよ。
698デフォルトの名無しさん:2007/10/27(土) 18:18:01
C# 3.0 なら
List<object> l = new List<object>() { "a", "b", "c", "d" };
List<string> sl = l.ConvertAll(o => (string)o);
というのがあるんだけど。

まあ、結局やってることは
List<string> sl = new List<string>();
foreach(object o in l) sl.Add((string)o));
と同じだけど。
699デフォルトの名無しさん:2007/10/27(土) 18:19:33
ConvertAll なら 2.0 ですでにあるし
3.0 なら素直に OfType があるだろ
700デフォルトの名無しさん:2007/10/27(土) 18:19:41
C#2.0でもあるだろ
list.ConvertAll<string>(delegate(object o){ return (string)o; });
701デフォルトの名無しさん:2007/10/27(土) 18:21:02
すまん、OfType と勘違いしてた。
702デフォルトの名無しさん:2007/10/27(土) 18:26:39
C#2.0ってほんとまだできてないよな
3.0なら

var l2 = l.ConvertAll(o => (string)o);
こうだからな
703デフォルトの名無しさん:2007/10/27(土) 18:51:50
そして簡単に書けすぎて乱用してしまう。
最初から必要な型にしとけばいいのに。
704デフォルトの名無しさん:2007/10/27(土) 19:34:04
3.0以降はC++とは別の意味で変態的になってきたな
705デフォルトの名無しさん:2007/10/27(土) 19:51:27
C++0x (1x になってしまいそうな雰囲気もあるけど)にもラムダ式とか追加されるらしいし、
全然別の意味ってわけでもないけどね。

まあ、データベース言語との統合ってのは必要な機能だと思うし、
C# の変態的な機能強化は、どれも結構 LINQ を実現するために必要なのよね。
706デフォルトの名無しさん:2007/10/27(土) 19:53:53
柔軟で強力な機能を導入しといて「お前ら勝手に使え」の方向に行きつつあるな
707デフォルトの名無しさん:2007/10/27(土) 19:55:47
C++だって暗黙型もクロージャも導入しようとしてるし
Javaも関数型とクロージャを入れようとしてる
C#はだいぶ先に行ってるけどな
708デフォルトの名無しさん:2007/10/27(土) 20:12:20
Java はもうすっかり C# の後追い路線よね。
C++ 0x の方は最近ようやく概要に目を通した程度だけど、型推論とかクロージャにはびっくりした。
709デフォルトの名無しさん:2007/10/27(土) 20:30:49
Cの子孫言語系統はある程度目指すところが見えてきた感じかしらん
710デフォルトの名無しさん:2007/10/27(土) 21:47:53
デリゲートも出世したな
はじめはイベントを正当化するためだけの存在だったのに
711デフォルトの名無しさん:2007/10/27(土) 21:52:00
もともとデリゲートの本来の力が分かってなかっただけの話
712デフォルトの名無しさん:2007/10/27(土) 21:54:47
>>709
Objective-Cは別方向かな
713デフォルトの名無しさん:2007/10/27(土) 22:00:46
コーディングスタイルの話なんだけど、
hoge = delegate() {
 //...
}

hoge = delegate()
{
 //...
}
ってどっちがオヌヌメ?
714デフォルトの名無しさん:2007/10/27(土) 22:06:02
hoge = delegate{
//...
}
こうかな
715デフォルトの名無しさん:2007/10/27(土) 22:06:22
if とかの書き方にもよるんじゃね
おいらは開始ブラケットでは改行しない派
716デフォルトの名無しさん:2007/10/27(土) 22:10:31
>>713
C#だと、
hoge = delegate()
{
 //...
}
の方が多いみたい。
hoge = delegate() {
 //...
}
は、C++の人っぽいような希ガス。
717デフォルトの名無しさん:2007/10/27(土) 22:11:35
ところでラムダ式って匿名メソッドみたいに引数の省略はできるの?
hoge = delegate { ... }
hoge = ()=>{ ... };
hoge = { ... }; //これはダメ?
718デフォルトの名無しさん:2007/10/27(土) 22:19:13
VSの初期設定だとdelegate()の直後で改行が入るけど、
俺は{の後ろで改行した方が見やすいと思うな。
719デフォルトの名無しさん:2007/10/27(土) 22:30:50
デリゲートをメソッドの引数にするときは{の前で改行するほうが見やすいと思う
後で改行すると{}内も引数みたいに見える
720デフォルトの名無しさん:2007/10/27(土) 22:35:22
{ の後改行派が思った以上に多くてびっくり。
721デフォルトの名無しさん:2007/10/27(土) 23:02:17
>>716
つ java屋
722デフォルトの名無しさん:2007/10/28(日) 00:36:34
MessageBoxの「はい」や「キャンセル」や「OK」などの文字列を
取得する方法はありますか?

ダイアログに置いたボタンの文字列をを環境に応じて適切に
変えるため取得したいです。
723デフォルトの名無しさん:2007/10/28(日) 00:37:18
苦労してそれを達成するだけのメリットはあるの?
724デフォルトの名無しさん:2007/10/28(日) 00:41:38
自分でForm作ってShowDialog
725デフォルトの名無しさん:2007/10/28(日) 00:42:21
既存のモノを変更したいならAPIフック位しか思いつかない
726デフォルトの名無しさん:2007/10/28(日) 00:50:41
>>723-725はたぶん勘違いしてるんじゃないの?
自作のFormで「はい」「いいえ」などのボタンを配置したいから
その文字列をシステムから取得したいって言ってるんでしょ。たぶん。
俺はやり方は知らんが。
727デフォルトの名無しさん:2007/10/28(日) 00:59:05
「OK」 と表示するか、「はい」 と表示するか、「ニダ」 と表示するか
環境に応じて適切に変えたい、って事?
728デフォルトの名無しさん:2007/10/28(日) 01:45:29
>>722の要求は>>727で回答は>>724が最適だろうな・・・
729デフォルトの名無しさん:2007/10/28(日) 02:11:10
VC#では自前でDoc/Viewを実装する必要があるんですか?
結構面倒なんですけど・・・
730デフォルトの名無しさん:2007/10/28(日) 02:38:42
>>729
どっちかと言うと、それ当たり前のような気がするが・・・
731デフォルトの名無しさん:2007/10/28(日) 05:30:25
>>727
このaa思いだした

┝┥┌──────────────────┴┐
│┝┥┌──────────────────┴┐
││┝┥┌──────────────────┴┐
│││┝┥┌──────────────────┴┐
││││┝┥┌──────────────────┴┐
│││││┝┥Zainichisoft                   [×]|
┤│││││┝━━━━━━━━━━━━━━━━━━| \カチ
└┤│││││┌───―┐                    ´||`| カチ
  └┤│││││ Λ_Λ | ニダーに住み着かれました。 .│ カチ
    └┤││││<=( ´∀`) |  謝罪と賠償するまで      .│ カチ
      └┤│││(    ) │ 終了はできません。       |  カチ
        └┤│└────┘               .  .  |  カチ
          └┤          .[謝罪する]  [賠償する].   .|   カチ
            └───────────────────┘
732デフォルトの名無しさん:2007/10/28(日) 14:12:33
下の様なコードを書いてみたのですが、
思った通りの変換が行われません。
なぜでしょうか・・・。

<ソース>
Encoding fromCode = Encoding.GetEncoding("shift_jis");
Encoding toCode = Encoding.GetEncoding("gb2312");

byte[] jpBytes = fromCode.GetBytes(textJp.Text);
byte[] gbBytes = Encoding.Convert(fromCode, toCode, jpBytes);

char[] gbChars = new char[toCode.GetCharCount(gbBytes, 0, gbBytes.Length)];
toCode.GetChars(gbBytes, 0, gbBytes.Length, gbChars, 0);
textGb.Text = new string(gbChars);
</ソース>

思った通り、というのは
ttp://www.excite.co.jp/world/chinese/
で"故郷"と入力すると、"郷"は簡体字に変換されますよね。
そうなるように、つまり日本語の漢字が、
簡体字の該当文字にマッピングされるように変換したいんです。
もちろん、表示するときはSimSunフォントです。フロントエンドは日本語版ですが。
733デフォルトの名無しさん:2007/10/28(日) 15:00:37
S-JISの"郷"と簡体字の"郷に相当する文字"は対応関係にある、
とされてないからじゃないでしょうか。
734デフォルトの名無しさん:2007/10/28(日) 15:02:19
TargetInvocationExceptionはハンドルされませんでした。

って出た例外が発生したときは原因をどのように追っていけばよいですか?
配列のインデックスが足りないとかの例外だったらわかりますが、
あまり例外処理を解析したことなくて、どこから手をつければよいか
わからないです。

まず何を調べればよいか教えて欲しいです。他に必要な情報があれば
提示します。
735デフォルトの名無しさん:2007/10/28(日) 15:04:58
例外が一番上まで飛べばその時点でデバッガが例外が起きた状況を
全部教えてくれるだろ
736デフォルトの名無しさん:2007/10/28(日) 15:15:17
>>729
おれは、イベントハンドラにロジックベタ書き。
ロジックっていうほど、複雑な処理は書かないんで、いまいち別にしても良くなる気がしないっていうか。
こういうふうに書くってお手本も見たことないし。
737デフォルトの名無しさん:2007/10/28(日) 15:17:13
>>734
.NET Frameworkのメソッドが投げた例外ならだいたいMSDNのそのメソッドのページを見れば
投げる可能性のある例外とその原因が書いてあるだろ
738デフォルトの名無しさん:2007/10/28(日) 16:58:39
MDIにしているときはMouseDownイベントが飛んでこないようなんですが
取得する方法はありますか?
739デフォルトの名無しさん:2007/10/28(日) 17:00:35
あっ
MicrosoftのHPにVBだけどサポートされてませんって書いてある・・・。

じゃだめか。。。?
740732:2007/10/28(日) 17:53:42
>>733
そうなんですかねぇ・・・。
てことは自分でマッピングテーブルを作らないとどうしようもないと言うことか。
簡体字に存在しないはずの日本漢字や仮名がSimSunで表示できるのが不思議でしょうがない。
741デフォルトの名無しさん:2007/10/28(日) 17:56:48
>>740
FontLinkじゃね?
742デフォルトの名無しさん:2007/10/28(日) 18:41:17
ListViewItemをシリアル化したのですがTagの内容が保存されません
解決方法を教えてください。
743デフォルトの名無しさん:2007/10/28(日) 19:24:55
>>736
VB厨発見
744デフォルトの名無しさん:2007/10/28(日) 21:33:49
>>740
正攻法かどうか知らないけど、とりあえずVBランタイムのStrConvを使えば出来るんじゃない?
745デフォルトの名無しさん:2007/10/28(日) 22:05:20
>>740 がやろうとしているのは、日本語⇒中国語 翻訳とかわらん
746デフォルトの名無しさん:2007/10/28(日) 22:13:11
Manifestファイルって何に使いますか?
アプリを作って渡そうとしてるんですけど、できるだけ不要ファイルは
消したいのですが、Releaseフォルダにあるexeファイル以外のものは
必要なものなかよくわかりません。
.Netがインストールされてればexeファイルだけでもいいんですか?
747デフォルトの名無しさん:2007/10/28(日) 22:38:21
>>745
一応論理的には写像関係が定義できる文字の変換だから、そうでもないでしょ。
だから現にVBライタイムの機能として存在してるじゃん。
748デフォルトの名無しさん:2007/10/28(日) 23:16:41
SDJEditorって.NETで作られたテキストエディタを使ってみた
ワープロソフトかと思った。
テキストエディタとしては使い物になりませんね
749デフォルトの名無しさん:2007/10/28(日) 23:45:57
それは何の相談?
750デフォルトの名無しさん:2007/10/28(日) 23:49:10
いつもの奴だろ
.NETおせー言いたいだけの
751デフォルトの名無しさん:2007/10/29(月) 17:00:58
.NET Frameworkのdllの列挙体をそのdllを参照しなくても使えるようにするために
リフレクションを使ってすべてのメンバ名とその値を取得してコードを生成したんだけど
これってライセンス違反になる?
752デフォルトの名無しさん:2007/10/29(月) 17:02:09
どのライセンス?
753751:2007/10/29(月) 17:08:51
.NET Frameworkのライセンス
逆コンパイルでやるのは完全に違反なんだろうけどできたものは同じだから気になる
754デフォルトの名無しさん:2007/10/29(月) 17:12:09
MSDNに書いてあるだろ。
755デフォルトの名無しさん:2007/10/29(月) 17:12:12
.NET Frameworkのどのライセンス?
756デフォルトの名無しさん:2007/10/29(月) 17:12:40
>>753
アセンブリのメンバーの列挙なら逆アセンブルにはならないだろ。
MSのリフレクションのサンプルにもそれやってるのがあったぞ。
757デフォルトの名無しさん:2007/10/29(月) 17:17:53
ライセンス違反にはならないけど、
プログラミング作法的にかなり微妙じゃない?

enum 使ってる意味が薄くなるし。
dll 参照しなくするのにそんな大したメリット感じないし。
758デフォルトの名無しさん:2007/10/29(月) 18:02:00
>757
enumはコンパイル時に値が埋め込まれてるんだよ。
constの定数と同じ扱いだね。
だからdllを参照してても実際にはenumの値だけじゃdllは呼び出されなかったりするかも。

でもenumだけ参照しないようにしても関連するメソッド呼び出し時とかに
元のenumを使うから無駄にキャストしないといけなくなるしかなり無駄かと思うけど。
759740:2007/10/29(月) 23:40:38
>>741
なるほど、FontLinkという機能は知りませんでした。
調べてみて初めて知りました。不勉強でした。

>>744-747
ありがとうございます。
StrConv、試してみましたが残念ながら同じ結果になりました。
(久々にVBを触りましたが、6.0からずいぶん変わった物です・・・)

PinConv+というフリーウェアを発見し、DLしてみたのですが、
やはりマッピングテーブルを持っているようです。
テーブルなしでは無理なのかもしれませんね。
760デフォルトの名無しさん:2007/10/29(月) 23:58:07
まあそりゃ郷はUnicodeに3つ入ってるからな。繁体字と常用漢字が別。
ちなみに該当のDLL参照すりゃC#でもStrConv使えるぞ。
761デフォルトの名無しさん:2007/10/31(水) 06:18:43
http://msdn2.microsoft.com/ja-jp/library/e59b22c5(VS.80).aspx
ここに書いてあったとおりに Cmdll.c と CM.cs 作ってコマンドラインからコンパイルしたのですが
不正な処理で落ちてしまいます。

出力はこんな感じです。
>CM
ハンドルされていない例外: System.BadImageFormatException: 間違ったフォーマット
のプログラムを読み込もうとしました。 (HRESULT からの例外: 0x8007000B)
   場所 MainClass.SampleMethod(Int32 x)
   場所 MainClass.Main()

>ls
CM.cs      CM.exe     Cmdll.c    Cmdll.dll  Cmdll.exp  Cmdll.lib  Cmdll.obj

>cl
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86

>csc
Microsoft(R) Visual C# 2005 Compiler version 8.00.50727.42
for Microsoft(R) Windows(R) 2005 Framework version 2.0.50727

64bitだからまずいのでしょうか?
762761:2007/10/31(水) 06:23:29
OS書き忘れました
windows xp x64 professional service pack 1 version 2003
となってます
763デフォルトの名無しさん:2007/10/31(水) 07:09:40
特に指定しないとcscは/platform:anycpuでコンパイルされるんで、x64だと64bitで動く。
clの方は64bitコンパイラを使ってコンパイルしない限りx86のバイナリしか吐かない。
ttp://msdn2.microsoft.com/ja-jp/library/x4d2c09s(VS.80).aspx
64のプロセスでは32bitDLLは読めない。

cscの方で/platform:x86にすればWOW64上で動くから32bitDLLを読める。
764デフォルトの名無しさん:2007/10/31(水) 07:25:31
>763
教えていただいたとおりうまくいきました。
IDEの方でanycpu以外の選択肢を選べずあきらめていたのですが
もう一頑張りしてみます。
ありがとうございました。
765デフォルトの名無しさん:2007/10/31(水) 21:08:05
Formアプリで、System.ConfigurationのConfigurationElementCollection
などを利用して、複雑なリスト構造の定義をApp.configに書き込みたいのですが、
参考になるようなリンク等無いでしょうか?

読み込んでいるサンプルは幾つか見つかったのですが、書き込んでいるものが見つからないのです。
定義に可変長リストが含まれているために、コレクションを使用したいのです。
766765:2007/10/31(水) 21:16:35
767デフォルトの名無しさん:2007/11/01(木) 01:25:08
パス文字列中の %APPDATA% とかを置き換えてくれるメソッドはありますか?
768デフォルトの名無しさん:2007/11/01(木) 01:58:41
ExpandEnvironmentStrings とかどうかな
769デフォルトの名無しさん:2007/11/01(木) 02:16:06
770デフォルトの名無しさん:2007/11/01(木) 02:34:28
>>768
WinApi のほうを失念してました。ありがとうございます。
それをキーワードに探したら Environment.ExpandEnvironmentVariables なんてのを見つけたのでそっちつかいます。
771デフォルトの名無しさん:2007/11/01(木) 23:37:17
APIの関数が見つかれば対応表から探すと楽だよ。
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
772デフォルトの名無しさん:2007/11/03(土) 04:01:24
TcpClientで相手が切断したのを判別するにはどうしたらいいのでしょうか?
こちらのTcpClientは相手が切断するまで絶対に切断しないという処理をしたいのですが
773デフォルトの名無しさん:2007/11/03(土) 09:31:21
相手が切断するまで絶対に切断しない
って設計に問題がある
774デフォルトの名無しさん:2007/11/03(土) 11:16:01
物理的に切れたら永久に待つのかね?
775デフォルトの名無しさん:2007/11/03(土) 13:48:02
正常にデータがとどかなくなったら切断されてるんだろう。
776デフォルトの名無しさん:2007/11/03(土) 15:29:43
切断検知はWriteしたときのExceptionかReadでロックしてるときにExceptionじゃないか?
777デフォルトの名無しさん:2007/11/03(土) 16:13:13
相手から切られないと絶対切っちゃだめなんだぜ?
778デフォルトの名無しさん:2007/11/03(土) 16:40:30
き、切ってなんかないんだからね!24時間ほど休憩してただけなんだからね!
779デフォルトの名無しさん:2007/11/03(土) 19:05:35
>>778
すまんちょっとワロタ。
780デフォルトの名無しさん:2007/11/03(土) 22:58:47
マジレスすると、単に応答するだけのコマンドを用意しといて定期的にやりとりする。FTPのNOOPとか。

「おい起きてるか?」「・・・ん、あ、寝てないよ、起きてるよっ」
781デフォルトの名無しさん:2007/11/03(土) 23:37:15
生存確認やるならUDPじゃねーか?
782デフォルトの名無しさん:2007/11/04(日) 00:18:00
ごめんな、既存のコネクション使って生存確認するよりUDPでやるべき、という理由がわかんない。
なんか理由あるんだよね?
783デフォルトの名無しさん:2007/11/04(日) 01:43:39
ACCESSからデータを引っ張ってきて、IDとパスワードと照合してログインする
というコードを書いてたのですが(以下)

OleDA = new OleDbDataAdapter("SELECT * FROM test", OleConn);
OleDA.Fill(Ds, "test");
if (Ds.Tables["test"].Rows.Count == 0)
{
this.lblエラー.Text = "該当IDは登録されていません。";
return;
}
DataRow inTable = Ds.Tables["test"].Rows[0];
if (inTable["PASS"].ToString() != ls_パスワード)
{
this.lblエラー.Text = "パスワードが違います。";
return;
}

DataRow inTable = Ds.Tables["test"].Rows[0];
の部分はtest.mdbのtestの1行目だけを取ってくるって事でしょうか?
上記の場合はテーブルの1行目の人だけログインが可能で
Rowsを[1]にすると、テーブルの2行目の人だけがログイン可能という状態になります
テーブルのPASSの列を全部取ってくるような書き方はあるのでしょうか?

ちなみにaccessのtestテーブルの構造は

ID NAME PASS
1 A 11
2 B 22
3 C 33
784デフォルトの名無しさん:2007/11/04(日) 02:25:21
↑ すいません 解決しました
785デフォルトの名無しさん:2007/11/04(日) 03:55:36
TCPでも無通信が長くなるなら
ダミーの通信は必要だよ。
これを、TCPで生存確認する。といってるなら
間違ってはいないとおもうがな。

>>772
相手からの切断であろうと、物理的な
断線であろうとTCPがやってくれる。
従って、自分から切断しなければいいだけ。
786デフォルトの名無しさん:2007/11/04(日) 04:05:43
C#でJavaのBeanに充たるのって、なんていうの?
やっぱBean?
787デフォルトの名無しさん:2007/11/04(日) 09:44:12
同じ概念で1対1で対応するものがあるとはかぎらんだろ。
しいて言えばComponentといえなくも無い程度だと思う。
788デフォルトの名無しさん:2007/11/05(月) 00:05:41
C#自体もじゃね
789デフォルトの名無しさん:2007/11/05(月) 20:00:30
Clickのイベントでマウスのボタン判定できないんでしょうか?
MouseDownだと、(e.Button == MouseButtons.Left)とかって判定できるんですけど・・・。

Clickイベントでボタンの判定の方法があったら教えてください。
790デフォルトの名無しさん:2007/11/05(月) 20:04:31
ClickはLeftButtonでしかおこらんだろ
791デフォルトの名無しさん:2007/11/05(月) 20:06:48
>>790
右やセンターのクリックも拾っちゃうんです。
792791:2007/11/05(月) 20:10:27
自己レスです。
MouseClickイベント使ったら(e.Button == MouseButtons.Left)で判定できました。
こっち使います。お騒がせしました。。
793デフォルトの名無しさん:2007/11/05(月) 21:06:01
WindowsFormで、TreeViewでBorderStyleをFixed3Dにした場合に、
ツリーを何箇所かクリックしていると、見た目が3Dでななくなってしまいます。

再現するには、
.Net 2.0で、VS2005で、フォームを作成し、TreeViewを貼り付け、
BorderStyleをFixed3Dにするのみです。
treeView1の初期化を以下のように単純化しても発生します。

TreeNode node = new TreeNode("親ツリー");
node.Nodes.Add( new TreeNode("子ツリー"));
treeView1.Nodes.Add(node);

これって、もしかして有名な現象なのでしょうか?
794デフォルトの名無しさん:2007/11/05(月) 22:01:38
再現しませんでした(・∀・)!!

というかBorderStyleってデフォルトがFixed3Dじゃね?
795デフォルトの名無しさん:2007/11/05(月) 22:03:19
おれんとこも再現しない。
ウィンドウズのリソース足りてる?

再起動しても再現する?
他のパソコンでも再現する?
796793:2007/11/05(月) 22:18:07
えぇ〜、こちらの環境のせいなのでしょうか?
すみません、今、自宅に帰ってきてしまいました。
リソースは足りているはずです。OSはXPです。
すみません、他のPCで明日確かめて見ます。
797793:2007/11/05(月) 23:07:19
すみません、自宅の非力なマシンで試してみましたが、確かに再現しません……。
むむむ、同時に動いていた何かのアプリによるリソースリークの疑いがありますね
798デフォルトの名無しさん:2007/11/06(火) 01:21:53
C#を勉強しようと思っているのですが、C#で書かれた
オープンソースなアプリとかってありますか?
799デフォルトの名無しさん:2007/11/06(火) 01:22:21
>>798
IronPython
800デフォルトの名無しさん:2007/11/06(火) 01:33:45
SourceForgeとかで検索すればいいじゃない
801デフォルトの名無しさん:2007/11/06(火) 01:36:36
>>798
初心者のうちは、どうかく?orgとかでいいんじゃない?
ttp://ja.doukaku.org/lang/csharp/
802デフォルトの名無しさん:2007/11/06(火) 10:25:03
質問です。

ログオンを検知したいんですが、対応出来る
イベントハンドラー無いですか?

Windowsサービスで待ち状態中にログオンを
検知してユーザー情報などを取得したいんですが…。

EventLog、スタートアップフォルダ等を使わずに、
Windowsサービスで検知しろという仕様なのです…。

昨日調べたら、ログオフ時、シャットダウン時、
ユーザー変更時というのはあったのですが、
ログオン時というのは見つけられなかったので。

誰かご存知無いです?
803デフォルトの名無しさん:2007/11/06(火) 11:11:53
>>802
死ね役立たず。
人の足引っ張って楽しいかゴミクズ。
今すぐ死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。v死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
804デフォルトの名無しさん:2007/11/06(火) 12:06:29
>>798
CodePlexやCodeProjectにいくらでもある
ほとんどがC#のプロジェクトでVB.NETは少ないけどなんでなんだろ
805デフォルトの名無しさん:2007/11/06(火) 12:07:07
>>803>>802を特定した同僚か?
私怨晴らしはネットでなんかやるなよ。。
806デフォルトの名無しさん:2007/11/06(火) 12:16:52
>>805
最近似たような荒しをよく見る気がする。
802 はたまたま通り魔的に犠牲になっただけかも。
807802:2007/11/06(火) 12:21:40

日中は別の仕事してるので803と同僚ってわけじゃない
ですよ。

もう少し調べて見ようかな。
本業じゃないのが辛いなぁ…。
808デフォルトの名無しさん:2007/11/06(火) 12:52:14
>>807
それはそうと、WindowsサービスはNETで作れたっけか?
Win32スレで聞いた方がよくないか。
809デフォルトの名無しさん:2007/11/06(火) 12:54:40
>>802
環境変数のUSERNAME取得とかじゃ駄目なん?
810802:2007/11/06(火) 13:04:40
.Net ExpressでWindowsサービス作ってます。出来ますよ。

サービスで動かすとUSERNAMEの中がSYSTEMになるので、
その方法が使えません。

イベント発生時(ログオン時)に検知して処理を行わないと
ダメっぽいですね。
811デフォルトの名無しさん:2007/11/06(火) 13:05:35
>>808
プロジェクトのテンプレートの一覧に普通にあるぞ
目大丈夫か?w
812デフォルトの名無しさん:2007/11/06(火) 13:10:35
え?
Professional以上じゃなかったでしたっけ?
813デフォルトの名無しさん:2007/11/06(火) 13:14:41
プロジェクトのテンプレートが無いだけだろ
System.ServiceProcess.dll参照して0から自分で書けばできるはず
814デフォルトの名無しさん:2007/11/06(火) 13:38:20
>>810
EventLogアクセス禁止じゃないの?
レジストリでStartupにサービス通知セットするとか
815デフォルトの名無しさん:2007/11/06(火) 14:40:34
System Event NotificationサービスへISensLogonインターフェイスを登録する。
とか言えば満足なのか?
816デフォルトの名無しさん:2007/11/06(火) 16:13:02
>>799-801 >>804
ありがとうございました。色々とあるものですね。

MOONGIFT: » C#:オープンソース紹介ブログ(毎日更新)
http://www.moongift.jp/category/programming-language/c-sharp/

こんなサイトもありました。
817デフォルトの名無しさん:2007/11/06(火) 18:58:01
TextBoxでCtrl+Aで全てのTextを選択状態にする方法を教えてください。
818793:2007/11/06(火) 19:19:19
TreeViewのBorderStyleのFixed3Dが変な件ですが、
どうやら、リッチテキストボックス以外が全て立体に見えません。
他のマシンで試しても同様です。

もしかして、これはXPのテーマが絡んでいるのでしょうか?
自宅のPCと見た目が違うのですが、もう諦めました。
気づかなかったことにします。
819デフォルトの名無しさん:2007/11/06(火) 22:13:57
>>817
Ctrl+A拾って、Text全部選択するだけじゃないか。


ってそのままの回答でよいのか?
820デフォルトの名無しさん:2007/11/06(火) 22:54:02
Ctrl+A拾うのはどのようにするのですか?
821デフォルトの名無しさん:2007/11/06(火) 23:37:34
特別に処理をしないでも
選択状態になると思うんですけど…
質問の意図が違うんかな。
822デフォルトの名無しさん:2007/11/07(水) 00:19:56
入力フォーカスなくても、って意味なのかね。
それとも、ひょっとして自分でShortcutsEnabled をfalseにしてたりしてねw
823817:2007/11/07(水) 01:24:59
特別な処理しなくてもなります?自分はならないのですけれどもXP:VC#2005Ex
Multiline:true
ShortcutsEnabled:true
の状態で複数行のTextが表示されててTextBoxにフォーカスがある状態でCrtl+Aで全て選択状態にしたいのですが
824デフォルトの名無しさん:2007/11/07(水) 01:37:35
初級エスパー試験レベルの問題だな
825デフォルトの名無しさん:2007/11/07(水) 01:46:43
>>823
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == (Keys.A | Keys.Control)) { (sender as TextBox).SelectAll(); }
}
>>819は言っている。つかフラット池
826デフォルトの名無しさん:2007/11/07(水) 02:45:58
C#の名著ってありますか?
名著に限らず、オススメの本があれば、
何冊か紹介していただけると嬉しいです。
827デフォルトの名無しさん:2007/11/07(水) 02:50:32
独習C#
828デフォルトの名無しさん:2007/11/07(水) 09:02:18
>>826
逆引き大全は持っておいて損はないかと。
829デフォルトの名無しさん:2007/11/07(水) 09:03:08
何が逆引き大全じゃ
830デフォルトの名無しさん:2007/11/07(水) 11:59:21
C#によるコンポーネントプログラミング ←これなかなかよかった
831デフォルトの名無しさん:2007/11/07(水) 12:26:31
本の評価って読み手のスキルに依存する問題だからな。
つまりどういうスキルをもった誰にとってよい本かって問題だよね。
アマゾンとかで得意げに書評書いてる連中はその辺わかってない馬鹿が多すぎるよね
832デフォルトの名無しさん:2007/11/07(水) 13:03:28
>>831
そういうあなたが一番馬鹿っぽい。
833デフォルトの名無しさん:2007/11/07(水) 19:49:20
↑アマゾンとかで得意げに書評書いてる連中
834デフォルトの名無しさん:2007/11/07(水) 19:49:39
逆切れ大全じゃ
835デフォルトの名無しさん:2007/11/07(水) 19:51:39
不毛すぎ
836デフォルトの名無しさん:2007/11/07(水) 20:21:00
(´-`).。oO(みんな"俺様、最高!!"って思ってんだろうなぁ…)
837デフォルトの名無しさん:2007/11/07(水) 21:02:20
CRC16を取得したいと思っているのですが、
どこかにC#にて作られたサンプルコードの場所を知っている方が
いたら教えてください。
838デフォルトの名無しさん:2007/11/07(水) 21:09:27
839デフォルトの名無しさん:2007/11/07(水) 22:43:15
>>830
それ良かったけど内容が古くなったなあ。

初心者には川俣氏の本も良いけど古い。
840デフォルトの名無しさん:2007/11/08(木) 00:07:09
というか3.0を初心者向けに解説できる本など生まれるのだろうか
841デフォルトの名無しさん:2007/11/08(木) 00:10:40
3.0マジで使いやすいじゃん
オブジェクトのLINQなんかないと不便すぎる
今までが不便すぎた
842デフォルトの名無しさん:2007/11/08(木) 00:15:58
でも動作の対象はXPとVistaだけなんでしょ
843デフォルトの名無しさん:2007/11/08(木) 01:51:06
C#に限らないかも知れないけど、IEnumerableとforeach使って
ループを実装するのはすごくきれいに書けるじゃない。

でも2つ以上のコレクションを比較したりしながら操作する場合、
IEnumeratorを作って書かなくちゃいけなくなって、とたんに
汚いコードになったりしない?

次の要素があるかないかをMoveNext()で判定するわけだけど、
イテレータが進んでしまうから1度ずつしか使えないし、
かといってCurrentの値で末尾かどうかを判断できるわけでもない。
どうしても余計な変数を定義する必要に迫られ、煩雑になってしまう…。
844デフォルトの名無しさん:2007/11/08(木) 01:53:34
ラムダ式を取る拡張メソッドでも作ればいいさ
845デフォルトの名無しさん:2007/11/08(木) 02:03:05
汚いとまでは思わないけど、圧倒的に面倒よね。

IEnumerable<Pair<T, U>> ToPair<T, U>(IEnumerable<T> t, IEnumerable<U> u)

みたいなメソッドをイテレータ機能使って作っとくとか?
846デフォルトの名無しさん:2007/11/08(木) 02:09:02
コレクションが同数じゃない場合どうすんのよ
847デフォルトの名無しさん:2007/11/08(木) 02:13:30
まあ、例外投げる仕様にするか、短い方できるか、長いほうに併せてもう一方をnullにするか?
やっぱあんまり実用的な感じはしないけどね。
848デフォルトの名無しさん:2007/11/08(木) 02:15:41
二つが同数って分かってるなら

colA.ForEach(colB, (a,b) =>{ ... });

こんな感じのものを作ればいいんだろう
849デフォルトの名無しさん:2007/11/08(木) 02:18:34
そうなんだけどね。
なんとなく、C# っぽく、内部イテレーション版と外部イテレーション版を両方用意したいなぁと。
あと、LINQ でもなんとかうまく書けないかなぁ。
850843:2007/11/08(木) 02:50:23
……。
詳しく知ってる人でもややこしいんだね。そう分かっただけでよしとしよう。
851デフォルトの名無しさん:2007/11/08(木) 02:52:30
外部イテレーション版というのが何をしたいのかわからないけど
別に作ればいいだろう
ラムダ式は無敵の言語構造だぜ
852デフォルトの名無しさん:2007/11/08(木) 03:37:46
>>845
Zip関数でぐぐれ。C#での実装も多数。
853デフォルトの名無しさん:2007/11/08(木) 11:25:21
いい加減、数値型にたいするGenericsを書けるようにはならんかね・・・(´・ω・`)
854デフォルトの名無しさん:2007/11/08(木) 11:52:49
俺3.0置いて行かれてる感あるけど、オマイラ業務で使ってるのですか?
ラムダ式とか変態式にしか見えないんですけど
855デフォルトの名無しさん:2007/11/08(木) 12:20:32
>>853
数値型であることと演算子の問題をごっちゃにしちゃいけない。
856デフォルトの名無しさん:2007/11/08(木) 13:20:58
10万行の配列をソートするにはどうすればよいですか?
857デフォルトの名無しさん:2007/11/08(木) 13:21:51
配列というのはList<string>です。
858デフォルトの名無しさん:2007/11/08(木) 14:50:31
>>851
外部イテレーション版ってのが、>>845 みたいなの。
MoveNext() / Value を使うタイプの反復。
LINQ で使おうと思うと、ForEach() メソッドでなくて、
IEnumerable になってないとダメだし。

>>852
それそれ。そういうの。
それを、2.0 のイテレータ構文で書こうとしたのが >>845

しかし、Zip っていうネーミングセンスはひどいな、python。
859デフォルトの名無しさん:2007/11/08(木) 14:51:31
>>855
いや、正式版が出るの今月末だし。
まだ業務ではちょっと。

ラムダ式、別に、匿名デリゲートの簡素化構文だと思えばそんな変態的でもないかと。
というか、ラムダ式が変態なんじゃなくて、
関数型言語マニアの人らがラムダ式を無理やり変態的に使おうとしてるだけ。
860デフォルトの名無しさん:2007/11/08(木) 14:52:25
>>856-857
普通に Sort() メソッド呼ぶだけじゃん。
10万行くらいならまだ別に特殊なこと必要ないでしょ。
861デフォルトの名無しさん:2007/11/08(木) 14:53:16
>>859 のアンカーずれてる。
>>855 じゃなくて >>854
862デフォルトの名無しさん:2007/11/08(木) 15:07:13
(int x) => { return x * 2; }
みたいにきちんと書くこともできるんだろ
最初からこれがあれば匿名メソッドは不要だったとMSも認めてるし
863デフォルトの名無しさん:2007/11/08(木) 16:05:16
x => x * 2
って書くくらいではまだ全然変態じゃないだろ。

変態的になってくるのは、再帰とかカリー化とかやりだしてから。
↓みたいな。

Func<Func<int, int, int>, int, Func<int, int>> bindFirst =
 (f, n) => x => f(n, x);

Func<int, int, int> add = (x, y) => x + y;
var increament = bindFirst(add, 1);

正直、これはあんまりやりすぎるのはよくないと思う。
せめて、この例での bindFirst みたいなのはラムダ式じゃなくて
普通のメソッドにすべきだと思うし。
864デフォルトの名無しさん:2007/11/08(木) 19:33:12
やりすぎはよくないです
865デフォルトの名無しさん:2007/11/09(金) 00:08:58
c#3.0はやってはいけない拡張ばかりに見える。
866デフォルトの名無しさん:2007/11/09(金) 00:20:16
うん
867デフォルトの名無しさん:2007/11/09(金) 00:20:40
開発時はいいかも知れんけど、保守担当に触らせられるか・・・
868デフォルトの名無しさん:2007/11/09(金) 00:28:53
2.0の拡張は便利さが実感できるものばかりだったのに・・・。
まぁ取り残されないように頑張る。
869デフォルトの名無しさん:2007/11/09(金) 00:42:28
匿名型は良さそうじゃね
別に読みにくくなることはないだろうし
870デフォルトの名無しさん:2007/11/09(金) 00:47:11
これぐらいで音を上げてたらprototype.js使ったJavaScriptのコードとか
Railsのコードとか誰もメンテできんのじゃなかろうか。
871デフォルトの名無しさん:2007/11/09(金) 00:53:39
3.0の便利さはとどまるところをしらないと思うがなあ。
まあやりすぎれば分かりにくくなるが、
適度に使えば実に見やすく分かりやすいコードになる。

List<string> strList = intList.ConvertAll(i => i.ToString());

これは、2.0までの

List<string> strList = intList.ConvertAll<int,string>(delegate(int i){ return i.ToString(); });

これより見やすく分かりやすいし、

List<string> strList = new List<string>();

foreach(int i in intList)
 strList.Add(i.ToString());

これよりも見やすく分かりやすいと思うが。
872デフォルトの名無しさん:2007/11/09(金) 01:12:28
Convert.ToString でいいじゃん
873デフォルトの名無しさん:2007/11/09(金) 01:43:27
ちょっとぐらい長くても、イディオムが少ないほうが読み手にとっては楽なんじゃない?
少なくとも慌てて言語マニュアル開く機会は減るかと。
874デフォルトの名無しさん:2007/11/09(金) 08:23:11
WebBrowser やIEで表示できるアプリケーションというのはたぶんCOMサーバー
とかActiveXサーバーアプリケーションという類のものなんだと思いますが、
それらを事前に判断する方法というのはあるでしょうか、ありましたらどのように
するものか知りたく。
よろしくお願いします!
875874:2007/11/09(金) 08:25:26
(追記)たとえばExcelなどはIEで表示可能でしたが、それらがActiveXサーバー
アプリケーションであるかどうかは、どのようにして知ることができるでしょうか。
876デフォルトの名無しさん:2007/11/09(金) 13:20:26
intList.ConvertAll(i => i.ToString());
みたいなの、匿名メソッドみたいにやっぱり内部で
コンパイラがクラス作ったりするの?

あれがあるから匿名うんちゃらって
例えば一回しか使わないようなとき躊躇する


>>874
まず人に分かるように整理したら?
場面が抽象的すぎてワカメだよ。

>それらがActiveXサーバーアプリケーションであるかどうかは
それらって何だよ
抽象的に答えるとすればレジストリをそれらのCLSIDで検索する
877デフォルトの名無しさん:2007/11/09(金) 13:31:12
今でもローカル変数を触らない匿名メソッドは普通のメソッドが生成されるだけだよ
さらにフィールドも触らないならインスタンスをstaticにして共有してくれたりする
878デフォルトの名無しさん:2007/11/09(金) 14:02:50
>>876
名前空間は汚染されんし、それで増える(可能性のある)フットプリントなんて
微々たるもんだろ
C#とか使っといて、んなこと一々気にする時点で何か間違ってるぞ
879デフォルトの名無しさん:2007/11/09(金) 15:05:46
だな
880デフォルトの名無しさん:2007/11/09(金) 16:13:48
あるタイマーライブラリを使う必要があり、その指定時間で呼び出されるTick関数の中身を書く必要があるのです。
でも、そのライブラリのドキュメントには、Tick内で処理に時間がかかると、次のTickが呼び出されちゃうかも。
同期処理はそっちでやってね、的なことが書いてあります。

希望としては、Tickが呼び出された時に前回のTickが処理中だったら、前の処理完了を待たずにスキップして
欲しいのです。となると、処理中かどうかを示すboolのflgと、同期用のsyncオブジェクトを用意して、以下の感じで
良いのでしょうか?すみませんが、これ以外の常識的な定石がありましたら、教えていただけないでしょうか?

private void Tick() {
 if(flg) return;
 lock(sync) {
  try {
   flg = true;
   長い処理
  } finally {
   flg=false;
  }
}
}
   
881デフォルトの名無しさん:2007/11/09(金) 18:25:29
private void Tick() { 
 lock(sync) if(flg) return; else flg = true;
 try { 
  // 長い処理 
 } finally {
   lock(sync) flg=false;
 } 


882デフォルトの名無しさん:2007/11/09(金) 19:28:28
それ意味ねーだろ。
いや意味なくはないが望む動作じゃないだろうし
もちろん望ましい動作でもない。
883デフォルトの名無しさん:2007/11/09(金) 19:30:02
と思ったら携帯でちゃんと読めてなかったわごめんご
884デフォルトの名無しさん:2007/11/09(金) 23:29:35
>880
flgをvolatileで宣言する。
885デフォルトの名無しさん:2007/11/09(金) 23:32:43
if (Interlocked.CompareExchange(ref byte flag, 1, 0) == 0)
{
try
{
// 長い処理
}
finally
{
flag = 0;
}
}
886デフォルトの名無しさん:2007/11/09(金) 23:34:46
volatileにしたところで無駄にブロックされることはあるわな。
それでどれだけ実害があるかって言えばまあそんな問題になることは少ないが。
しかし頻繁に同時起動されると問題になる可能性はある。
887デフォルトの名無しさん:2007/11/09(金) 23:35:07
flg って名前より 処理中のほうがよさそう…
888デフォルトの名無しさん:2007/11/09(金) 23:35:40
.NETアプリって実行する度、コンパイルされるの?
前回起動時と同じハードウェア構成なのに・・・

1回コンパイルしたら、メモっとけよ
889デフォルトの名無しさん:2007/11/09(金) 23:36:06
ちがた。

byte flag;



if (Interlocked.CompareExchange(ref flag, 1, 0) == 0)
{
try
{
// 長い処理
}
finally
{
flag = 0;
}
}

手書きだからまだ間違ってそうだがw
890デフォルトの名無しさん:2007/11/09(金) 23:37:14
Monitor.TryLockでもいい。
891デフォルトの名無しさん:2007/11/10(土) 00:21:48
>>888
手動でngenがある。
.NET FrameworkのBCLはインストール時にngenをかけているとか。
892874:2007/11/10(土) 00:49:51
>>876
ご指導ありがとうございます、>>874-875の件ですが、これは具体的には、

 Registry の HKEY_CLASSES_ROOT\CLSID を探し、
  InprocServer
  LocalServer
  InprocServer32
 などのキーが存在すればActiveXサーバーとして知ることができる

という感じで考えればよいでしょうか、
条件としてもし InprocServer、InprocServer32 がなかったら、インプロセスでは
使えない、ということで振り分ければよいのでしょうか?

よろしくお願いします。
893880:2007/11/10(土) 07:24:36
みなさん、色々有難うございます。
教えていただいたキーワードでググってみたら、いろいろ有益な情報を得ることが出来ました。
単なるlockステートメントよりも、Interlockの方が速度が出るようですね。

Monitor.TryLockでは見つからなかったのですが、TryEnterが見つかりました。
if (Monitor.TryEnter(this, 1)) {
などという書き方でもよいのかもしれません。

Tickのインターバルは数分〜数十分、長い処理は数十秒だと思われますので・・・
いろいろ実験してみます。どうも有り難うございました。
894デフォルトの名無しさん:2007/11/10(土) 07:54:56
ところでやたらInterlockedがlockよりもずっと速いなんて感じの記事が目に付くが、
もちろんいろんな条件によるので一概にどうとは言えないのだが、
そんな極端にInterlockedの方が速いわけじゃないよ。
895880:2007/11/10(土) 09:17:06
はい、lockは内部的にMonitor.Entryに展開されるそうです。
それから、Monitor中のfinallyが必ずしも実行されないという記述の方が気になりました。
StackOverflowが発生した場合にはfinally句が呼ばれないこともあると・・・。
896デフォルトの名無しさん:2007/11/10(土) 09:56:50
その記事は古いし、おかしいとこもあるから、
鵜呑みにはするな。
ちなみに2.0以降ではlockはかなり安全だが
スタックオーバーフローはもはやキャッチできない。
つまりあの記事の内容だとわざわざ悪化させてる事になる。
897デフォルトの名無しさん:2007/11/10(土) 10:07:52
そうそう、もともとの話だけど、そんだけ時間が空くのなら
保険的に単純なlockか、最初のようなコードで十分だと思うよ。
volatileは実は無くていいと思うけどつけたきゃつけとけw
つけた方が安全方向だしな。
898デフォルトの名無しさん:2007/11/10(土) 10:13:58
何らかの引数をひとつとる、あらゆるクラスのコンストラクタを
ジェネリックなデリゲートに汎用的にバインドさせることは出来ないだろうか…
LCG使わんと無理かな〜
899デフォルトの名無しさん:2007/11/10(土) 10:41:18
普通のリフレクションでいけると思う。
コンパイラとおしてないがこんな感じか。

delegate T D<T, U>(U u);
static D<T, U> F<T, U>() {
ConstructorInfo ci = typeof(T).GetConstructor(new Type[] { typeof(U) });
if (ci != null)
return delegate(U u) { return (T)ci.Invoke(new object[] { u }); };
return null;
}
900デフォルトの名無しさん:2007/11/10(土) 12:00:23
すまん言葉足らずだった。
遅延バインドならもう何でもありなんだが、
遅延バインドしないでやる方法があるかなってのが主旨だったんだ。
901デフォルトの名無しさん:2007/11/10(土) 12:09:02
delegate R D<R, U>(U u);
static D<R, U> F<R, T, U>() where T : R {
 ConstructorInfo ci = typeof(T).GetConstructor(new Type[] { typeof(U) });
 f (ci != null) return delegate(U u) { return (R)ci.Invoke(new object[] { u }); };
 return null;
}
こうしないと対象の型ごとにデリゲートの型が変わるよ
902デフォルトの名無しさん:2007/11/10(土) 12:23:23
>>900
ないね。IL書くしかない。
903901:2007/11/10(土) 12:24:25
あー改めて>>898読んだら>>899でいい気がしてきた
てっきりファクトリーが作りたいのかと
904デフォルトの名無しさん:2007/11/10(土) 12:29:08
C#のnew制約はほんとつかえねえからな
905デフォルトの名無しさん:2007/11/10(土) 12:56:36
where T : new()はActivator.CreateInstance<T>()を使って実装されてるよ
906デフォルトの名無しさん:2007/11/10(土) 12:57:39
指定しただけスレッドを作成してその全てが終了するまで待ちたいんだけど、
何か手はある?
907デフォルトの名無しさん:2007/11/10(土) 12:59:05
指定した数だけ
908デフォルトの名無しさん:2007/11/10(土) 13:11:44
>>900
T F<T, U>(U u) { return new T(u); } // (これはC#じゃコンパイル通らない)
に相当するコードを予めCILで書いておけばいいと思う。

そうすれば、
D<T, U> d = F<T, U>;
T t = d(u);
って具合に呼び出せるはず。
909デフォルトの名無しさん:2007/11/10(土) 13:17:49
C++/CLIでテンプレート使えお
910デフォルトの名無しさん:2007/11/10(土) 13:21:02
>>908
それだと実体化する側で、Tにが.ctor(U)を持ってるかどうか判断できないね。
911デフォルトの名無しさん:2007/11/10(土) 13:28:22
その辺C#というか.NETの限界だね。
ランタイムリフレクションは充実してるけど、
コンパイルタイムリフレクションの機能がnew()制約ぐらいしかない。
912デフォルトの名無しさん:2007/11/10(土) 13:32:38
属性付けといてビルド後に調べたら
913デフォルトの名無しさん:2007/11/10(土) 13:57:44
「あの記事」ってどの記事なんだろ
俺が知らない間に最近じゃ俺以外みんなエスパーになっちゃったのかなw
914デフォルトの名無しさん:2007/11/10(土) 14:14:47
aho
915デフォルトの名無しさん:2007/11/10(土) 15:25:25
916デフォルトの名無しさん:2007/11/11(日) 00:48:48
VC#は本当に惜しい

これでWIN32をシームレスにコールでき、ネイティブが吐けるなら
Win32対象のソフトウェアは間違いなくVC++の牙城を崩せたものを・・・
917デフォルトの名無しさん:2007/11/11(日) 00:49:49
MSはP/Invokeの宣言を集めたアセンブリを作っておくべきだったな。
918デフォルトの名無しさん:2007/11/11(日) 01:00:09
質問です。
現在のプロセスで実行中の、マネージスレッド(System.Threading.Thread)を
列挙することってできますか?
919デフォルトの名無しさん:2007/11/11(日) 02:01:12
そのうち、アンマネージドの名前空間クラスでも作ってリリースするんじゃないの?
需要は確実にあるんだからね。
920デフォルトの名無しさん:2007/11/11(日) 02:04:24
名前空間クラスってなんですか?
921デフォルトの名無しさん:2007/11/11(日) 12:00:39
普通に考えて、名前空間のクラスだろう。
2ちゃんであげ足とっていたら、キリがない。
922デフォルトの名無しさん:2007/11/11(日) 12:17:13
まあそれはいいんだけど、本当にWin32API多用してて面倒だと思ってる人なら
むしろ916,917,919みたいなこと言わないと思うんだよね。

だってWin32 APIをインポートするときのシグネチャって同じAPI関数をコールする場合でも
用途によって変わっちゃう場合があるからなあ。
923デフォルトの名無しさん:2007/11/11(日) 12:24:19
一般的に使われる全てのオーバーロードを提供してくれればいいよ。
924デフォルトの名無しさん:2007/11/11(日) 13:27:47
今更ネイティブ吐けるようになっても嬉しくないな
最初からネイティブ吐けるようにしといて、.NET2.0以降ではサポート外にすればよかったと思う
925デフォルトの名無しさん:2007/11/11(日) 16:54:23
>>905 まじで?
926デフォルトの名無しさん:2007/11/11(日) 17:31:39
マジかどうか確認もしてないが、
ほかに使い道がなさそうなActivator.CreateInstance<T>()が追加されてることと、
プライマリ制約レベルでILが共有されることを考えると、おそらくそうだろうと思える。
927デフォルトの名無しさん:2007/11/11(日) 17:46:00
C#コンパイラの範囲だからReflectorで簡単に確認できるよ
static T Create<T>() where T : new() { return new T(); }
  ↓
static T Create<T>() where T : new(){
 if (default(T) != null) { return default(T); }
 return Activator.CreateInstance<T>(); }
928デフォルトの名無しさん:2007/11/11(日) 18:46:33
つまり値型のときは既定のコンストラクタは呼ばれないのか?そうなのか?
まあC#の範疇では一緒だけど…
929デフォルトの名無しさん:2007/11/11(日) 18:48:42
よく考えてみたらnew制約はずすことは簡単にできるのなw
930デフォルトの名無しさん:2007/11/11(日) 18:55:38
んーこれって事実上レイトバインディングってことか?
931デフォルトの名無しさん:2007/11/11(日) 18:57:02
new制約自体はCLRのものだから問題ない
932デフォルトの名無しさん:2007/11/11(日) 19:43:11
>>928
ILGeneratorで構造体に無理やり既定のコンストラクタを定義して試してみたら呼ばれなかった
そんなことよりも、既定のコンストラクタを定義した構造体をC#から使えることに驚いた
933デフォルトの名無しさん:2007/11/11(日) 23:04:27
Accessをデータベースとして家計簿を作成しているのですが、tableの列の合計を
うまく出力できません。
private void frm分析_Load(object sender, EventArgs e)
{
OleDbConnection OleConn = new OleDbConnection();
OleDbDataAdapter OleDA;
DataTable Ds = new DataTable();
OleConn.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:\\etc\\開発\\test.mdb;";
string expenditure = "select sum(table1) from test";
OleDA = new OleDbDataAdapter(expenditure, OleConn);
OleDA.Fill(Ds);
DataRow dr = Ds.Rows[0];
this.lblテスト.Text = dr["table1"];
}
最後の"this.lblテスト.Text = dr["table1"];"の部分でエラーが出ます。
エラーを見ると、Select sum…の部分があやしいです、ただlblテストにtable1の
合計を出力したいだけなのですが、どなたか上のコードを修正していただけないでしょうか。。
ちなみにAccessのtestテーブルは、table1という名の列に一桁の数字が6つあるだけです
934デフォルトの名無しさん:2007/11/11(日) 23:11:26
select sum(table1) as table1 from test でどうだ
935デフォルトの名無しさん:2007/11/11(日) 23:12:08
マルチ死ね
936デフォルトの名無しさん:2007/11/11(日) 23:13:24
this.lblテスト.Text = dr["table1"].ToString(); かも
937デフォルトの名無しさん:2007/11/11(日) 23:32:13
クエリ定義の SELECT で指定されている別名 'table1' が循環参照を発生させています。
>>934>>936を入れたら、上記のエラーが発生しました。。
938デフォルトの名無しさん:2007/11/11(日) 23:34:15
>>937
そこまで書いてあったら、少しぐらい頭使ったらどうだ?
939デフォルトの名無しさん:2007/11/11(日) 23:41:08
>>937
つまり、同じフィールド名を作ろうとしてるからエラーが出ると思って
string expenditure = "select sum(table1) as table2 from test";
OleDA = new OleDbDataAdapter(expenditure, OleConn);
OleDA.Fill(Ds);
DataRow dr = Ds.Rows[0];
this.label1.Text = dr["table2"].ToString();
こういう感じに書き換えたんだが、OleDA.Fill(Ds);のところでエラーが発生する。。
色々考えてやってはいる
940デフォルトの名無しさん:2007/11/11(日) 23:42:04
エラーメッセージとスタックとレースを書け
話はそれからだ。
941デフォルトの名無しさん:2007/11/11(日) 23:43:31
>>返信してくれたALL

成功しました!!
本当にありがとう!!
942デフォルトの名無しさん:2007/11/11(日) 23:44:49
>>934>>936ありがとう!
943デフォルトの名無しさん:2007/11/11(日) 23:45:50
まあ、普通に考えて接続エラーだろう。
944デフォルトの名無しさん:2007/11/11(日) 23:48:49
dr[0]ってできないの?
945デフォルトの名無しさん:2007/11/11(日) 23:56:54
出来るけどdr[0]はObject型だから.Textに直接挿入できないからエラーだったんだろーね。
946デフォルトの名無しさん:2007/11/12(月) 00:00:53
ってことは(string)dr[0]でいいの??
947デフォルトの名無しさん:2007/11/12(月) 00:06:17
ToStringじゃね?
948デフォルトの名無しさん:2007/11/12(月) 00:11:18
>>946>>947もいいと思うけど
普通は暗黙的に変換できないってコンパイルエラー出るはずなんだがな、、、
949デフォルトの名無しさん:2007/11/12(月) 01:49:26
for文か何かで10回繰り返して
ArrayListに順番にaddで追加したいのですが、
addすると1つ目の値が設定された後、2つ目の値を設定するときに
1つのところにに上書きされて、2つ目の値が1つ目に設定されてしまいます

最後には10個目の値が1〜9それぞれに同じ値になってしまいます
この場合、どうすればいいのでしょうか?
950デフォルトの名無しさん:2007/11/12(月) 02:00:38
>この場合、どうすればいいのでしょうか?
意味がわかるように説明するといいです
951デフォルトの名無しさん:2007/11/12(月) 02:01:17
>>949
こういうこと・・・な訳ない・・・か
IList<int> list = new List<int>();
for (int i = 0; i < 10; i++){list.Add(i);}
foreach (int item in list) { Console.WriteLine(item); }
952デフォルトの名無しさん:2007/11/12(月) 02:07:53
失礼しました
ArrayList list = new ArrayList
のあと
list.add("1")
list.add("2")

list.add("10")
これを繰り返す。
しかし最終的にlistの中身を見るとすべて"10"になっている

参照渡しというものらしいのですが
回避する方法がよくわかりませんので教えてください
953デフォルトの名無しさん:2007/11/12(月) 02:35:07
>>952
その例でそういう現象はおきない。
「listの中身を見る」方法がおかしいのと違う?
再現性のあるコードをアップよろ。
954デフォルトの名無しさん:2007/11/12(月) 03:30:58
class A
{
int a;
}
A a = new A();
:
list.Add(a);
a.a = 2;
list.Add(a);
:
こんなことしてたりしてw
955デフォルトの名無しさん:2007/11/12(月) 04:34:59
> 参照渡しというものらしいのですが
   ↑
  怪しい
956デフォルトの名無しさん:2007/11/12(月) 10:30:40
class A
{
MethodA()
{

}
957デフォルトの名無しさん:2007/11/12(月) 10:31:48
for(int i = 0 ; i < 10 ; i++)
{
a = i;
list.Add(a);
}


こんなことしてるんだろうな
958デフォルトの名無しさん:2007/11/12(月) 12:01:54
こんな感じかしら?
for (int i = 0 ; i < 10 ; i++)
{
str = list[i];
}
for (int i = 0 ; i < 10 ; i++)
{
Console.WriteLine(str);
}
959デフォルトの名無しさん:2007/11/12(月) 14:30:34
ここはお題に沿ったコードを書き込むスレですかw
960802:2007/11/12(月) 21:58:19
>>815
ありがとうございました。

やれば何とか出来るものですね。
要精進。
961デフォルトの名無しさん:2007/11/12(月) 22:02:24
VS2005のエディタの設定ででVB.NETのように「プロシージャ行の区切り記号を表示」みたいなのはありますか?
962デフォルトの名無しさん:2007/11/12(月) 22:02:39
証券会社のHPにHttpWebRequestでアクセスして
株の自動売買を作ろうとしてしているんだけど、
ログインはできたんだが、違うページに飛んだら
サービスが利用できない怒られるんだ(´・ω・`)
クッキーもちゃんと保存してるんだけどなぁ
誰かわかる人教えてください。
963デフォルトの名無しさん:2007/11/12(月) 22:10:08
https://sec.gmo.jp/corp/guide/kabu/webservice/

↑こういうのでやろうとしてるの?
よくワカランけど。
964デフォルトの名無しさん:2007/11/12(月) 22:18:18
gmoはAPIとか提供してるんかなぁ?
Eトレードでのホームページにデータを
POSTして発注とかを考えてるんだけど
SSLとかのせいかうまくいかない(´・ω・`)
965デフォルトの名無しさん:2007/11/12(月) 22:42:18
WebBrowser の DOM をいじったほうが楽かもしれない
966デフォルトの名無しさん:2007/11/12(月) 23:09:50
>>962
そのページはjavaスクリプトで移動先のページのアドレス書き換えたりしてない?

おとなしくwebbrowserでやったら?
スピードなんて対して変わらない。
967デフォルトの名無しさん:2007/11/12(月) 23:33:13
webbrowserなんてあるの知らなかったw
formのPOSTもできそうだしおとなしく
webbrowserにしときます。
ありがとうございました。
968デフォルトの名無しさん:2007/11/12(月) 23:46:31
>>967
勧めといてなんだけど。。。
それが結構面倒でむずいんだよね。

俺は出来るけど。
無駄レス -完-
969デフォルトの名無しさん:2007/11/13(火) 00:27:38
構造体をbyte[]にコピーしたいんだけど、BinaryReaderでコツコツ読むんじゃなく一発でできませんか?
unsafeでかまいませんので
970デフォルトの名無しさん:2007/11/13(火) 00:51:43
fixed
971デフォルトの名無しさん:2007/11/13(火) 00:54:53
読み込み側がよく分かんねーっす

unsafe struxt Foo{
public fixed byte hoge[100];
}
972デフォルトの名無しさん:2007/11/13(火) 00:56:15
全くちがうっす。
973デフォルトの名無しさん:2007/11/13(火) 01:02:05
MemoryReader
974デフォルトの名無しさん:2007/11/13(火) 01:04:16
>897
仕様上は弱いメモリモデルってことになってるし弱いメモリモデルだとvolatileが必要になるけど、
普段使ってるMSILが強いメモリモデルを採用してるので無くても動く。
975デフォルトの名無しさん:2007/11/13(火) 09:22:23
まあ現実まずCLRでしか動かさんだろうからな。
てかMSILというよりCLRのメモリモデルだな。

しかし書き込みが常にvolatileってのは
パフォーマンスにはそんなには影響しないんだろうか?
まあ86や64ならいいんだろうけど。
976デフォルトの名無しさん:2007/11/13(火) 09:31:39
質問があります。
C++だと public void piyo(bool f=false) のように関数引数の初期値を設定できますが
C#でもできますか?
977デフォルトの名無しさん:2007/11/13(火) 09:42:47
できまちぇん
978976:2007/11/13(火) 09:43:41
>>977
サンクチュ
979デフォルトの名無しさん:2007/11/13(火) 11:19:29
「ログ」って何ですか?何かの略語でしょうか?
980デフォルトの名無しさん:2007/11/13(火) 11:24:44
スレ違いだと思うのだが
ログは記録
ログファイル→実行記録
エラーログ→エラー記録
だからログインは記録に残すという意味から来たのだろう
981デフォルトの名無しさん:2007/11/13(火) 11:26:37
ロガリズムの略ですね
982デフォルトの名無しさん:2007/11/13(火) 11:37:24
>>980
どーも
983デフォルトの名無しさん:2007/11/13(火) 11:42:45
ちゅーか用語の意味を調べたい場合、ググるクセつけた方がいいよ。
「用語 XX」ってググれば、ほとんどのコンピュータ用語は正確に把握できるから。

ここで聞けば経験則に基づく情報は得られるだろうけど、
間違ってる可能性も否定できないし。
984デフォルトの名無しさん:2007/11/13(火) 12:37:10
つーかおもっくそスレ違い
985デフォルトの名無しさん:2007/11/13(火) 16:46:48
googleの差し金
986デフォルトの名無しさん:2007/11/13(火) 17:33:55
990の人、次スレよろしくね。
987デフォルトの名無しさん:2007/11/13(火) 17:53:35
>>990

早く立てろよ。
988デフォルトの名無しさん:2007/11/13(火) 18:43:49
だが断る
989デフォルトの名無しさん:2007/11/13(火) 18:44:54
た て ろ
990デフォルトの名無しさん:2007/11/13(火) 19:15:36
拒否!!!
991デフォルトの名無しさん:2007/11/13(火) 20:06:12
>>990

早くたてやがれ、クソ野郎。
992デフォルトの名無しさん:2007/11/13(火) 20:35:25
993デフォルトの名無しさん:2007/11/13(火) 20:49:42
>>992 は神!!















でなく糞
994デフォルトの名無しさん:2007/11/13(火) 21:21:13
うまくたてれましたでしょうか。
テンプレお願いし、増す。

C#, C♯, C#相談室 Part44
http://pc11.2ch.net/test/read.cgi/tech/1194956418/
995デフォルトの名無しさん:2007/11/13(火) 23:15:32
>>994
996デフォルトの名無しさん:2007/11/13(火) 23:20:12
>>994乙梅
997デフォルトの名無しさん:2007/11/13(火) 23:38:38
>>994
おせーよボケ、テンプレも張れ
998デフォルトの名無しさん:2007/11/14(水) 00:16:43
>>994
999デフォルトの名無しさん:2007/11/14(水) 00:46:10
999
1000デフォルトの名無しさん:2007/11/14(水) 00:46:44
1000でC#は世界を翔ける
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。