他にもあったらよろ いらんとなったら次スレ立てるとき適当に消しといてくれ
やっと建ったか乙
7 :
デフォルトの名無しさん :2008/12/20(土) 12:50:46
WindowsアプリのToolStripButtonを 作成し、実行時にこのボタンがクリックされるとき、 ボタンの色が変わりますが、この色を変える ことってできますか?? もちろんシステムの背景色の設定を いじる以外で。
ToolStripRendererを継承してオーバーライドする
.NETFrameworkってタイトルの6000円ぐらいの本買ったんですが いま3.5でこれ2.0みたいなんですが、もしかして失敗しましたか? MS公認?C#上下とかいうやつとなにか違いあるんですか?
なぁにぃ?やっちまったなー
安心しろ、間違ってない。
どっちなの・・・つらい
2.0+α+αが3.5やし無問題 +α分については別の本買えばいい
プログラミング .NET Framework だったかいう本だろ? あれはどっちかっていうとCLR2.0本とも言えるような内容だから。 .NET 3.5用は出てないしな。 少なくとも買って間違いな本じゃない。 ってかむしろ1冊持っとけって本。
ありがとうなんか元気が出てきた(謎
2chねるって人気ないんですか? インターネットって日本中の人が見ることができるから1秒に2,300件ぐらい書き込みがあってもいいと思うのですが。 ここって10人ぐらいしかいない感じしませんか? もっと活発なインターネットはあるんでしょうか?
VIPへいけ
>>16 ドウモ〜〜〜ッ!!お〜o(⌒0⌒)oは〜♪ハジメマシテ〜〜〜ッ☆☆(*⌒ヮ⌒*)
私は27歳のOLしてるのぉ〜〜〜っ♪(#⌒〇⌒#)キャハ
うーんとー、私メル友がすっごくすっごく欲しくってー、\(⌒∇⌒)/
探してたら(◎_◎)なんとっ!☆彡(ノ^^)ノ☆彡ヘ(^^ヘ)☆彡(ノ^^)ノ☆彡
素敵な掲示板♪を発見!!!!(^o^)//""" パチパチパチ
あやしい所とか…{{ (>_<;) }} ブルブルすごい数の掲示板がありますけど、
これ全部1人の方が管理しているんですか?(@@;)すごすぎ …
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘφ(`∇´)φカキコカキコ♪
メル友に、なってくれるよねっ。(*^-^*) お・ね・が・い♪(* ̄・ ̄)ちゅ♪ッ
え?くれないのぉ〜?(;¬_¬)そんなのいやいや〜〜、ガ━━━(゚ロ゚)━━━ン
なってくれなかったら、( `_)乂(_´ ) 勝負! \(^o^)/
☆○(゜ο゜)o ぱ〜んち、☆(゜o(○=(゜ο゜)o バコ〜ン!!( ゚▽゚)=◯)`ν゚)・;'パーンチ
(>_<) いてっ!ダメ!! ゛o(≧◇≦*)oo(*≧◇≦)o″ダメ!!
(☆o☆)きゃ〜〜(@_@;)やられた〜〜(o_ _)o ドテッ ガ━━(゚Д゚;)━━ン!
(+_+) 気絶中。。。。・゚゚・o(iДi)o・゚゚・。うぇぇん <(゜ロ゜;)>ノォオオオオオ!! ??゚□゚;ハウッ!
なあんて(#⌒▽⌒#)こんな私っ!σ(^_^)だけど、(///▽///)
お友達になってm(_ _)mくださいませませ♪('-'*)フフ ドガ━━━Σ(ll◎д◎ll)━━━━━ン
ということで。(^-^)vじゃあね〜〜〜♪(⌒0⌒)/~~ ほんじゃo(゜▽゜ヽ)(/゜▽゜)o レッツゴー♪
それでは、今から他の掲示板も色々見てきまーすC= C= C= C=┌(^ .^)┘
コピペ君って馬鹿だな、まで読んだ。
C#ってよくできてる言語だと思ったんですが あんまり現場で使われてないような気がします。 どうしてですか?
βはVHSよりもすぐれていたけれども流行らなかったでしょ
どういう現場を想定してるんだろ。
24 :
デフォルトの名無しさん :2008/12/23(火) 07:31:35
>>21 どういう現場か知らんが、VBしか使えないようなPGが多いから
VB.Netで行こうみたいな安易な選択することが多いのか?
VB→VB.Net の移行するぐらいなら いっそのこときれいさっぱりC#で始めた方が
よっぽどいいと思うんだが。
>>21 >>24 Visual C++ + MFC の時代のときに投げ出して、それ以来 Windows の C は怖くて使えなくなったに違いない!
>>21 うちはFA関係の仕事ですが、パソコン側のソフトは今はC#が中心です。
ときどき、C++ MFC、VB6の指定がありますが。
たまたまだと思いますが、VB.netの指定は入ったことがありません。
29 :
デフォルトの名無しさん :2008/12/23(火) 17:04:28
日本語メソッドとか変数名多用する人います? 私は多用しますがウケが悪いので困ってるのですが。
日本語環境以外でもコード書くので、そんなことはしません。
31 :
29 :2008/12/23(火) 17:11:36
>>30 確かにそういうケースはありますね。
では日本語環境で限定したケースではどうでしょう?
漢字変換の切り替えが面倒なんで、コメントも英語で書いてます。
33 :
29 :2008/12/23(火) 18:13:53
>>32 確かにデメリットはそうでしょうね。
自分が思うのはそういう人ってキーボードの使い方が悪いんではないんでしょうか?
キーボードの使い方自信ある人もそうでしょうか?
bool InputCheck()
{
34 :
29 :2008/12/23(火) 18:14:57
} って定義して実際使うときに //入力チェック if(InputCheck()) { } てするなら if(入力チェック()) { } の方がよいと思うわけです。
変換が面倒 インテリセンスのインクリメンタルサーチがきかん あれ?最近のはきいたっけ?
インクリメンタルサーチは効かないよ どれだけキーボードの使い方に自身がある人(w)でも絶対に英語のほうが効率よく入力できる。
キーボードの使い方ってなんだ…?
よく日本語のが分かりやすいに決まってる!て意見を聞くが、 プログラミングで使う識別子じゃ大して変わらんとも思う。
他人に意見するほどこだわりは無いけど、俺は嫌だ。
俺は結構積極的につかってるけど、たしかにインテリセンスでの検索がめんどくさいね〜
うん、だから他人が書いたコードを読むだけなら慣れれば案外ありかも知れないけど、 自分で書く場面ではインテリセンスとの相性が悪い一点で却下だな。
if (checkInput()) で何も困らん。
日本語識別子つかったことないけどたしかにインテリセンスとの相性は悪そうだな migemo的なのを使わせられればよさそうだが
checkInput入力チェック()なら完璧
これ何記法になるんかなw
変態さんは変態スレへどうぞ
ほんとどうでもいいがInputCheckって書いてあったら チェックを入力する?なんぞ?ってなる
テストコードのメソッド名は日本語にしておくと、テスト時楽。 製品コードはアルファベットだな。 ローマ字を極端に嫌うやついるよな。 "Input"を"Nyuryoku"と入れられるのは確かに俺もいやだが、 "GenkaShokyaku"(減価償却)を"Depreciation"と入れられても、可読性が損なわれると思うんだがな。
わかりにくいことばは日本語でもおk
>>48 変な略されてなけりゃ辞書引けば分かるし、
その分野の用語の英語表現ぐらい知らなきゃまずいと思うけど。
少なくとも大した手間じゃない。
変に対訳表みたいの作るくらいなら、わかりやすいローマ字の方がいいな。
>>48 その主張見るたびに思うんだが、調べりゃすぐわかるから
落ちないだろ可読性。一回わかりゃ終わりだし
さくさく調べられる時代になった今ではすでに無理あると
思うよその主張
対訳表ってアホかw 英語のまま理解しろ。
どのプロジェクトにも間抜けなやつはいるもんでね。 ある程度は、そいつにレベルをあわせる必要があったりするんだよな・・・
>>48 メソッド名にマウス持っていけば「減価償却を行います。」とか説明が出るだろ
もしかして、コメント全く書かない人ですか?
おれ、コメントもドキュメントも英語で書くよ。 外注先インド人だし、客はアメリカ人だ。
お前らフィールド全部にプロパティ作ってる?
ワタシ、コメントもドキュメントも中国語で書くアルよ。 外注先中国人だし、客は台湾人アル。
外部に公開するやつは全部プロパティ作ってる
プライベートフィールド用は作らんの?
以前は作らない事が多かったけど(入力チェックが必要な時とかは例外) C#3.0になって自動プロパティ使えるようになってからは、方針転換した。 クラス内からでも基本プロパティ経由でアクセスさせてて privateフィールドを直接使うのは、ラップするプロパティを除けば、特定のメソッドから"のみ"利用する場合だけ。
62 :
デフォルトの名無しさん :2008/12/24(水) 08:52:44
質問です。 独自のプロパティをもたせたボタンを作ろうと Buttonクラスを継承してクラスを作ったのですが、 フォームに生成(描画?)できません。 どうやったら生成されるのでしょうか? public class HageButton : Button { HageProperty m_hage; //独自プロパティ private void CreateHageButton(int maxButtons) { Button[] m_customBtn = new Button[maxButtons]; int loopButtonIndex = 0; for (loopButtonIndex = 0; loopButtonIndex < maxButtons; loopButtonIndex++) { //↓現状固定値で入れてますが、上手くいかない為で、本来は独自プロパティから読み込んだ座標の設定が入ります。 m_customBtn[loopButtonIndex] = new System.Windows.Forms.Button(); m_customBtn[loopButtonIndex].Location = new System.Drawing.Point(100, 200); m_customBtn[loopButtonIndex].Name = "btn_Config"; m_customBtn[loopButtonIndex].Size = new System.Drawing.Size(117, 33); m_customBtn[loopButtonIndex].TabIndex = 2; m_customBtn[loopButtonIndex].Text = "Hage"; m_customBtn[loopButtonIndex].UseVisualStyleBackColor = true; m_customBtn[loopButtonIndex].Visible = true; m_customBtn[loopButtonIndex].Click += new System.EventHandler(this.hageFunction); m_customBtn[loopButtonIndex].Refresh(); m_customBtn[loopButtonIndex].Show(); } }
プロパティのsetアクセサ内で自身がButtonから継承したプロパティを設定する
TypeCodeからTypeを取得するメソッドってある? 逆はあるけど
65 :
デフォルトの名無しさん :2008/12/24(水) 10:01:22
C#触り始めて数日なのですが なんとかハローワールドがアラート?表示できるようになりました そこで記念にexeにしておいておきたいのですがexeにする方法が分りません。 やり方を教えてもらえないでしょうか? VC#2008を使用しています
>>64 前にどっかの掲示板でその話題を見たことがあるな
結論はswitch/caseでチェックするしかない、だったはず
67 :
デフォルトの名無しさん :2008/12/24(水) 10:17:43
>>63 レスありがとうございます
>>62 で設定してるのですが他に何が足りないのでしょうか?
親コントロールのControlsにAddする必要がある ところでそのHageButton自身はButtonじゃなくてButtonのコンテナじゃないのか? ならButton派生じゃなくてUserControl派生にすべきだが // やりたいのはHTMLのクリッカブルマップみたいなの?
>>65 bin/Debug/プロジェクト名.exe
70 :
65 :2008/12/24(水) 10:31:19
>>69 ありがとうございます
勝手に出来るんでね
助かりました。
71 :
デフォルトの名無しさん :2008/12/24(水) 11:33:54
>>68 ありがとうございます
う〜ん、何と言いますか
ユーザーが自由にボタンを配置・設定出来て、
動的に生成されるボタンが欲しいんです
で、そのボタンは押されたら独自のプロパティに設定された動作を実行する
みたいな感じなんです
ThreadPoolを使ったスレッド内でCOMコンポーネントを使いたいのですが スレッドをSTAにする事は出来ないのでしょうか? スレッド起動後にThread.CurrentThread.SetApartmentState(ApartmentState.STA);を試してみたのですがInvalidOperationExceptionでだめでした。
無理
質問です。 下記のコードをEclipseにてデバッグしました。 int i の宣言の行にブレークポイントを置いてあります。 そのままステップインを続けると、System.out.print(sMsg)の行でソースファイルが見つかりませんと出ます。 コメントホバーを日本語化するためにソースファイルの参照をapiフォルダに変更したからなのですが、 そもそもSystem.out.print()メソッドのソース内までステップ実行してもらう必要がないのです。 この場合どのように設定したらいいでしょうか? class Test { public static void main(String args[]) { int i; char[] a = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' }; String sMsg = "0から9までの数字を入力してください : "; System.out.print(sMsg); i = readNumber(); if (0 <= i && i <= 9) System.out.println(a[i]); else System.out.println("範囲外ですよ"); } // キーボードから数字を入力するメソッド public static int readNumber() { byte[] b = new byte[100]; try { System.in.read(b); return Integer.parseInt((new String(b)).trim()); } catch (Exception e) { return -1; } }}
75 :
74 :2008/12/24(水) 13:29:11
ゴバック失礼
>>71 ボタンを生成したり配置したりする処理をボタン自身の中に書くのはおかしい
77 :
29 :2008/12/24(水) 22:14:02
>>35 >>36 先頭一文字は変換する必要ありますね
でも覚えにくい変数名思い出す手間よりは早いと思います
>>38 自分のためのツールならとにかく、自分の現場では今まで
仕様書漁らないと変数名と役割のひも付けができないものが多かったので
日本語の方がかなり可読性が高いです
辞書で調べてつけたような変数名が多いので。
>>48 確かに。自分の命名方法が間違ってました。
>>51-52 塵も積もれば、ですし、PG考えてるのに気が散ります
10個や20個の変数ならとにかく。
>>55 その手間が無駄です
いくつか省略させてもらいましたが、要約すると
インクリメンタルサーチできないってのが大きいみたいですね。
あとは変数とその役割の理解しやすさによって考えるといいかもしれませんね。
普通、最初に用語集作って英訳も付けると思うんだがやらないところ多いのか
>>77 自分が酷い現場ばっかりに回されたからって、他も同じと思うなよ。
>先頭一文字は変換する必要ありますね
>塵も積もれば、ですし、PG考えてるのに気が散ります
変換する手間で気が散るのだが
>>78 俺のとこも、あまり一般的でない用語に関しては英訳用意するな。
まあ中途半端にローマ字にされるよりは日本語の方がいいよね
ローマ字や日本語は綴りが一意に決まらないから・・・
英語で綴りが一意に決まるのは、単に知ってる語彙が少ないからじゃない?
83 :
29 :2008/12/25(木) 01:12:56
>>82 そうそう。
私を始めみんな結構知らないんで日本語がよいかと。
確かに英訳するといくつもある場合が多いけど、自然な物を選択していけば普通に使えるしなあ メソッドの意味が分からんならインテリセンスに聞くし
centre と center とかあるけど ローマ字や日本語よりゃ遥かにレアだろ。
>ローマ字や日本語は綴りが一意に決まらない ?
ここでいいよ
C#のプログラムをjavaのプログラムと連携させる必要があります。 どうするのがベストでしょうか? ちなみに2000ステップくらいです。 1.javaに書き換える 2.exeをjavaから実行する 3.dllにする 4.その他
何をするかも分からん状況では書き換えろとしか
保守とかそういう話を全部抜きにして言うと、 (1) そのC#のプログラムが .NET のライブラリをガシガシ使って無いなら、 全部書き換える(=1)が早い。2000行なら1日で移植できるだろ もし.NETベタベタで、 (2) 単にデータを処理するバッチ的なプログラムなら、exeとして呼び出して 出力(XMLとか)を解析するのが早い(=2) (3) JavaプログラムとC#プログラムが相互に連携(通信とか)するなら、 やっぱり書き直した方がいいと思う(=1) JavaとC#でプロトコル決めてSOAPとかで通信するって手もあるが 2000行じゃ割に合わないだろうな
ありがとうございます。 C#プログラムは.NETライブラリバリバリです。 javaに移植しようとすると対応するライブラリがあるのか心配です。 あと、javaとの相互通信はありません フローはこんなかんじです javaからC#呼ぶ ↓ C#でファイルに対して加工処理 ↓ 加工されたファイルに対して続きの処理
>>86 ヘボン式、訓令式、日本式、あるいはそれらの混合。
外来語をローマ字で書くかもとの綴りにするか。
漢字で書くかひらがなでかくかカタカナで書くか。
外来語をローマ字で書くやつっているの? tasuku とか?
英語出来ない奴はそう書く
ローマ字ソース見たことあるけど、 動詞と名詞の区別が滅茶苦茶ですごい可読性低かった。
ステップ数とか意味わからんよね
CILのOpCodeが2000個とか
最適化で工賃へるんですね
ローマ字の表記法は一意に定められるだろ ローマ字の表記法はいくつかあるが、どれか採用すればいいだけだ
一般に大阪はOsakaだが大崎はOhsakiだぜ また人名だと個々に好みのスペリングがあるから簡単には定まらない
定まらないって定めないからだろ OhsakaにするかOosakiにするか決めりゃいいだけだ 俺はO_sakaが好みだが
(´・ω・`)しらんがな
マルチスレッドで受信したイベントデータを、受け取った順番どおり 保持して、(次のイベントがくるまで終わらないくらいに)時間がかかる処理を 順に行いたいのですが、こういう仕組みはどうやって 実現すればいいんでしょうか。lockでは順番は保持されないらしいのですが。
(非同期1)[データ1受信] (非同期2) [データ2受信] (非同期3) [データ3受信] (メイン) [データ1処理 ][データ2処理 ][データ3処理] こんなことがしたいのですが、うまく説明できない
メインにQueueもっといて各スレッドで受信完了時にロック取得してEnqueue→ロック解放 メインは処理が終わるたびロック取得してDequeue とか?
キューじゃだめなの
保持するイベントデータは配列に登録するようにして、 メインにおいてはイベントデータ配列をループし、 イベントデータががないときは待機して イベントデータがある場合は処理して次にループ というかんじでいいんじゃね?
Visual C# 2008 Express Edition と SQL Server 2008 をインストールして今.NETを勉強してます。 PG経験はVB5少々、Delphi少々って感じです。 ようやく古いAccessのデータMDBをMDFというのに変換してdataGridViewに表示は出来ました。 で、簡単な顧客管理を作ろうと思ったのです。 顧客番号入れて該当の名前を表示するという単純な・・・ Delphiだとこんな感じでしょうか。 with User do begin wk:=EId.Text; Active:=true; // ファイルOPEN IndexName:='ID'; // インデックス設定 if FindKey([wk])=true then EName.Text:=FieldByName('Name').AsString // 該当あり else ShowMessage('見つかりません'); // 該当なし Active:=false; // ファイルCLOSE end; 同じ事をやろうとホームページとか調べたんですがdataGridの説明はたくさん見つかるのですけど やりたい事が全然見つかりませんでした。 どこかいいホームページとかあったら教えて下さい。
DataGridViewに対してどのようにデータソースを設定しているかわからんが。 まあ、それは別として DataTable型オブジェクトをtblとしこのtblに顧客データが取得されているものとし、かつIDが主キーに設定されているものとすると DataRow foundRow = tbl.Find(wk); if(foundRow != null) Ename.Text = foundRow("Name").ToString();
アプリケーション設定ファイルを任意のディレクトリに保存したい場合は SettingsProviderを自力で実装するしか手が無いんでしょうか? シンプルに、↓こんなディレクトリに保存したいだけなんですけども C:\Documents and Settings\<ユーザー名>\Application Data\<アプリ名>\
Shell32.dll等のアイコンを抽出するのはどうしたらいいんでしょうか。
Icon.ExtractAssociatedIconで。 Exの方はないので複数のアイコンを取り出したいならAPIを呼ばないと無理かと思う。
しょうもない事で何回ループさせれば気が済むんだ馬鹿野郎
ごめんなさい
どんまい
SQLサーバーってはやってる?
int WinExGetInfo(HANDLE hnd,array *set); typedef struct ary{ char string_a[1024]; char string_b[512]; }array; Cでこう宣言されてる関数をPinvokeする場合、どうすればいいんでしょうか? 構造体でなければStringbuilderを渡すだけですが、構造体だと渡せないようで
[DllImport( "hoge.dll" )] static extern int WinExGetInfo( IntPtr hnd, ref array set ); [StructLayout( LayoutKind.Sequential, CharSet = CharSet.Ansi )] struct array { [MarshalAs( UnmanagedType.ByValArray, SizeConst = 1024 )] public char[] string_a; [MarshalAs( UnmanagedType.ByValArray, SizeConst = 512 )] public char[] string_b; } こんなんでいける? よう知らんが
速度重視ならunsafe structにして public fixed char string_a[1024]; public fixed char string_b[512];
いやbyteか
フォームや子ウィンドウが全部描画されてからよばれるイベントってある? Form_Showでブレークはっても子ウィンドウは描画中っぽいんだけど
Application.Idle辺りかね
ツリーノードの位置を調整するのってどうすればいいんでしょうか。 ドラッグドロップでノードへ追加するんではなくて、順番を変えたいんですが。
TreeView.Nodes.Insert()
>>130 Form_ShowじゃなくてForm_Shownだった
>>126 やっぱりidleがいいのかな・・・
あ、それがダメだったのか。スマソ
再び質問で恐縮ですが、ドラッグ中にキャンセルするのはどうしたらええんでしょうか。 ドラッグ中に右クリックでキャンセルしたいんですが。
QueryContinueDragでハンドリング
しかし、マウスの左右を同時に押下させるUIってどうなのよw
どうなのよちゃうわ うっさいわぼけ
ESCキーにしとけw
Windowsエクスプローラは右クリック(右でドラッグしているなら左)とESCのどっちでも取り消しできる。
ちょい質問 VS2005まで?あったと思うのだけど、 XMLスキーマをビジュアルに(クラス図みたいな)編集出来るのって VS2008に無いのでしょうか? 拡張子がxsdのファイルをクリックすると、 エディター?のようなのになって困っています。 どなたかお助けを
おしえてくんなます (せっていとう)
>139 ないよ。
144 :
139 :2008/12/29(月) 23:29:52
了解しました。どうやらなさそうですね。 エディターでこつこつやることにします。 XML スキーマエクスプロらー自体がつかいやすいのかなぁ? まあ、使ってみます。
146 :
デフォルトの名無しさん :2009/01/01(木) 00:15:15
C#でWindowsプログラミングをやってみたいのですが、 お手本となるソースコード(プロジェクトファイル)を公開しているサイト等はあるのでしょうか? あるならば、ご教示しては頂けないでしょうか。 ググっても、そっち系の教本しか出てこないもので・・・
まず .NET Framework SDK についてくるサンプルを動かしてみれば?
デザイナで何か作ってソース見れ。 お手本かどうかはアレだけど「ちゃんと動く具体的なソース」として便利。
本買えよ
>>146 CodePlex
CodeProject
151 :
デフォルトの名無しさん :2009/01/01(木) 13:08:43
もしかしたら既出の質問かもしれませんが 作成したアプリケーションの設定を保存するのに Properties.Settings.Default.Save() だとOSの指定されたフォルダにしか保存できません。 出来ればアプリケーションのあるフォルダに出来るだけ少ないコード量で実装したいのですが みなさんの場合はどのような方法をとっておられるのでしょうか?
アプリケーションのあるフォルダに保存するとVista以降で問題出るからやらないかな
>>151 どうしてもその要件があるのなら、管理者モードで起動するw
便乗質問です
>>111 についてはどうなんでしょうか?
155 :
デフォルトの名無しさん :2009/01/01(木) 13:30:18
tes
156 :
151 :2009/01/01(木) 13:36:35
ご回答ありがとうございます 既出って次元じゃないのですね…orz USBでアプリケーションごと持ち歩く可能性があるので… んー、がんばりますかぁ… 逆に需要多そうなのに、マイクロソフトでは準備してくれないのですね。
MS は Windows の流儀にそった形での API を提供してるだろが。 それが嫌なら自分で何とかしろよ
>>156 Program Filesの下のディレクトリにインストールされるアプリじゃないのなら、
UACで蹴られることもないんだろうから、普通にシリアル化なり何なりを使って
「そのように」実装すればいいだけじゃないの?
もちろんProperties.Settings.Defaultは普通の方法では使えないと思うけど。
実行exeは Application.StartupPath
確実に、そのexe, dllのあるディレクトリを取得したいなら Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ライブラリにして別のdllに入れるなら、ExecutingじゃなくてCallingの方使う
>>111 そこにアプリ名を入れられると迷惑
会社名が入るところだから
MSにも言ってやってくれ
165 :
デフォルトの名無しさん :2009/01/02(金) 00:09:04
エクスプローラの中でフォルダやファイルの縮小版を表示する機能が ありますが、あれと同じように表示するためのクラスやメソッドはどこかに あるでしょうか。あるとしたらどこを見ればよいか教えてください、よろしく。
>>165 縮小版って何? ListView の機能ではなく?
167 :
デフォルトの名無しさん :2009/01/02(金) 00:18:22
>>166 >ListView の機能
ListView の表示形態の一つにそれがあったんでしたっけ?
では見てみますです。
168 :
デフォルトの名無しさん :2009/01/02(金) 00:20:56
>>166 縮小版、とは、ファイルの最初のページをイメージにして縮小し
小さく表示してみせる機能のことです。それがLisyViewにあれば
それでできるのですが、無かったように思いました。
一応また調べてみます。
>>168 了解。その機能は .NET Framework にはないよ。
ということで、自分でファイルを開いてビットマップに描画して、って実装する必要あり。
どこまでを欲してるんだ。 ファイルのアイコンを表示する機能も サムネールを作成する機能も ListViewに標準でそんなのあるわけないだろ
171 :
デフォルトの名無しさん :2009/01/02(金) 00:27:21
>>169 どうもです。View列挙体にはやはり無い様ですね。
>ファイルを開いてビットマップに描画
ということは、それをするための方法を知る必要があるのですね。
いろんな種類のファイルがあるのでだいぶ難しそうですが
突破口はどこかにあるでしょうか。
またListViewに似たように表示する場合はViewプロパティを
拡張するようなことをするのでしょうか?
173 :
デフォルトの名無しさん :2009/01/02(金) 00:29:31
>>170 アイコンは一応表示できたのですが、縮小版はやはり相当な技術が
要りそうで大変めんどうでしょうか?
174 :
デフォルトの名無しさん :2009/01/02(金) 00:34:58
>>172 おおお。こんなにすぐにお答え戴けて感謝です!!
方法があるのですね!驚きました。ありがとうございました!!
助かりました!!!またよろしくです。
みなさま、大変、ありがとうございました!!
175 :
デフォルトの名無しさん :2009/01/02(金) 11:29:57
ノートPCで動くアプリを作っていてどうしたら良いか 分からないので質問です。 アプリが起動してる間だけアプリ以外のコントロールをさせないようにしたいんですが、 フォームを常時前面にするようには出来たのですが、 ノートPCのUSBポートそのものを無効or使用禁止(挿しても動作しない) ノートPCのタッチパッドとトラックポイントを無効 が出来なくて・・・どうやったら無効に出来るのでしょうか?
頭悪いくせにそんなウィルスチックなもの作ろうとするなよ。
タッチパッドのドライバを削除する
, ノ) ノ)ノ,(ノi ( (ノし ノートPCのUSBポートそのものを使用禁止! ┐) ∧,∧ ノ ノートPCのタッチパッドとトラックポイントを無効 ! ..|( ( ....:::::::) (  ̄⊂/ ̄ ̄7 ) ヽ lヽ,,lヽ (/ 川口 /ノ ( ) やめて  ̄TT ̄ と、 ゙i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start で設定できるのは、 USB ストレージデバイスだけだっけか。USB は範囲が広すぎなんだよな・・・ マウスに関しては、グローバルフックかフィルタドライバか。どちらにせよ、C# では無理。
普通にデバイス無効にすればいいだけ
setupapi
Ctrl+Alt+Delはどうすんだよ
GINA
188 :
デフォルトの名無しさん :2009/01/02(金) 16:12:51
>>176 >基本的には無理。
う〜ん、そうなんですか・・・
>>178 >スクリーンセーバー作りたいのか?
いえ、店頭で一般の方が操作するアプリなんですが
USBメモリ挿されたり、そのアプリ以外触れない様にしたいんです。
で、お客が言うには店が終わったらそれを店員が使うから
アプリを終了したら、USBデバイスやトラックポイントやタッチパッドの無効を戻して
すぐ普通に使える様にして欲しいそうで・・・
>>179 >タッチパッドのドライバを削除する
それだとアプリ終了後使えないので・・・
189 :
デフォルトの名無しさん :2009/01/02(金) 16:20:01
>>182 >どちらにせよ、C# では無理。
C#でなくVC++だったら出来たりしますか?
それともアプリ側から制御する事そのものが無理なんでしょうか?
>>183 >普通にデバイス無効にすればいいだけ
プログラムからでなく、普通に設定という意味でしょうか?
>>189 VC ならできる。が、結構めんどい。
デバイス無効にして、一般ユーザー権限でアプリを実行しとけばいいんじゃね?
ふと思ったのだけど、どうやってそのアプリを終了させるつもり?
キーボード
ノートPCをお客さんが弄れるようにするんだよね。 店内の商品検索端末みたいなものかな? 大変そうだね。タッチパッドよりキーボードの操作の方が心配する要素が多いような。 Ctrl+Alt+Delは禁止できるとして、 Alt+F4とか、Windowsキーとかは禁止できるのだっけ。
Alt+F4はまあシステムメニュー弄るかメッセージ無視すればいいけど ウィンドウズキーは元の設定でつぶさないと難しいかもね。
Winキーはレジストリで殺せるし、 エクスプローラ起動してなかったら働かないはず。
空港なんかのキオスクモードってどうやってんだろ 専用ソフト?
あれは本体触れないし、キーボードは物理的にマスクしてなかったっけ。
グローバルフックでWindowsキーも握りつぶせるよ。 TopMostに設定したFormを画面一杯に表示してグローバルフックでキー入力でのタスク切り替えを潰す。 WindowsキーとAlt+Tabを潰せばタスク切り替えは防げる。 VistaだとWindows+Tabで切り替えできるけどWindowsキーを潰せばそれも防げるので。 Alt+F4は画面を覆うアプリの方で無視する。 キーを潰すだけなので低レベルキーフックでいけるのでC#だけでも実装できるよ。 USBはそのアプリを動かすのを一般ユーザーにしてデバイスを無効にしておくのが手軽だと思うけど アプリだけでブロックってのはやったことないなぁ…
普通はそういうのはアプリケーションで制限するんじゃなくて ポリシーで制限するもんじゃないか?
>>196 Windows Embeddedとかを使う。explorerの代わりにShellを変更できる。
>>200 別に Embedded じゃなくても変えられるよ。
アプリで〜とか言ってる時点で、目的と手段を取り違えてる気がする 要するに、通常モードと特定アプリモード(仮称)とが有り、両モードは簡単な操作で切り替え可能 前者は説明不要だとして後者の要件は 1. あるアプリを全画面表示で実行し、そのアプリ以外は操作不可 2. リムーバブルメディアは使用不可 3. USBデバイスの無効化 4. ポインティングデバイスを無効化(タッチパッドとトラックポイント限定?) といったところだろ
タッチパッドを取り外す
>>202 に同意。
自分なら専用ユーザーを作るか、
ハードウェアプロファイルを使う
NUnitとTestDriven.NET使ってる。2005だけど
207 :
デフォルトの名無しさん :2009/01/03(土) 11:42:59
たかが効果音にmp3? wavにしてSoundPlayerで鳴らせ
209 :
207 :2009/01/03(土) 12:34:07
ファイルサイズの増加を心配して控えていたのですが 実際にやってみると mp3 96k → wav : 101k とほとんど変化しませんでした。 これでよかったみたいです。お知恵をありがとうございました。
容量はコーデックの設定次第じゃねえの
wavはまんまサンプリングレートと量子化ビット数とチャンネルと秒数だろうけどな。
音屋には音屋のテクニックがあるんだぜ。
mp3かwavか、って以前にWMP Controlが糞重いからね
VS2008で、 string text = "何かのテキスト"; Regex line = new Regex(@"正規表現のパターン"); MatchCollection matches = line.Matches(text); List<string> result = new List<string>(); foreach(Match m in matches.GetEnumerator()) { result.Add(m.Value); // <-- ここでエラー } とすると、 「エラー foreach ステートメントは、'System.Collections.IEnumerator' が 'GetEnumerator' のパブリック定義を含んでいないため、 型 'System.Collections.IEnumerator' の変数に対して使用できません。」 とエラーが出ます。不勉強でエラーメッセージの意味がさっぱりわからないんですが、 この使い方は間違ってるのでしょうか?これと同じことを正しく書くとどうなりますか? 要はマッチした string の全部の List が欲しいんです for文と [ ] 演算子で地味に読みだすのはできるんですが・・・
foreachのinの後は「GetEnumeratorできるもの」を指定する。 matches.GetEnumerator()はIEnumeratorを返すけど、IEnumerator自体はGetEnumeratorできないでしょ。 つまりmatches自体がGetEnumeratorできるもの。
>>215 おお、なるほどできました!
ありがとうございます!!
foreach(Match m in matches)
ドキュメントはろくに読まず、何かあると MS のせいにする・・・ そんな開発者が増えた気がする俺はおっさんw
古の昔から続く「今の若い者は・・」と同じ香りを感じるわけだがw
221 :
デフォルトの名無しさん :2009/01/04(日) 08:01:36
> 何かあると MS のせいにする・ これは大昔からほんとに「MSのせい」であることが多かっただろ
ウリがなんでも日本のせいにするようになったのは日本のせいニダ
昔に比べるとMS開発環境のクオリティ遙かにあがった気がする・・・(´・ω・`)
>>219 VC6の頃はF1で的確なヘルプが出てきたけど.netのヘルプはでたらめじゃないか。これでドキュメントを読めというのは無茶じゃないか?
あ、ここにも一人
226 :
デフォルトの名無しさん :2009/01/04(日) 14:05:21
休みの日に恐れ入ります。 現在、8bppindexedのgifファイルを1bppindexedのGIFファイルに 変換するソフトを作っています。 Image img=new Bitmap(10,10,System.Drawing.Image2D.Imageformat.1bppindexed); といった感じにimgを作成し、 img.Save(myfilepath, ・・・1bppindexed); という風に保存すると、なぜか、myfilepathのGIFファイルはカラーデプスが 8bppになってしまいます。 1bppindexedで保存することはできないのでしょうか。
Image.SaveにPixelFormat渡すのなぞ無いはずだが んー、たしかにGDI+のエンコーダはGIFは8bppのみのサポートだった気がする
228 :
デフォルトの名無しさん :2009/01/04(日) 14:29:12
>>227 すみません、saveにpixelforって書いたのはミスです不正確ですみません。
>>んー、たしかにGDI+のエンコーダはGIFは8bppのみの
なんですって!!ということはどうすれば1bppindexedのGIFファイルを
作れるのでしょうか。グーグルしても全然ヒットしません・・。
229 :
デフォルトの名無しさん :2009/01/04(日) 14:31:52
WPFのGifBitmapEncoderとか
231 :
デフォルトの名無しさん :2009/01/04(日) 15:06:57
わぉ!! こりゃ斬新です!!!こんなのが世の中にあったのかー プラットフォームがWindows VistaになってますけどXPでもいけますよね?
XPならSP2+.NET3.0以上
233 :
デフォルトの名無しさん :2009/01/04(日) 15:37:38
WebBrowserで質問です。リンクをクリックしたときに、それが新たにブラウザを 開いてしまうのか、それとも同じブラウザ内に表示されるのか、クリックの前に 知る方法はあるでしょうか。右クリック・メニューにはその情報がないため クリックしてからでないとわかりません。IEが出て来るまでに時間がかかって しまう場合が多くいらいらしてしまうのでした。 何かよい方法があるといいのですが・・・アドバイスお願いします。
VS2005のC#で、XP上でボタンを押すと単純にbluetoothのオン・オフを切り替えるだけのアプリを作りたいのですが、 どこから手をつけてよいのか分からないのです。ぐぐってもWindowsMobileの情報ばかりで・・・ WindowsMobileのBthSetModeに相当するような関数はあるのでしょうか?
237 :
デフォルトの名無しさん :2009/01/04(日) 16:33:54
>>234 クリックされたときにそこの内容がつかめればいいということですか。
>>235 NewWindow イベント というものがあるのですね、知りませんでした、
これで単純にキャンセルすることはできそうですね!!
これで新しいブラウザではなくて自分のところにリダイレクトできれば
いいのですね。この CancelEventArgs にはアドレスがなさそうなので
どうやったら掴めるか、また調べてみますです。
どうもありがとうございました!
>>236 BluetoothSetLocalServiceInfo() とかの API は使えないの?
>>237 > クリックされたときにそこの内容がつかめればいいということですか。
違う。DOM でパースして、target 属性を見ればいいんじゃない? ってこと。
ま、a タグに Javascript を仕込まれてたりしたときのことを考えなくちゃならんけどw
240 :
デフォルトの名無しさん :2009/01/04(日) 18:07:58
C#でAccessデータベースをOLEで連携してDataGridで表示しつつ 右横に単票状態のデータベースを表示し、修正する名簿ソフトを 作っています。 そこで質問をさせてください。 ---- DataGridに表示させ、DataGridの右横にテキストボックス を配置し、テキストボックスにデータベースのデータソースと バインドさせて、名簿管理ソフトを作りました これに機能追加で、DataGridの表示条件を絞り込みできるようにしようと しました。 そこで、 DataViewを使って、RowFilterプロパティを使って抽出条件で DataGridの表示条件を絞り込み出来る機能を追加しましたが DataGridの右横にあるテキストボックスとDataGridのデータが 連動されなくなってしまいました。 (DataGridの絞込みをしてもテキストボックスに表示されるのは データソースの1行目の情報となってしまう) これを解消する良い方法は無いでしょうか? テキストボックスでデータ修正をし、データベースの情報を 修正する機能をつけていて、それを無くしたくは無いのです。 お手数をおかけしますがご教示ください また、説明不足や表現力不足でわかりづらかったらご指摘ください ますと幸いです。
TextBoxのバインディングソースもそのDataView使えばいいんじゃね
242 :
デフォルトの名無しさん :2009/01/04(日) 18:56:09
>>241 なるほど、試してみます
どうもありがとうございます
243 :
デフォルトの名無しさん :2009/01/05(月) 01:12:37
教えてください。 フォームに配置されているコントロールの使用可制御を 以下のように行いたいのです。 textA.Enabled = true; if (条件1) { textA.Enabled = false; } if (条件2) { textA.Enabled = false; } if (条件3) { textA.Enabled = false; } このソースを実行すると、if文の条件に合ったとき、 一瞬、コントロールが使用可になってから使用不可になる というちらつきが生じてしまいます。 「textA」としていますが、このようなコントロールがとてもたくさんあり、 if文の条件もたくさんあります。 また、条件はコントロールが『使用不可になる条件』しかなく、 使用可になる条件がない(使用不可の条件に1つも当てはまらなければ使用可) ため、いったんコントロールを使用可にしてから条件にあったときだけ 使用不可にする方法をとっています。 ちらつきをなくす良い方法はないでしょうか。 上記のソースが流れ終わるまでは画面の再描画を行わない、などの 方法があればお願いします。
textA.Enabled = !(条件1||条件2||条件3);
if (条件1) { textA.Enabled = false; } else if (条件2) { textA.Enabled = false; } else if (条件3) { textA.Enabled = false; } else { textA.Enabled = true; }
LockWindowUpdate() とかダメ?
bool tmp = true; if (条件1) { tmp = false; } if (条件2) { tmp = false; } if (条件3) { tmp = false; } if(textA.Enabled != tmp)//これ無いとちらつく?試してないけど { textA.Enabled = tmp; }
>>247 > ラスト4行
確認はしていないが、そのチェックはプロパティの実装に入ってる可能性が高い
他のには大抵入ってるし、ないとEnabledChangedが正常動作しなくなる
textA.BeginUpdate(); // EndUpdate()まで画面の再描画を行わないようにする textA.Enabled = true; if (条件1) { textA.Enabled = false; } if (条件2) { textA.Enabled = false; } if (条件3) { textA.Enabled = false; } textA.EndUpdate();
250 :
デフォルトの名無しさん :2009/01/05(月) 11:54:19
240の質問の続きです・・・
240の質問事項については、
>>241 で無事解決しました。
どうもありがとうございます。
RowFilterでフィルタをかけている状態で、下記のコマンドをボタンで実行
させていますが、DataGridのフォーカスを手動で変更をしないと
データベースが更新されないのです。
※フォーカスを移動しなくても更新されるようにEndCurrentEdit
メソッドを事前にかけているのですが・・・
---------------------------------
int iRow; //更新したレコード数
this.BindingContext[dbCustomer1, "M_Customer"].EndCurrentEdit();
iRow = oleDbDataAdapter1.Update(dbCustomer1, "M_Customer");
MessageBox.Show("更新 " + iRow + "件");
-----------------------------
度々すみませんが、ご教示いただけないでしょうか?
string path が不正なパスのとき ( "::{hogehoge}" みたいな ) bool b = Directory.Exists( path ); は例外ださないでfalseが返る (内部では出ててcatchされてるのがパフォーマンスモニタで確認できる) けど DirectoryInfo di = new DirectoryInfo( path ); bool b = di.Exists だとコンストラクタの時点でArgumentExceptionがでる 前者でも例外出してくれた方がいいかなぁ でも実用的じゃなくなるかなぁ ただ「信頼性とパフォーマンスモニタ」の「# of Exceps Thrown」が増えてくのは気持ち悪い つーか増えてく原因探すのでえらい手間取ったorz
252 :
デフォルトの名無しさん :2009/01/05(月) 12:23:10
Visual Studio 2008で専用ブラウザを作成しています FormClosing時に画面は閉じても良いのですが閉じる前に サーバーに対してログアウト処理のページを読み込ませて 強制ログアウトさせたいのですが、FormClosingでNavigate に処理ファイルを書いて実行しても処理は行われず FormClosingの最終部にe.Cancel = true;を書くと 処理は実行されます。 しかしこれだとどうやっても画面が閉じれなくなるので 何とかしたいのですが、この場合どういう書き方をしたら良いのでしょうか?
FormClosing { if( !ログアウト処理した ) { e.Cancel = true; FomClosing中ですよ = true; ログアウト処理(); } } ログアウト処理 { ... ログアウト処理した = true; if(FomClosing中ですよ) { this.Close(); } }
ログアウトしたかどうかの判断がFormのイベントハンドラに入ってて、
フォームを閉じる処理がログアウト処理()に入ってるっていうのはどうなの。
まるでVB厨の書くコードみたいw
ってういか、そもそも
>>252 のいっているような現象って本当に起こるの?
最終部にApplication.DoEvent();
UWSCというマクロツールの画像判定処理 (bmpファイルを読み込んで、その画像と同じものが画面上になければfalseを返す 画面上にあればtrueを返してその画像の座標を参照渡しするというモノ) をC#で実現しようとしてがんばってるんだけど BitmapクラスのGetPixelを使って再現してみたら実行にものすごく時間がかかるんですけど これを早くする方法はないですか?
LockBits
GetPixel/SetPixelって何のために生きてるの? 知らないと使ってしまいがちな絶対使ってはいけないものの代表格だよね
>>258 極端な思考だなあ。。
こういうのを2ch脳っていうのかなあ。(というのも極端な思考かもしれんが)
260 :
252 :2009/01/05(月) 15:00:37
>>253 書かれている方法で試したのですがこれだと無限ループが発生して
しまいませんか?
>>254 私の環境では起きてます。orz
webBrowser.Navigateで通信が完了した等の
情報をひらう事は出来ないのでしょうか?
もし出来るならやり方を教えてもらえませんか?
ログアウト処理はBeginInvoke使って呼び出さないと駄目っしょ
ログアウト後のCloseはまた別にWebBrowserのイベントとかで呼び出しってことになるだろうけど
>>254 FormClosing中にWebBrowser.Navigateしても意味無いのは当然
あとはWebBrowserのイベント調べれ
そう言えばどうせNavigateして完了待ちになるならBeginInvokeも特に必要ないな
263 :
109 :2009/01/05(月) 15:46:03
>>110 情報ありがとです。
なぜか{"テーブルに主キーがありません。"}って怒られました。
データベースエクスプローラのテーブルにある奴をダブルクリックしたら構成画面みたいなの出たので
右クリックで「主キーの設定」ってのはやったんですけど・・・
やさしそうな本買って勉強してみます。
264 :
252 :2009/01/05(月) 16:56:12
>>263 主キー(primary key)とは制約(constraint)であり、その列に重複(duplicate)する値を持たないので一意性(ユニーク,unique)がある
つまり主キーから行を特定できる
NUnitを使っているのですが、 テストデータとして予め用意したテストファイル(VS2008のプロジェクトディレクトリ内)を 使う場合、そのパスを取得するいい方法は何でしょうか? Assembly.GetAssemblyで取得しようとすると、NUnit の GUI runner がshadow copyをしているので 違う一時ディレクトリになってしまい、shadow copyをオフにするとAssemblyにロックがかかってしまい VSでのビルドができなくなってしまって困っています。
267 :
デフォルトの名無しさん :2009/01/05(月) 22:49:38
Gifファイルのカラーパレットを変更したいです。 現在はビット深さが8bitで、カラーパレットは2^(7+1)で256色用意してあります。というかこれがデフォルトだと思います。 この状態で、ビット深さは8bitのままで、カラーパレットのエントリーのレングスを2にしたいのですが、 どうやったらいいのかわかりません。お願いいたします。 (目的は、特許庁のインターネット出願ソフトをパスするためです。どうやら、カラーパレットが2でないと 出願ソフトではじかれてしまうようなのです)
意味が分からん パレットのエントリ数は色深度で決まるもんだろ? つーか普通に画像処理ソフト使えよと思うわけだが
269 :
デフォルトの名無しさん :2009/01/05(月) 23:11:38
>>268 >>パレットのエントリ数は色深度で決まるもんだろ?
原則、そうだと思います。ただ、GIFのヘッダーのパックドの2〜4ビット目と、6〜8ビット目を
みるとお分かりの通り、デプスとエントリ数は異なる値に設定できるようになっています。
Universal Document Printerという市販ソフトでモノクロ出力すると、
デプスが8でパレットのエントリ数は2で出力されます。
個人的には、こうするんだったら、デプスが1bitでエントリ数が2という組み合わせで
いいじゃないかとも思うんですが、業界としてデプスは8bitが標準なので
それに倣っているんだな、と勝手に解釈しています。
270 :
デフォルトの名無しさん :2009/01/05(月) 23:17:30
static public void test() { Bitmap bmp = new Bitmap(@"C:\Documents and Settings\stuv\デスクトップ\b1.gif"); Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite,bmp.PixelFormat); IntPtr ptr = bmpData.Scan0; int stride = bmpData.Stride; int bytes = stride * bmp.Height; byte[] index = new byte[bytes]; // Copy the RGB values into the array. System.Runtime.InteropServices.Marshal.Copy(ptr, index, 0, bytes); int initX; for (int y = 0; y <bmp.Height; y++) { initX = stride * y; for (int x = 0; x < bmp.Width; x=x+2) { index[initX + x] = 0; index[initX + x+1] = 1; } } System.Runtime.InteropServices.Marshal.Copy(index, 0, ptr, bytes); bmp.UnlockBits(bmpData); Bitmap bmpTemp = new Bitmap(1, 1, PixelFormat.Format1bppIndexed); ColorPalette pal = bmpTemp.Palette; pal.Entries[0]=Color.Black; pal.Entries[1]=Color.White; bmp.Palette = pal; bmp.Save(@"C:\Documents and Settings\stuv\デスクトップ\b2.gif", ImageFormat.Gif); bmp.Dispose(); コンソールです。これよりスマートなのはありますでしょうか。
271 :
デフォルトの名無しさん :2009/01/06(火) 01:13:23
RowFilterでフィルタをかけている状態で、下記のコマンドをボタンで実行 させていますが、DataGridのフォーカスを手動で変更をしないと データベースが更新されないのです。 ※フォーカスを移動しなくても更新されるようにEndCurrentEdit メソッドを事前にかけているのですが・・・ --------------------------------- int iRow; //更新したレコード数 this.BindingContext[dbCustomer1, "M_Customer"].EndCurrentEdit(); iRow = oleDbDataAdapter1.Update(dbCustomer1, "M_Customer"); MessageBox.Show("更新 " + iRow + "件"); -----------------------------
ネットワークからのデータを1バイトずつ処理したいので、BufferedStreamを使おうとしたのですが、 BufferedStreamにデータが到着したかどうかを取得できる機能が見つからなくて困っています。 普通にReadByte()すると切断されるかリモートホストからデータが1バイト来るまでブロックしてしまいますし、 LengthやPositionの取得はおろかタイムアウトの設定すらサポートされていません。 1バイトを読むためにいちいちコールバックさせるのも面倒でたまりません。何かいい方法はありませんか?
非同期でやれば
NetworkStream.DataAvailable
275 :
デフォルトの名無しさん :2009/01/06(火) 19:32:40
64*64の画像をバッファに取り込んで、そこから32*32の範囲を拡大縮小せずに取り出すことはできますか?Rectangleを使うらしいですが、そこから先が分かりません。教えて下さい。 (例) Bitmap bmp = new Bitmap("test.bmp"); Rectangle rec = new Rectangle(0,0,32,32); Bitmap result = ??
新しいBitmap作ってGraphics.FromImageで作ったGraphicsにGraphics.DrawImage
277 :
デフォルトの名無しさん :2009/01/06(火) 20:30:02
>>276 それはここのことを言ってると思いますが、
http://dobon.net/vb/dotnet/graphics/triming.html Bitmap img = new Bitmap(@"C:\サンプル.jpg");
//PictureBox1のGraphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//元の画像の(10,10)-(100,100)の部分を切り取って表示する
//座標(0,0)に表示し、単位をピクセルとする
Rectangle rect = new Rectangle(10, 10, 100, 100);
g.DrawImage(img, 0, 0, rect, GraphicsUnit.Pixel);
//Graphicsオブジェクトを破棄
g.Dispose();
これは一部を表示するだけで、私がしたい「別のbitmapまたはimageデータに切り取った画像を入れたい」ことにつながってません。
この点厚かましいお願いとは思いますがよろしくお願いします
言ってない
ぽかーん・・・
>>277 噴いたwwレベル高いなおいwww
まぁ、この程度の事にGraphics持ち出すのは大袈裟だとは思うが、要求仕様は満たしてるな。
MSDN行って、Bitmapクラスのメソッド一覧読んで来い。
281 :
デフォルトの名無しさん :2009/01/06(火) 21:06:00
Objectとobjectってなにが違うんですか? (先頭の大文字と小文字) イベントの引数を書いてると、小文字のobjectが最初に出てきます。
>>281 C# のキーワードと、.NET のオブジェクト
あ、逆ね。object が C# のキーワード。
おまえらはStringとstringどっちで書いてるんだ
宣言はstring
string だなぁ。
Int32
String VSで型名が水色に統一されるからw by 素人
静的メソッド呼び出すときだけString
何か水色だと参照型な気がしてしまう
折角キーワード用意してくれてるんだから全部小文字でいいじゃん
小文字で始まるとJava臭くなるから
String や Object のほうが Java くさい
StringやObjectはVBくさい。
ほにゃらら臭くない命名規則なんてあるのか?
CodeZineで瀬○遥が投稿するたびに 憂鬱になるのは俺だけ?
stringが正解です。
namespace書かない方がusingで指定しなくてもクラス使えて便利だった
教えてください。 TreeViewにあるアイテムを選択し、それをExplorerを使って あるフォルダへD&Dすることで、そのフォルダにテキストファイルを作成する ことを考えています。 そのために、D&D先のフォルダのパスを検出する必要があるのですが、 それがどうもわかりません。 QueryContinueDragを使ったほうがいい?とWebにもあるのですが、 そのイベントで得られるイベント引数にはExplorerのパスが含まれていません。 ExplorerからTreeViewへのD&Dは簡単だったのですが・・・ どなたか教えていただけないでしょうか。
301 :
デフォルトの名無しさん :2009/01/07(水) 09:45:14
303 :
デフォルトの名無しさん :2009/01/07(水) 09:55:39
すまん被った。 質問。 XmlSerializerで任意の型が含まれるobject配列をシリアライズしたいのですが、 その為にはXmlSerializerのコンストラクタへ、含まれる可能性のあるTypeを 全て渡しておかなければいけません。 そこで、XmlSerializer生成前にobject配列内の要素を総なめしType一覧を生成して XmlSerializerに渡しているのですが、これって正しい方法なのでしょうか?
普通は属性で事前に定義しとくもんだろ
デシリアライズ時にどうすんだ
>>300 ドロップ時の動作はドロップ側で行うものだから
基本的にはDataFormats.FileDropとダミーファイル作るしかない。
ダミーを作るのが嫌ならシェル拡張でExplorerのドロップ時動作を書き換えることになる。
が.NET/C#でシェル拡張は止めといたほうがいいというのが定説だな。
Explorer以外のファイラとかだとまず無意味だし。
最近、C#を勉強しはじめたのですが、delegate、event で困惑してしまって・・・。 namespace my_namespace { delegate void my_delegate(); class my_class { public event my_delegate MyEvent; public void my_func() { Console.WriteLine("hello"); } static void Main(string[] args) { my_class oIns = new my_class(); my_delegate del0 = oIns.my_func; //※1 my_delegate del1 = new my_delegate(oIns.my_func); //※2 del0 += oIns.my_func; //※3 del1 += new my_delegate(oIns.my_func); //※4 : } } } [質問1] ※1と※2、※3と※4 この2種類の式でどのような違いがあるのかわかりません;;
306 :
305 :2009/01/07(水) 11:04:38
あと、 "System.Windows.Forms.Buttonクラスインスタンス"の"Clickイベント"へイベントリスナーを登録しようとした際、 public void MyEventHandler(object sender, System.EventArgs e){ … } : this.button1.Click = this.MyEventHandler; と記述すると、 イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。 と、コンパイルエラーが表示されます。 [質問2] どうして、"="ではリスナーの登録ができないのでしょうか;; 長文ですいません;;。何かお分かりの方、どうぞ、お知恵を…m(_ _)m
> ※1と※2、※3と※4 この2種類の式でどのような違いがあるのかわかりません;; 同じ 型が明らかなので省略可能ってだけ > どうして、"="ではリスナーの登録ができないのでしょうか;; eventがそういう仕様(add/removeのみ)だから
> ※1と※2、※3と※4 この2種類の式でどのような違いがあるのかわかりません;; デリゲートの場合、=を使うとデリゲートがクリアされて新しく格納される +=つかうと追加になって実行時にマルチキャストされる イベントは基本的にマルチキャストされるべきなので外部からは+=か-=しかできない仕様になってる イベントを実装するクラスでは=も可能
309 :
305 :2009/01/07(水) 11:51:11
>>307 レス、ありがとうございます m(_ _)m
> > どうして、"="ではリスナーの登録ができないのでしょうか;;
> eventがそういう仕様(add/removeのみ)だから
ご回答頂いたとおり、私も最初、「そういうものなんだろうなぁ〜」と思ったのですが、以下のソースでは、問題なくコンパイルが通ります。
※環境ですが、VS2008sp1 .NetFramework3.5sp1 です。
310 :
305 :2009/01/07(水) 11:52:44
using System; namespace my_namespace { delegate void my_delegate(); class my_class { public event my_delegate MyEvent; public void my_func() { Console.WriteLine("hello"); } static void Main(string[] args) { my_class oIns = new my_class(); my_delegate del0 = oIns.my_func; my_delegate del1 = new my_delegate(oIns.my_func); oIns.MyEvent = oIns.my_func; //※1 oIns.MyEvent = del0; //※2 oIns.MyEvent = del1; //※3 } } } ※1〜3部分がコンパイルエラーにならないんです・・・ なんでだろ;;
同じクラス内だから
>>308 でも書いたけど、
外部から=できてしまうということは、他で登録されていたかもしれないイベントを
全部削除できてしまうということになる。
それだからイベントを使う側からは追加か、既知のデリゲートの削除しかできないような仕様はあたりまえっしょ
イベント定義したクラスではすべてのことができる
313 :
305 :2009/01/07(水) 12:21:16
>>308 ,311,312
レスありがとうございますm(_ _)m
309-310を書き込んでる間に、308が書かれていたようで;;
大変失礼しましたm(_ _)m
レス頂いた内容でスッキリしました。ありがとうございます。
余談なのですが…
私は、もともと、C→java、そして、C#と勉強?(仕事で使っている)してきたのですが、どうにも、C#はややこしく感じてしまいます…。
うまくいえないのですが、
・vatualやorverrideやnew
・delegateやevent
・struct(これは、アリだとおもいますが…)
といったものは、javaをやっていると、「必要かな?」とおもうような言語仕様のように思えます…
ただただ、ややこしくしているように感じます…
もう、歳なんですかね;;
>>305 .NET1.xまでは※4で書く必要があったが、.NET2.0以降は※3でよくなった。
匿名メソッドやラムダ式への布石だと思う。
>del0 += oIns.my_func; //※3
>del1 += new my_delegate(oIns.my_func); //※4
.NET2.0以降なら※3を使ったほうがよい。最適化してくれることがある。
>>313 単に慣れかと、むしろ
>・struct(これは、アリだとおもいますが…)
この一文に不安を感じる。
CとJavaの間にC++が入ってたらすんなりだったかもな。
DelphiやJ++に手を出してたもので理解は早かった。ヘジたんラブということで(笑 eventは一度add/removeを自分で書いてみると完全に理解できると思う。 java1.1で匿名クラスが出たときの方が理解に時間がかかったな。
overrideはJavaにあるじゃない overrideはないと困るから追加されたんだよ あとJavaにはvirtualがないために メソッド定義にfinalをつけると速度が格段に上がるということが実際にあったんだよ delegate的なものもそのうち追加されるよ
これからC#勉強するため本を買おうと思っています。 VB, Delphiはそこそこ使えます。 ローカルデータベースでの顧客管理みたいなプログラムを作ろうと思ってるのですが 今まで買って「この本はなかなかお勧めだよ」って本あったらぜひ教えて下さい。 データベースはSQL ServerかAccessがいいのかなって思ってます。
319 :
デフォルトの名無しさん :2009/01/07(水) 17:36:21
http://codezine.jp/article/detail/1?p=1 上のサイトを参考に、Plug-inフォルダに入れ込んだDLLをアプリケーションの起動時に読み込むようにしようとしています。
コードもほとんどコピーのはずなのに、何故か実行するとダウンキャストを行う所で例外が発生します。
// 読みだし終わったDLLにあるクラスをインスタンス化
Object obj = asm.CreateInstance(t.FullName); // tFullNameはCountChars.CountChars
Debug.WriteLine(obj.GetType()); // 「CountChars.CountChars」が表示される
CountChars.CountChars plg = (CountChars.CountChars)obj; // ここで型変換したのだが、System.InvalidCastExceptionが発生
// Exceptionが発生したため、以下のコードが実行されません
Debug.WriteLine("Plug-in Run");
plg.Run();
Debug.WriteLine("Plug-in Runed");
正直、何故うまくダウンキャストされないのか理由が思い浮かばないという状況です。
お知恵をお貸しいただけると大変ありがたいです。
C#は上位の名前空間と同名のクラスを認めてないみたいな話じゃないの
プラグインが実装するインターフェイスのアセンブリは、 呼び出し側とプラグイン側で同じものを参照する必要がある。 両方に同じコードをコピーしてそれぞれでコンパイルしてるのではないかな。
俺はC++&PythonからC#入ったら、ほとんど覚えることは無かったな。 最近のGC付き言語はどれも似たような感じだね。
323 :
319 :2009/01/07(水) 18:34:24
>>321 どうもご返答ありがとうございました
一応あの後頑張った結果
1.インターフェースクラスのみをdllに吐き出す
2.参照の追加、でdllを参照に加える(これは継承したクラスとアプリケーションどちらも)
3.この状態で動的ロードとダウンキャストを行う
で、うまく行きました
ありがとうございました。
324 :
デフォルトの名無しさん :2009/01/07(水) 20:27:38
Runed・・・ 笑うとこ?
sql serverへの接続プログラムを作っていて不思議に思ったことがありました。 SqlConnectionクラスが保持しているリソースの開放を、 『using + IDisposableインタフェイス』で行いました。 using (SqlConnection oCon = new SqlConnection("接続文字列")) {…処理…} この時、ふと、 「SqlConnectionクラスって、IDisposableインタフェイスを実装してるよね?」 と思い、継承関係を追いかけてみると、親クラスであるDbConnectionが、 IDisposableインタフェイスを継承していました。 「あ〜、ここで継承してるのね。」 「Disposeメソッドを定義してるのが、SqlConnectionクラスなんだ。」 と思ったのですが、SqlConnectionクラスのDisposeメソッドを見てみると protected override void Dispose(bool disposing) となっていました。 「あれ? "void Dispose()" じゃないの?」 と思い、引き続き調べてみると、DbConnectionクラスの親クラスである Componentクラスもまた、IDisposableインタフェイス継承しており、 ComponentクラスにてDisposeメソッドが定義されていました。 ComponentクラスでもIDisposableインタフェイスを継承しており、 Componentクラスを継承しているDbConnectionクラスもまた、IDisposableインタフェイスを 継承していることがとても、不思議でした。 なぜ、DbConnectionクラスでもIDisposableインタフェイスを継承する必要があるのでしょうか? 以上、おサルな私に何かアドバイス頂けたら幸いです。
DbConnectionはDisposeには手を出してないよ Componentがpublic void Dispose()とprotected virtual void Dispose(bool)を定義 Dispose()およびファイナライザ内でDispose(bool)を呼び出す DbConnectionは何もしない SqlConnectionがprotected override void Dispose(bool)をオーバーライド クラスの解説の定義のとこに出てくるインターフェイスは基底が実装してるのも含めて書かれる
328 :
326 :2009/01/08(木) 08:26:19
>>327 >クラスの解説の定義のとこに出てくるインターフェイスは基底が実装してるのも含めて書かれる
この1行で全てが解決しました。
目から鱗です。
ありがとうございました。
Objectとobjectって同じもの?Stingとstringって同じもの?
System.Objectとobjectは同じもの System.Stringとstringは同じもの
global::System.Object とすればさらに正確か
C#やり始めて3年、大体空気するように使えるようになったけれど、F#今初めてどのぐらいでこの域に達するかな・・・ やっぱり日々の仕事で使ってかないと上達しないんだろうな・・・
333 :
デフォルトの名無しさん :2009/01/09(金) 12:21:41
>>332 プログラミング言語なんてひと月ふた月でフルに立ち上がらないようなやつは
だめだろ
F#が日々の仕事で使えるわけないがな
>>333 ひと月ふた月でフルに立ち上がるってどんな超人だよw
そんな奴いるんだったらうちで月50万で即雇うよ。
住所と名前教えてくれ。
フルってC#で可能な事なら何頼んでもすぐ完成させてくれるって事だよな?
マジで雇う。
336 :
デフォルトの名無しさん :2009/01/09(金) 15:06:09
VC#2008EE なんですけど、 コンパイルのたびに前回のコンパイルなどの知識を生かしてPGO(?)、最適化みたいなことって やっているんですか? 意味不明な質問ですいません
>>335 派遣会社にでも相談したら?
月150万出せば、貴方の言う超人レベルの人が来てくれるよ。
>>336 ただの最適化しかしてくれないよ。
PGOみたいな機能はない。
338 :
336 :2009/01/09(金) 15:15:02
ということは、 同じソースコードを同じパソコンでコンパイルしたら大体同じ速度ってわけですか。 (最適化オプションが一致なら) しかしそれがどうもそうじゃない気がして気持ち悪いのですが。 なにかありがちな勘違いとかないですか?
コンパイル時に行われる最適化はローカルな範囲だけ。 どこでコンパイルしても出来上がるILは一緒。 インライン展開が行われたりするのは実行時。
気がすると言われても困る dllのキャッシュとかその辺のレベルの話もあるわけだし
341 :
336 :2009/01/09(金) 15:23:53
VS2008 .net3.5SP1 SmtpClient を使用してメールを送信しようとしています。 2つのLANカードがささってるPCから送信する場合、 指定のLANカード経由でメールサーバーに接続する プロパティや方法などありますでしょうか?
343 :
336 :2009/01/09(金) 15:28:48
>>340 すいません、こういう質問のしかたはよくないな、と思ったんですが。
結果とって計ったりしなかったもので。
>>342 ServicePointプロパティの解説
>>344 ServicePoint.BindIPEndPointDelegate プロパティ
でいけそうです。ありがとうございます。
WebBrowserでリンクをクリックした時に、リンク先がpdf等だった場合 IEとかのブラウザが立ち上がってしまうんですが、これを直接pdfのプログラムで開きたい場合は どうしたらいいんでしょうか。
NewWindowイベントを持つ継承クラスを作ってイベントでNewWindowをキャンセルさせて、DLしたファイルを直接開く。
超人レベルPGが月50万てw 駄クラスでもフリーランスで70万くらいは取ってるだろ。そんな安い金で来るわけねーだろw
50万て。何重に搾り取られたゴミ派遣だよ…
マ版へ池
フリーと会社で雇うのは全く違う。 税金とか保険とか退職金とかあるだろ。
355 :
デフォルトの名無しさん :2009/01/10(土) 16:22:42
FormのPaintイベントで DrawImageをしているのですが、 たまに Formの上にウィンドウを表示しているところにも DrawImageの一部が描画されてしまいます。 これはいったい何が原因なのでしょうか? ウィンドウを再描画するようにするしか方法はないのでしょうか?
ウインドウってなに
MDI?
液晶が焼きついたんだろ
359 :
355 :2009/01/10(土) 19:04:50
>>358 それかも。
違うハードで試してみます。
何という釣り
361 :
デフォルトの名無しさん :2009/01/10(土) 21:02:12
VS2005なんですけど プロパティの自動作成機能ってなかったですっけ? public clas MyClass { public string プロティ って書いて自動でget,set作る機能です。
prop
363 :
361 :2009/01/10(土) 21:29:44
thx
364 :
デフォルトの名無しさん :2009/01/11(日) 03:29:41
質問です。 CのヘッダーファイルからDllImport行を自動生成するツールってありますか? もしあるようでしたら、場所を教えて欲しいです。
ピンボケドトネト
>>366 それちゃんとヘッダファイルから生成してくれるよ
368 :
デフォルトの名無しさん :2009/01/12(月) 20:22:14
ジェネリッククラスについていまいち理解できませんのでちょっと教えてください。 クラス内で扱うオブジェクトをDisposeする必要がある場合、 型パラメータにIDisposableの制約を与えます。 新しくクラスを作成するときに、上記のような制約のあるジェネリッククラスを作ればよいのか、 IDisposeインターフェースを継承したクラスを使えばよいのかの判断がわかりません。 継承されたクラスを作るなら作成されたクラスはIDisposeを求められる引数などに使えます。 ジェネリッククラスだとそういうケースでは使えないが、 パフォーマンスや、明示的に型を設定できることが便利です。 インターフェースの制約のあるジェネリッククラスとインターフェースを継承したクラスを 比較した場合、こんな考えでよいでしょうか? なんか自分の理解が足りていない気がしましたので質問させてください。
>>368 質問の意図がわからないし、俺じゃなくてもわかる人間がいる気がしない。
そもそも比較の対象になりようがない二つを比較している気がするんだが
IDisposable はクラスを Dispose 可能にする(Dispose を強制する)ためのインターフェイスであって、 ジェネリックスとは直接関係ない。 クラスの機能としてジェネリックスが必要なのか? をまず考えるべきじゃね?
371 :
368 :2009/01/12(月) 20:46:15
>>369-370 お返事ありがとうです。
インターフェースの制約のあるジェネリッククラスとインターフェースを継承したクラスは
直接なんの関係もない、ということですね。
いろいろな型として振る舞わせたい場合はジェネリッククラス、
そんな必要はない場合はインターフェースの継承。
ジェネリッククラスの機能が導入され、Hashtableクラスはジェネリッククラス版ができ、
進化しました。
ということはジェネリッククラス>通常のクラス
と思ったわけです。
ジェネリックの機能の追加によるメリットを受けることができるのは
HashTableクラスのようなobject型としてデータを保存し、利用時にキャストしていたような
クラス、ということでしょうか?
そんな動作をしないようならジェネリッククラスは特にいらない、という解釈です。
まだ考えへんですかね?
>>371 型パラメータに制約のあるジェネリッククラスもインターフェイスを実装できるわけだが。
全く別のものなのに、なんで比べてんの?
373 :
368 :2009/01/12(月) 20:59:32
>>372 >型パラメータに制約のあるジェネリッククラスもインターフェイスを実装できるわけだが
この機能考えてませんでした。
だとしたら極論ジェネリッククラスにしておくに超したことはないということでしょうか?
リソースやらなんやらで多少はデメリットあると思いますが。
とりあえずジェネリッククラスで実装しておいて利用時に型を限定できますので。
全く別物とは言われるのですが自分の中では未だに
ジェネリッククラス>そうじゃないクラス
に見えてしまっています。
結論を言うと皆さんの言うように別物なんでしょうが、
まだ理解ができていません。
いろいろなところで解説をみると「この場合ジェネリッククラスは便利」という内容は見かけますが、
「この場合ジェネリッククラスにすると変」みたいな例ありませんか?
Form クラスをジェネリックスで実装するバカはいないだろJK
つかジェネリッククラスはメタクラスなわけで、クラスとはレイヤが違うと何度言われれば(ry
376 :
368 :2009/01/12(月) 21:17:16
>>374 例えばこんなクラスですよね?
class MyClass<T> where T:Form
実際書いてみました。
利用時にTに設定するクラスが思いつきません。
>>375 とも通じますが、つまり他のクラスを管理するようなクラスでないと
ジェネリックにする意味はない、ということでしょうか?
つか、コンテナ以外の用途って何かあるの?
IEquatable<T>のようなインタフェース
へー。勉強になった。実装クラスでは何かある?
Func<..> やら Linq の中身(処理の連結連結)でも使いまくり だろ。
ほー。勉強になった。LINQ とかあんま使ってないからなー。
まーこれも型推論の出来ない静的であるせいなんだが。
ジェネリックだとHoge<A>とHoge<B>は全くの別物になるからかえって不便になる場合がある そういうときはわざわざ非ジェネリックのIHogeを定義してHoge<>に実装させたりする
C# 4.0 でその手間もいらなくなるかもね
値型は反変ダメだからやっぱり必要だよ
string配列をSettingsクラスを使って保存したいんだけど、型を選ぶところにstring[]が無いんだけどどうすればいいの?
手で入力する
string[]をCSVに変換して保存する方法あります? CSVからstring[]に変換することも視野に入れて
for/string.split
>>382 型パラメータなんて推論しまくって省略されまくりだろ。
パラメータ化しなければならないってならそうだけど
この方式が安全ではあるので仕方ない
単なるsplitはまずい
CSVのパースって、本当に汎用・厳密にやろうとするとすげー面倒だよな だから、CSV出力・パーズ専用ライブラリを探すか作るかしなくちゃならない。 splitが使えるのは、「データに絶対にカンマが入らない」 とか、「絶対に改行が入らない」 とか、そういう仮定がいくつかおける場合だけだと思う。 C# CSVでググればいくつか出てくるから、ライセンスとかと相談しながら 選ぶか作るかすればいいんじゃね
394 :
デフォルトの名無しさん :2009/01/13(火) 05:14:59
Visual BasicからC#に変える利点ってどのようなものがありますか?
エクスプローラでフォルダを開きたいのですが、 System.Diagnostics.Process.Start("EXPLORER.EXE", path); を使うとウィルスバスターに警告されてしまいます。 もう少し安全な方法はありませんか?
元々非常に安全なので心配は無用です。
ASP.NETを勉強中ですが、疑問に思ったことがありまして…。 System.Web.UI.Pageにはプロパティーとして「Page」があると思うのですが、 どうしてわざわざ、このようなプロパティを用意しているのでしょうか? System.Web.UI.Pageクラスを継承しているのだから、「this」でいいとおもうのですが…。 ※System.Web.UI.Pageクラスを継承した独自クラスで Pageプロパティとthisを比較したのですが、同じインスタンスでした。 恐らく、何かとても深い意味があるのだと思うのですが、私には思いつきませんでした...orz...
先祖のControlがもってるんだから仕方ないだろ
399 :
397 :2009/01/13(火) 07:29:52
>>398 レスありがとうございますm(_ _)m
そうなのですか…。
あまり、深い意味はないということなんですね…。
ありがとうございましたm(_ _)m
>>399 Page以外のControlもPageプロパティを持ってて、その場合Pageプロパティ != this
正規表現で半角記号かどうか判断するにはどうしたらいいんでしょうか?
正規表現 半角記号 でぐぐるといいよ
403 :
397 :2009/01/13(火) 10:04:40
>>400 レスありがとうございますm(_ _)m
参考にさせて頂きます
それで、引き続き調べてみたのですが、また1つ疑問が…。
[前提]
System.Web.UI.Controlクラスに定義されている「Page」プロパティは
System.Web.UI.Pageクラスだと思います。
[試したこと]
マスターページを使用してaspxを作成しています。
マスターページ→OrgMasterPage : System.Web.UI.MasterPage
コンテンツページ→OrgPage : System.Web.UI.Page
※OrgMasterPageクラスにOrgPageを突っ込んでいます
<結果1>
OrgMasterPageクラスにて
this.Equals(this.page) → true
<結果2>
OrgPageクラスにて
this.Equals(this.page) → true
となります。
[不思議におもったこと]
[前提]にもあるとおり、「Page」プロパティは、System.Web.UI.Pageクラス。
OrgPageクラスは、System.Web.UI.Pageクラスを継承している為、<結果2>となるのはわかります。
しかし、OrgMasterPageは、System.Web.UI.MasterPageクラスを継承しています。
なのに、<結果1>となります。
System.Web.UI.MasterPageクラスは、System.Web.UI.Pageクラスを継承していないのにどうして
「Page」プロパティ(System.Web.UI.Pageクラスインスタンス)に設定できてしまうのでしょうか;;
>>393 vbにはcsv専用のparseがあるんだが。
C#からも使えるよ。
406 :
364 :2009/01/14(水) 01:50:29
>>366 やっと試せたけど、これスゲー!!
いいもん教えてくれてありがとう!
407 :
397 :2009/01/14(水) 01:57:54
大変失礼致しました。完全なる間違いです。 OrgMasterPage.Pageプロパティには、OrgPageクラスインスタンス※1が設定されていました。 大変申し訳ありませんでした。 ※1…正確には、自動生成されるコードに定義されているOrgPageクラスを継承した クラスインスタンスです。
タブコントロールのボタンをドラッグドロップする方法ってありますか?
FormView使って表形式の編集画面作ってるんだが、バインドした データによってある項目を出す、出さないを行いたいんだけど テンプレートベースのFormViewにはちょっときついのかな。 インラインスクリプトで <% if (Eval("hoge").equals("foo")) { Response.Write("<TR>・・・</TR>"); } %> みたいに書ければ良いんだけど、バインドデータを呼び出せないから 当然エラーだし。 なんか、根本的に間違ってるのかな。
C#というより、.NET frameworkの質問なのですが、 Buttonコントロールで、 Image に画像を設定し、 AutoSize を true、 AutoSizeMode を GrowAndShrink に設定すると、 ImageAlign が MiddleCenter になっているにもかかわらず、 画像がボタンの若干右下に数ドット寄って表示されます。 ちゃんとボタンの中央に表示する方法はないでしょうか?
ならんけどな、、うちがVistaだからか?
Windowsサービスを作成しようとしています。
サービスをインストールするためにInstallUtil.exeを使わなければいけないとわかりました。
ここ見てみたのですが、
http://msdn.microsoft.com/ja-jp/library/aa984379 (VS.71).aspx
コマンドプロンプトで「installutil.exe」と打ってもそんなコマンドない、と言われます。
私の環境では「C:\Windows\Microsoft.NET\Framework\v2.0.50727」ここにInstallUtil.exeがあるので
当然カレントディレクトリがここでないとコマンドが通らないのですが、
これってみなさんそうなんでしょうか?
いろいろサイトを見るとなんかこのパスが環境変数Pathに設定されているかのような
振る舞いみたいに見えるのですが。。
パスが通ってないのが通常でしょう
414 :
412 :2009/01/15(木) 23:55:24
>>413 やっぱりそうですか。
では自分でパス通しときますね。
ありがとうございます。
415 :
412 :2009/01/16(金) 00:21:14
おかげさまでサービスとしてインストールできたので 早速テスト的にOnStartに以下のコードを書いてサービスを開始しました。 using(FileStream fs = File.Open(sFile, FileMode.Append, FileAccess.Write)) using(StreamWriter sw=new StreamWriter(fs)) { sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"+"\t OnStart")); sw.Flush(); sw.Close(); fs.Close(); } するとログに「2009/01/16 00:22:34 OnS午ar午」という化けた内容で書き込まれたのですが これってどうしてでしょうか? あとちょっと別件ですが、上記のコードにファイルオープン時のエラーをcatchするために try,catchを入れたいのですが、こういうusingを使っている時って どの行にtry,catchを書くべきでしょうか?
>>415 ただ単に”OnStart"の場合はどう?
usingはdisposeをfinallyで実行してくれるだけ。
using(FileStream fs = File.Open(sFile, FileMode.Append, FileAccess.Write)) {
using(StreamWriter sw=new StreamWriter(fs)) {
try {
// 処理する
}
catch () {
// 例外処理
}
}
}
417 :
412 :2009/01/16(金) 01:13:44
>>416 返答ありがとうございます。
"OnStart"のみの出力では「OnS午ar午」と出力されてしまいました。
try,catchについて
今回の件ですとファイルオープンのエラーをキャッチしたいので書くとすればこうなりませんか?
少なくともFile.Openはtryブロックの中に書かないといけないと思うのですが。
try {
using(FileStream fs = File.Open(sFile, FileMode.Append, FileAccess.Write)) {
using(StreamWriter sw=new StreamWriter(fs)) {
// 処理する
}
catch ()
{
// 例外処理
}
だとすると今度はusing使ってるからdisposeしてくれるはずですし、
catchの例外処理って大して書くことない?
と思って変に感じました。
>>415 Console.WriteLine(DateTime.Now.ToString("tt"));
=> "午前"
の1文字目
sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"+"\t OnStart"));
=>
sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")+"\t OnStart");
釣りじゃないよね
つりでした
やっぱりそうか・・・ orz
421 :
412 :2009/01/16(金) 01:45:35
>>418 !!!
てっきり文字化けと思って深く考えすぎました。。
ありがとうございます。
>>417 のusingの話はどうでしょうか
>>421 エラーの発生を検出する必要があるため
417の通り、全体を try 〜 catch() で囲む必要はあると思います
using を使う場合はリソースの後処理が不要になるというだけですね
リソースの後処理は一般的に finally 節でおこなうことが多いため、
このfinally 節部分が省略できることになります
ただし、もともとcatch節で書く処理(ログを吐くとかエラーコードを復帰値にいれて返すとか)
は必要でしょう
フリーのプロファイラを検索するといくつかあるんですが、 お勧めはどれですか?ざっとググった範囲だと Prof-It for C# NProfiler nprof などが見つかりましたが
携帯サイトとPCサイトを1つのaspxで対応させたいと思っています。 例えばPHPであれば、 1.クライアントからの要求に対する処理を行う。 2.出力データを編集する。 3.クライアントに応じたテンプレートhtmlを読み込む。 4.読み込んだテンプレートhtmlに、編集されている出力データを設定。 5.クライアントへ返す。 と、いった感じでPHP自体には、HTMLのコーディングを一切行わず、 クライアントに応じたテンプレート化されているファイルを読み込み、 可変部分となる出力するデータを埋めていく。 この際、テンプレートをクライアントに合わせたファイルを使用することで、 1つのPHPで、クライアントに応じたHTMLを返すようなことをしていました。 最近、勉強し始めたASP.NETでは、 「このようなやり方はやらないのかな・・・。」 と、感じました。 通常、1aspxで数種類のhtmlを出力するような場合、どのような方法があるのでしょうか?
Enumを|で連結されてる条件の中に一つの要素(Enum)が入ってるかどうか調べるにはどうすればいいんでしょうか?
言ってる意味がよくわからんが if((foo & Enum.Hoge) != 0) これが知りたいのか?
>>426 if((foo & Enum.Hoge) == Enum.Hoge) の方が良くないか?
良いというか、
>>426 は間違い
Keysとか、こんなのもあるからな
[Flags]
enum Enum {
None = 0,
A = 1,
B = 2,
AB = A | B,
}
void Hoge() {
var e = Enum.A;
if((e & Enum.AB) != 0) Console.WriteLine("ABだぜ"); // NG
}
そうだった そういやそれでバグ出した事あったわ
何だっけ・・・レイアウト方面も実装しないとサイズが 0 みたいになったような
TreeViewのパスってもしかしてスペース入ってると駄目なんすか?
433 :
430 :2009/01/18(日) 16:56:52
MinimumSizeを指定することにより解決しました
434 :
412 :2009/01/18(日) 18:54:18
>>422 なるほど。
usingを使えばリソースの解放に関しての記述は必要なくなりますが、
おっしゃるとおりエラーが発生したとき他にも処理がありますね。
ありがとうございました。
435 :
デフォルトの名無しさん :2009/01/18(日) 22:07:38
InstallUtil.exeを使って作成したサービスをインストールしました。 サービスの管理コンソールより開始を選択するとこのエラーが発生しました。 ローカルコンピュータのService1サービスを開始できません。 エラー3:指定したパスが見つかりません。 切り分けたところ実行ファイルがネットワークドライブに配置されていることが問題のようなのですが、 なぜネットワークドライブだと動作しないのでしょうか? ちょっとスレ違いでしょうか? 動かない理由が.NET Frameworksのセキュリティ上の理由かもしれないと思いましたので こちらで質問させていただきました。
サービスの実行アカウントは? そのアカウントはネットワークドライブへのアクセス権限を持ってる?
437 :
435 :2009/01/18(日) 22:17:38
アクセス権は問題ないと思います。 テスト的にeveryoneフルコントールを付与しましたが同じでしたので。 そこで.NET Frameworksのセキュリティを疑い出したわけです。
caspolがそうなってるんだもん
Local System Account は(基本的に)ネットワークリソースにアクセスできない。 つーか、サービスなら普通にローカルコンピュータ上においとけよ。
everyoneでもサービスのアカウントがSYSTEMやNETWORKだったら駄目だぞい。 あとは.NETのバージョンだな。3.5SP1か3.0SP2か2.0SP2なら、 ローカルイントラゾーンに限り起動できる。
441 :
435 :2009/01/18(日) 22:37:30
>>439 もちろんそうなのですが、VSの作業ファイルがネットワークドライブに配置されていますので。
>>440 >>ローカルイントラゾーンに限り起動できる。
こちらは.NET Frameworksのセキュリティ設定でなんとかなりそうです。
>>everyoneでもサービスのアカウントがSYSTEMやNETWORKだったら駄目だぞい
これ知りませんでした。
eveyoneってほんとに何でもと思ってました。
これが原因っぽいですね。
解決できてうれしいです。
今回はビルド後のコマンドでローカルにコピーすることにします。
ありがとうございました。
シンボリックリンクでローカルディスクにあるように見せかければ ネットワーク上にあっても大丈夫だったりする
443 :
435 :2009/01/19(月) 00:14:14
>>442 シンボリックリンクってWindowsでいうところのショートカットですよね?
ショートカットをサービスに登録ってできましたっけ?
ここで質問させてもらいながらWindowsサービス作ってるのですが、
デバッグできなくて困っています。
ビルド→InstallUtil.exeでサービスを実行→サービスコンソールからサービスの開始
→VS2005からアタッチするとよい、ということがヘルプに書いているのですが、
どうもブレークポイントで止まりません。
自分の予想ではサービスに登録した実行ファイルが「\bin\Release」に作成されたもの、
つまりリリースビルドであることが原因と思っています。
デバッグビルドで実行ファイルを作成するにはどうすればよいでしょうか?
「\bin\Debug」に作成されるのかと思ったのですが、アセンブリ名.vshost.exeというファイルがあるだけで見つかりません。
>>443 442が言っているのは、Vistaで搭載された本物のシンボリックリンクだと思う。
シンボリックリンクってVistaの新機能じゃなくてNTFSの機能だったと思ったけど。。
もう一度デバッグビルドし直せよ・・・
>>445 VistaのNTFSドライバではじめてシンボリックリンクを解釈するようになった、と言えばいいか。
448 :
435 :2009/01/19(月) 00:38:29
>>446 デバッグビルドってどうやるんでしょうか?(汗
昔はツールバーらへんで都度切り替えてビルドしていた記憶があるのですが、
今使ってるVS2005ではなくなっているみたいなのですが。。
おかしいな、とは思ったのですが今回のように作成物がサービスでなければ
F5キーでブレークポイントで止めれましたし、ビルド内容を変更するようなところも見あたらなかったので
特に意識していなかったのですが。。
プロジェクトのプロパティでも見てみろよ・・・
450 :
435 :2009/01/19(月) 00:46:31
>>449 やっぱりそこですよね。
一番に見たのですがどれかわかりません。。
しいて言うなら「アンマネージドコードデバッグを有効にする」
というのがありますが、アンマネージド、なので関係ないように見えますし。。
低レベルな話で申し訳ないです。
プロジェクトのプロパティ、[ビルド]-[構成]
ツール→オプション→プロジェクトおよび〜→全般→ビルド構成の詳細を表示
>>450 あと、やっぱりツールバーにビルド構成のドロップダウンを追加しておいた方がいいよ。
これ2005からデフォではツールバーに表示されなくなったのが個人的には
大いに謎なんだけど。
454 :
435 :2009/01/19(月) 01:04:00
>>451 すみません、見あたりません。。
>>452 おおお!!
これです!
ビルド構成の詳細を表示、にチェック入れたら
メニュー「ビルド」配下に「構成マネージャー」が表示されるようになり、
ここで切り替えることができました。
これを使うとブレークポイントで止めることができました。
今まで知りませんでした。
ありがとうございます。
しかし、構成マネージャーってオプションでチェック入れないと表示されないんですね。
すごく重要に思えるんですが。
しかし構成マネージャーの規定値がReleaseビルドなので
今までずっとReleaseビルドしてたはずなのですが、
なんで今までサービスアプリケーション作成以外の場合この設定でブレークポイントで止めれてたのでしょうか?
455 :
435 :2009/01/19(月) 01:07:45
>>453 すみません、書き込み時の時差で見逃しました。
同意です。
昔ツールバーに表示されてましたよね。
あれ?
今ツールバーに追加しようとしたのですが、
選択項目にないのでVS2005では追加できなくないですか?
できるよ。
457 :
435 :2009/01/19(月) 02:17:32
>>456 あれ、ほんとですか
ツールバー右クリック→ユーザー設定
→ツールバータブ
の中にそれっぽいのはないので、ここではないですよね?
Directory.GetDirectoriesでとったディレクトリをForeachしてるんですが、 なぜかExistsがFalseになるフォルダがあります。 最後尾にスペース入ってるそうなるようなんですが、防止する方法ってあるんでしょうか?
バグっぽい仕様みたいだね。 ディレクトリなら末尾に \ を付加してやるといいみたい
Visual C# 2008 Express Edition の相談もここでよいのでしょうか?
それはどうかな
IDE自体の問題ならVSスレが立ってたはずだが IDEで作成してるものの質問ならここかもな
で、質問はなにかね?
460ではないが質問です。 C#で1つの長い文字列を複数行に分けて書くのってどうしたらいいんでしょう? C++なら行ごとに""で囲めば、その外で改行していようが1つの文字列になるけど、 同じことをC#でやったら怒られました。
465 :
464 :2009/01/19(月) 18:12:48
ググったらあっさり見つかったorz 行末に+を書けば良かったのね。
>>465 string s = @"こんなことも
かけちゃうの
しってる
かい?";
それとついでだ、これも覚えとけ。 @"" だと改行無視、\エスケープなしな全部 入るヒアドキュメントな感じになる。 string hoge = @"1 行目 2 行目"; string path = @"C:\Program Files\Hoge\hoge.exe"; string foo = @"ダブルクオート「""」はこのように。";
>C++なら行ごとに""で囲めば、その外で改行していようが1つの文字列になる これはどうかと
Cには文字列の+演算子なんて無いから "abc" + "def" と書けなくて 文字列リテラルの連結は "abc" "def" みたいに書くからね。 C#にもその書き方を残しても良かったと思うが、+演算子を強要した方が 意図が明確でいいか。
どうかと、って何だ?当然のことだが…
行ごとでなくてもいいな。
トライグラフに困って""で切ったり「したっけなw
>>467 > string hoge = @"1 行目
> 2 行目";
これだと「目」と「2」の間にある改行文字もhogeに含まれるから
>>464 のニーズには応えられないんじゃない?
用途にもよるんじゃないかな。
477 :
デフォルトの名無しさん :2009/01/21(水) 01:55:36
次のコードの意味がわからなくて悩んでいます。 1:EventLogPermission e = new EventLogPermission(PermissionState.Unrestricted); 2:e.PermitOnly(); ヘルプにかかれていることを自分的に以下のように解釈しました。 1で後で利用するセキュリティ制御のためのインスタンスを作成します。 2で規定のアクセス権のコンストラクタの引数で指定されたもののみでしか アクセスできないように縛りをかけます。 今回のケースでは「PermissionState.Unrestricted」が指定されているので .NET Frameworksのセキュリティ設定でフルアクセスの場合、 さらにフルアクセスの縛りを追加する形になり、結局セキュリティレベルは変わらない、と解釈しました。 ですがこのコードの後にイベントのアイテムを読み取るコードを書くと アクセス許可でエラーが発生してしまいます。 意図した結果と違うので自分が勘違いしていると思うのですが どの辺がおかしいでしょうか。
478 :
デフォルトの名無しさん :2009/01/21(水) 02:49:00
C#が.NET Frameworkでなければならない理由って何なの? むしろBorlandDelphiVCLみたいな感じのほうがよかったんじゃないの? Linux版の.NET Frameworkが普及すればLinuxの利用者が増えて Windowsの売り上げが下がるよね。 おそらくWindowsはカーネルごと新しくなることが あるからそれを意識してるんだと思う。 つまりXPとVistaをMacやLinuxと同じように まったく別のOSと捉えているってことだよね。 正解でしょ?
ぜんぜん違うだろw
違うにも甚だしい
>>477 その考えであってると思うけど、別に原因があるのでは。
再現性のあるコードアップしてくれたら調べるよ。
むしろ生まれてきたこと自体間違い
生まれてすみません
俺もすいません
お父さん、お母さん、生んでくれてありがとう。
>>478 > カーネルごと新しくなること
それは結構当たっていると思う。
ただし、XPとVistaではなく、x86とx64とIA-64とMobile/CE系各種のようなアーキテクチャの違い。
.NETはActivXやCOMの延長線上のものなんだっけか?
VS2010のMEF標準搭載で、やっとCOMが.NETで置き換わりそうな雰囲気になってきたな
MEFって何よ
Managed Extensibility Framework マネージコードでプラグイン書けるようにするための新しい.NETのライブラリ VS2010にも使用される
これはうれしいよね
そんなんリフレクション使えばいままでもできるような気がするが。
マイクロソフトがフレームワーク出して統一することに意味があるんだよ
あんまりそういうのに頼ってると駄目な子になっちゃいますよ(´・ω・`)
頼るっていうか,そういうのは案外自分で作った方が簡単だったりするものだよ 簡単かどうかじゃなくて,統一されたやり方でやることに意味がある
まあ標準ライブラリ内で何でもできるのは便利だな。
500 :
477 :2009/01/21(水) 21:47:53
>>483 すみません、お手数おかけします。
1:EventLogPermission e = new EventLogPermission(PermissionState.Unrestricted);
2:e.PermitOnly();
3://CodeAccessPermission.RevertAll();
4:EventLog el=new EventLog("System");
5:foreach (EventLogEntry ee in el.Entries)
6: Console.WriteLine(ee.Message);
このコードでは6行目を実行する時に
「型 'System.Security.Permissions.RegistryPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=*******' のアクセス許可の要求に失敗しました。」
というエラーが出力されます。
3行目のコメントアウトをはずすとe.PermitOnlyが解除され、
エラーがでなくなります。
>>477 で私が発言したコードの意図とは違うので
どうしてかわからないので悩んでます。
>>493 個人的には MEF っていう名前より
「System.ComponentModel.Composition」
っていったほうが重要性とかコアなものだってのが
わかりやすい気がするんだよなぁ。
おまいら System の ComponentModel に入るものなんですよ
みたいな
そういや System.AddIn はどうなるんだろうね。てか
502 :
デフォルトの名無しさん :2009/01/21(水) 23:13:36
C#でアセンブリというのは、C/C++でいうライブラリと同じですか?
C/C++ でいうライブラリだと、モジュールかなぁ。
System.AddInは無駄に複雑な気がするな。 HelloWorld級のシンプルなアドインとホストを実装するのに アセンブリを5個も作らなきゃいけないとか。 MEFはどうなんだろう? シンプルで、System.AddIn並みの セキュリティとバージョン間互換性が確保されてればいいんだが。
>>502 ヘッダとライブラリとdllが一緒になったような感じ
Exeもアセンブリなんだが
508 :
デフォルトの名無しさん :2009/01/21(水) 23:49:12
>>503 >>505 ありがとうございます。モジュールってDLLですよね?
ヘッダとライブラリが一緒になったんですか。。。
もし説明のページとかあったら教えてください。
簡単に考えるなら,中間言語のソースコードの塊だと理解しとけばいいよ
510 :
デフォルトの名無しさん :2009/01/22(木) 00:10:58
>>509 なるほど、分かりました。
ありがとうございました(ほかの方も)。
モジュールは DLL じゃないよ。拡張子は .netmodule だっけか。
理解早w
513 :
デフォルトの名無しさん :2009/01/22(木) 01:04:29
C#で型が異なる複数の実行文をまとめるにはどうすれば良いのでしょうか?
>>500 調べてみたが、どうもPermitOnlyは親クラスのCodeAccessPermissionの範囲で、
指定以外のアクセス許可を禁止にしているらしい。
とりあえず3つあわせたら動いた。
PermissionSet ps = new PermissionSet(PermissionState.None);
ps.AddPermission(new EventLogPermission(PermissionState.Unrestricted));
ps.AddPermission(new RegistryPermission(PermissionState.Unrestricted));
ps.AddPermission(new EnvironmentPermission(PermissionState.Unrestricted));
ps.PermitOnly();
属性使ったほうが楽かもね。
>>513 > 型が異なる複数の実行文
もう少し詳しく
オレオレ名称じゃわからない
C#でwebのテキストエリア上に文字を埋めたり、読んだり つまり参照するってどうすればいいかな。 ASP.NETがやはり必要?
意味不明だが多分ASP.NETとは全く関係ない
519 :
477 :2009/01/23(金) 00:32:55
>>514 ありがとうございます。
このコードでイベントログを読み取るために
EventLogPermission
RegistryPermission
EnvironmentPermission
の3つのアクセス権が必要ということがわかり、すごく納得できました。
元々のコードに意味をコメントで書きます。
//EventLogのアクセス権を制御するためのインスタンスを規定値アクセス権有効で作成
EventLogPermission e = new EventLogPermission(PermissionState.Unrestricted);
//EventLogのアクセス権(有効)「のみ」を有効にし、他のアクセス権は与えられていない状態に設定
e.PermitOnly();
//以下でイベントログをオープンし出力
EventLog el=new EventLog("System");
foreach (EventLogEntry ee in el.Entries)
Console.WriteLine(ee.Message);
↓
「型 'System.Security.Permissions.RegistryPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=*******' のアクセス許可の要求に失敗しました。」
が発生する
これは原因はe.PermitOnlyによってイベントビへのアクセス権「のみ」が有効であり、この処理には
レジストリへのアクセス権が有効である必要があるためです。
ありがとうございました。
意味不明だけどWeb開発するならASP.NETで。
テキストボックスのキャレットを消す方法って何かありますか?
523 :
デフォルトの名無しさん :2009/01/25(日) 23:53:04
a.txtに1行ずつ 「a」「b」「c」・・・というふうに文字列(と単語)が書いてあって、その内容を数秒おきに表示したいのですが その「数秒おき」というのはSleep()で数秒間停止させる以外に方法はありますか? 別にSleepが気に入らないというのではなく、ほかに同じような実現方法があるなら覚えておきたいなと思いまして。
うわ、ageてしまってた 申し訳ありませんでした
Timer
>>523 GUIだったら、タイマーイベントでやるのがふつー。
マルチスレッド系の機能をつかってもできるかも。
GUIスレッドでSleepしちゃダメだよ
>>525-527 ありがとうございます、タイマーイベントで調べてみます。
>>527 ありゃ、タブーだったんでしょうか…
言い訳にもなりませんがC#を初めて1ヶ月経っているかどうかなので右往左往してます…
C#どうこうでなく、GUIの基本だと思うけどな。
PictureBoxで文字を描画すると、フォームを広げたときとかに 文字がタイルのようにあちこちに同じものが出てくるんですが、 これを防ぐ方法ってあるんでしょうか?
文字列の描画方法がおかしいんじゃないか
そのままと言うがそのコードはPictureBoxに文字列を描画していないようだが?
e.ClipRectangleを使ってるからだよ。
e.ClipRectangleは、隠れてた部分が画面に出てくることになって 新たに描画しなければいけない範囲が入ってる。 ウィンドウのリサイズで隠れていた部分が出てくるとそこの中に文字列を書こうとするからそうなる。
あるある
C#でスレッド処理を行うプログラムを組んでいます。 ListViewにファイル名を格納して別スレッドでファイル名を絡めた処理を行いたいのですが 別スレッドでListViewからファイル名を取得する方法がわかりません。 InvokeでListViewへ値を渡す方法はたくさんあったのですが ListViewから値を取得するのがどうしてもわからないです。 参考サイト等ご教示いただければ幸いです。
どうやってノード指定するのかとか考えるとなんか考え方が変じゃね?
直接ListViewとやりとりすんじゃなくて、共用のオブジェクト作ったほうがはえんじゃね
ListViewの代わりにtextboxを使っているけど string s = ""; textBox1.Invoke(new MethodInvoker(() => s = textBox1.Text)); System.Diagnostics.Debug.WriteLine(s);
542 :
538 :2009/01/26(月) 15:50:17
レスありがとうございます。
>>540 さんの通りの方法で行う事にしました。
>>541 さんのも試してみたのですが s をProcessStartInfoの引数として渡そうとすると
sが未割当と出てしまいました…
まだ不慣れで困惑しておりましたので非常に助かりました。
本当にありがとうございました。
>>542 未割り当てって、これで出なくなるだろ
ProcessStartInfo s = null;
>>542 オブジェクトを共用するなら排他処理はきちんとやらないといけないよ
>>544 頻度によるが、そういうときはEventArgsの派生作ってイベントにしちゃうと楽なんだぜ
イベントハンドラはそれを呼び出したスレッドで実行されるんだから 「別スレッド」でその結果を使うならやっぱり排他制御がいるんじゃないの
Invoke/BeginInvoke/EndInvokeの時点でメモリバリアになってると思う。 モニタ使ってごちゃごちゃ書くより、 Control.Invoke系の呼び出しで同期取ったほうが楽だろう。
548 :
デフォルトの名無しさん :2009/01/26(月) 23:05:08
すいません。最近C#を勉強し始めたのですが、 値型と参照型の違いについて基本的な質問させてください。 classとして定義されている型(例えばMyClass)について、 MyClass x; のように関数内などで変数を宣言すると、このxは自動的に参照型変数となる。 structとして定義されている型(例えばMyStruct)について、 MyStruct y; のように宣言すると、このyは自動的に値型変数となる。 という理解でよいのでしょうか? C++であれば、クラス型の変数であっても、 MyClass& x; のように&を型名につけなければ参照型にはなりませんが、 C#では上述のようにクラスか構造体かで、参照型か値型か勝手に決まるということですか?
>>549 ありがとうございます。本で最初に読んだときチンプンカンプンでした。
C++でいう参照型とはまた違うよ どっちかというとポインタに近い
VC#2008 Express Editionで、 dllのdebug版はどうやってビルドするのでしょうか? [ビルド]-[ソリューションのビルド]では、Release版しかビルドされません。 でも僕は作成中のDLLのデバッグをしたいのでDebug版をビルドしたいのです。 昔のVC6のように、DebugとReleaseの両方ともビルドする、とかの設定は どこですれば良いのか解りますか?
むしろC++の参照がよくわからない… C#の参照型はまんまポインタだよね。 C++の参照ってのは・・・エイリアスみたいなもんだっけ?
そうだよ。
引数で渡すときは、ポインタより参照のほうが最適化がかかりやすいとか 書いてるブログがあったな > C++
>>552 ツールバーに"Release"と書かれたドロップダウンボックスがあるだろ
それクリックして"Debug"を選ぶ
[オプション] ダイアログ ボックス - [プロジェクトおよびソリューション] - [ビルド構成の詳細を表示]
は必ずチェックしておくこと
>>552 たぶん、ツール→オプション→プロジェクトおよびソリューション→全般→ビルド構成の詳細を表示
>>559 あるよ。左下の「全ての設定を表示」みたいなチェックをまず入れるんだ。
わかりにくいよねー
>>560 おおお!ありました!
ありがとうございます!
型または名前空間名 'Linq' は名前空間 'System' に存在しません。アセンブリ参照が不足しています これはどうすればいいんですか? VS2008WEBC#で空のWEBにWEBフォーム追加してビルドしただけなんです なにがいけないんでしょうか
>>562 参照設定右クリック→参照の追加
でSystem.Linq追加
できましたーありがとう!
.NetFrameworkが難しかったのでひと目でわかるC#を買ったんですが今度は簡単すぎて使い物になりませんでした。 その次の本を教えてください・・・・・・・・・ 独習C# 第2版 C#エッセンシャルズ 第2版 はどっちがいいと思いますか?
貴方にとってどちらが良いかは、エスパーで無いと分かりません。 両方買えば。
C++は林本で習得したのでそれに近いやつがいいです。 VSの使い方とか技術オタク向けのどうなってるのかなんてどうでもいいです。 後はMSDNだけあればいいように、C#の言語と、全体の流れがわかる本を教えてください。 ここまで本を外したのははじめてです。呪われてるような気がしてきましたおねがいします!
本屋で立ち読みして来い
569 :
デフォルトの名無しさん :2009/01/29(木) 14:10:05
デリゲートなどで、呼び出し関数を登録する際 登録する関数名を外のファイルから読み込んで登録したいのですが どうすれば良いのでしょうか ファイルに書かれている関数名は内部に存在するものとします
リフレクション+CreateDelegate
>>567 本選択で悩めるなんてうらやましいなぁ〜
Delphiなんて巨大有名書店行っても全く扱ってないから悲しい・・・
C#だったらいっぱい出てるんだろうなぁ〜
572 :
デフォルトの名無しさん :2009/01/29(木) 20:52:26
どちらの本がいいかに対する最善の答えは常に「両方買え」である
ふーん。女性と似てるね
初心者向けと上級者向けの本は持ってて初級者向けの本が欲しいんだろ? その2つは両方とも初級者向けだ。 どっちか1つ博打で買え どっちがわかりやすいかは知らんが、2つ買えば確実にダブるぞ
>>571 ネットで買え。
中身が見たいというならきびしいが。
576 :
デフォルトの名無しさん :2009/01/29(木) 22:17:45
RegexのMatchesで得た情報をもとにRichTextBoxで色づけをしたいのですが、 RichTextBox.TextにRegexで使ったテキストを代入するといわゆる復改(\r)コード が消えてしまい文字indexとlengthがずれてしまうのですが、 代入しても復改コードが消えない方法はないでしょうか。 教えてエロい人!
577 :
576 :2009/01/29(木) 22:28:02
あれ? RichTextBox.Textにテキストを代入してそれをRegex.Matches()すればいいって話っすか?
自動変数についての質問です。 エラー時に変数の値を表示するものですが、これを常時表示したいと思っています。 どのような方法がありますか? また他にいろいろ調べたのですが、 デバック>ウィンドウ>〜では、ブレイクポイントとイミディエイトしかありません。 またCtrl + Alt + V,Aも試したのですが、表示出来ないようです。 visual studio2003 Framework 1.1を使っています。
579 :
デフォルトの名無しさん :2009/01/29(木) 23:43:42
580 :
デフォルトの名無しさん :2009/01/29(木) 23:54:57
実行環境を限定するためにプロジェクトに[プロジェクト名].configを追加し、 以下の内容を書きました。 <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v1.1.4322"/> </startup> </configuration> するとこんなエラーが出てしまいます。 要素 'supportedRuntime' のスキーマ情報が見つかりませんでした 属性 'version' のスキーマ情報が見つかりませんでした 書き方間違えてますかね?
>>580 先頭にXML宣言は付加できない。からなず<configuration>で始める。
文字はutf-8を使用する。マルチバイト文字が混じらない場合はBOMなしでもよい。
582 :
580 :2009/01/30(金) 00:37:35
>>581 先頭行削ってファイルメニューより名前を付けて保存で
Unicode(UTF-8 シグネチャ(BOM)なし)コードページ650
を選択したのですが、症状が変わりません。
まだ何か足りないでしょうか?
>>580 >プロジェクトに[プロジェクト名].config
App.configを追加してそれを修正する。
XML宣言が書けない問題はサービスパックのどれかで段階で修正されてるはず。
最上位bitを高速判定する関数ってどこかにないですか?
ビット演算
関数呼び出す時点ですでにオーバーヘッド大きすぎない?
そうなんですか、ありがとうございました。
整数だったら正か負かの判定で終わりのような。実数だ非数とかあるからややこしいけど。
Chrome風のエディタって作成できますか?
作り手の技術力しだい
594 :
デフォルトの名無しさん :2009/01/30(金) 09:31:23
>>576 リッチテキストボックスは\nでは改行してくれなくて、\r\nに置き換えないと
いけないんじゃなかったっけ? 嘘だったらごめんね。
ちょいと質問です VS2005で、.xsdファイルを作成して作る型付きDataTableにデータを格納する TableAdapterについてなんだけど、例えば HogeTableAdapters.HogeTableAdapter hoge = new HogeTableAdapters.HogeTableAdapter(); とインスタンスを生成すると、インスタンスを生成する場所によって (System.Data.SqlClient.SqlConnection) hoge.Connection が見える時と見えないときがあるのはなんだかわかる人いるかな? 具体的には、ASPでWebフォームを追加時に自動で生成される public partial class Default : System.Web.UI.Page なんかで生成するとConnectionが見えず、他では見えるっぽい。 継承関係でProtectedになってるわけでもなさげだし、よくわからん・・
596 :
デフォルトの名無しさん :2009/01/30(金) 12:40:59
>>570 あぅっ、即レス頂いてたのに申し訳無い
ありがとうございます。
VB5で作られた資産をC#に置き換える仕事がくるかも知れないんだけど 中身のソースは無理として画面設計frmをC#に変換なんて出来ます?
VB5のプロジェクトはVB6で変換できる。
VB6からVB7/8/9は標準でVisualStudioに変換ウイザードが付いてくる。
そのウイザードの製造元のソフトを買えばC#にもできる。
ttp://www.artinsoft.com/ まあなんだ、モノは試しで一度VBに変換してみるといいよ。
標準以外のコントロールを張りまくったフォームはほぼ絶望的な状態になるから。
>>598 C#に変換するには別にソフトがいるんですね。
C#買ったらいろいろ試行錯誤してみます。
ありがと!
まあゼロから作り直した方がはやいよ
再現できるからやってみな 移動じゃなくてコピーすると絶対パスでブックマークに飛ぶ めちゃくちゃになるから
変換ウイザードって外注だったのか
リストボックスおよびコンボボックスで、アイテムを選択したときに現在上から何番目のアイテムを選択しているか を知る方法はありますか?
selectedindex
フォームのボーダースタイルをNoneで隠して、更にBackColorもTransparentにして フォーム上にあるTabControlしか見えないようにしたいのですが、 そうするとどの箇所をドラッグしようとしても反応してくれません。 TabPageをドラッグすることでフォームの移動を実現したいのですがこれは可能ですか?
可能です
.NET 3.5 Service Pack 1 をやっと入れたよ
>>607 どうもありがとうございますー
いろいろ探してみるとします
初心者すぎる質問かもしれませんが、 フォームを持たないApplicationContextでInvokeする方法を教えてください。
デスクトップアクセサリー的なものを作りたいのですが、フォームボーダーを消去→右クリックでサブメニューを表示させるために FormのMouseDownに if((e.Button & MouseButtons.Right) == MouseButtons.Right) { contextMenu1.Show(); } と記述してコンテキストメニューを表示することができました。しかしそのメニューの出現する場所が画面の左上端に出てきてしまいます。 「右クリックがされた座標にコンテキストメニューを表示させたい」のですが、どのように書けば解決するのかがわかりません。 contextMenu1.Top、.Leftでいろいろ試してみたりはしましたが書き方が悪いのか何も変わりませんでした。 どなたか解決策をお願い致します…
>>612 あーこれは失礼致しました。
確かに聞いてばかりではいつまでも出来ませんよね。
こうなったら人には頼らないつもりで頑張ろうと思います
いやがんばる必要ないよ。
>>612 のリンク先にまんま答え出てるじゃん。
今後は頑張ろうって意味じゃないの
Formなら普通にContextMenuStripプロパティに設定するだけでいいんじゃねーのと思いつつ 普通のコンテキストメニューはMouseDownじゃなくてMouseUpで表示するぜ
>>610 ダミーのコントロール一つ作ってメインスレッドで一度Handleを参照しとく
618 :
デフォルトの名無しさん :2009/01/31(土) 23:52:19
Dispose()が実装されているクラスは全てDispose()すべきなんでしょうか。 Bitmapを大量にnewする箇所でタスクマネージャーのメモリーがすごい増えます。 テストで private void newBitmapTest() { for ( int i = 0 ; i < 10000 ; ++i) { Bitmap bitmap = new Bitmap(100,100); } } だとどんどん重くなってしまい強制終了しないといけません bitmap.Dispose()をfor文の中に入れると重くならないのですが、 他の箇所でも同様の現象が起きる箇所があるか心配です。 あとDispose()がないクラスも試しにやってみましたが、 private void newObjectTest() { for ( int i = 0 ; i < 100000 ; ++i) { Bitmap obj = new Object(); } } これはobj = null; を入れると落ちなくなりましたが、nullを入れることで ガベージコレクションが動いたのでしょうか。 ただ、bitmap = null;としただけでは開放されていないのでガベージコレクションが 動いてるようには思えませんでした。
ようろうさん おなかすいたんでコンビニいっていいすか^^
gobaku
>Dispose()が実装されているクラスは全てDispose()すべきなんでしょうか。 はい。 newObjectTest >Bitmap obj = new Object(); はコンパイルできないでしょ?
>>618 GDI関連のクラスは特に念入りにDisposeする必要があります。
メモリが少なくなってGCが起きるより先にGDIリソースが枯渇するからです。
GCとDisposeは別問題 BitmapはGCの管理外にリソースを持ってるからDisposeでさっさと解放してやらないといけない ほっといてもそのうちBitmapがGCされるときにファイナライザ(デストラクタ)で解放されるけど フェイルセーフであってそれに頼ってはいけない
newObjectTest >Bitmap obj = new Object(); はコンパイルできないでしょ? Object obj = new Object(); の間違いでした。 こういうDispose()できないクラスは明示的な解放は必要ないのでしょうか。 また、Dispose()をMsdnでみるとアンマネージリソースの開放と書かれているのですが Bitmap bitmap = new Bitmao(100,100); ではマネージヒープにハンドルのみか入って マネージリソースにまだ空きがあるためガベージコレクションが動かず システムリソースが先に食いつぶされるという理解でいいんでしょうか。
>>622 623
ありがとうございます。
GDI関連のクラスは全てDisposeするようにします。
また、Disposeが実装されていないクラスはガベージコレクション任せにして
いいんでしょうか。
private void newObjectTest()
{
for ( int i = 0 ; i < 100000 ; ++i)
{
Object obj = new Object();
obj = null;
}
}
にした場合Object obj = new Object();でつかんだ領域はnullで開放しているのでしょうか
それともガベージコレクションで開放しているのでしょうか。
>>624 の認識で間違ってない
nullを代入するのはほとんど無意味だからやらなくていい
Disposeを実装しているかどうかにかかわらず,マネージオブジェクトの解放は常にGC任せ
>>626 ありがとうございます。
1年間動かしっぱなしのソフトでメモリーリーク(リソースリーク?)とかありえないんで
別言語でやり直そうかと思いました。
GCのお仕事。 1)ファイナライザの実行(アンマネージリソースの開放) 2)メモリ領域の回収(マネージリソースの開放) Disposeは1)を代行するもので、メモリの回収はあくまでもGCが行う。
ありがとうございました。 大変勉強になりました。 でもメモリを開放しないって便利だけどなんか不安ですね。 newしっぱなしでいいというのがメモリの動きが読みづらくて メモリチェックのテストが困難ですね。
いつでも回収できるメモリは空いているのと同じこと。このことを悟るのに修行が必要(笑
あと間違っても直接Dispose呼ぶなよ。using使えよ。
usingのDisposeやfinallyもファイナライザと同じで必ず呼び出される保証は無いんだっけ
型推論が便利なのでusingを使いたくない場面が・・・
>>633 どういうこと?
using (var bmp = new Bitmap(""))ならできるけど。
using (bmp = new Bitmap) //bmpはフィールドでもローカル変数でもおk こんなのも通るね
それどころかusing (new Bitmap(100, 100))でも通るな 自動的に専用の一時変数が用意されるのか
>>633 もしかしてusing違いか?
ハハッワロス
Usingを使えばExceptionがあっても開放してくれるようなので便利そうですね。 Graphics g = PictureBox1.CreateGraphics(); g.Dispose() こういう処理もUsingで Using(Graphics g = PictureBox1.CreateGraphics()) { } とできるんでしょうか。
Linq to SQLでのcontextのusingとか スコープ内で取得したデータを保持しときたい場面は結構多い まあ別にDisposeしなくてもいいんだけど
640 :
638 :2009/02/01(日) 01:17:30
コードでぐぐったらあったので解決しました。
ネームスペースを using するときに Java でいう import hoge.*; 相当になるのを何とかしてよ もしくは自動で using Hoge = Foo.Hoge; ってなるようにしてよ
いやいやC++/CLIでしょ。
C#のネームスペースの使い方はC++準拠。 つーか、javaのあれを避けたかったんで*の導入はしなかった。
>Java でいう import hoge.*; 相当になるのを何とかしてよ 何の問題が?
被ってから避けるのがC#流 どうせIDEでの使用が前提なんだからその型がどこにあるのかわからなくなるなんてありえない マウスカーソルを型名の上に置いたら名前空間表示される
>>639 スコープ外にもっていくにはどっちにしろtoarray()せんとあかんだろ
WPF使い始めてから迂闊にusingするとPathがかぶるんだよね。
System.IOとかぶるんだっけ、あれは確かにないな。 System.WindowsとSystem.Windows.Formsでかぶるのはいいとしても。
コア名前空間との競合は避けろって、ガイドラインにも書いてあるのにな
名前空間エイリアス使えばどちらかに限定できるけど
Timerも名前変えて欲しかったり……
4つ目のタイマはDispatcherTimerになったよ!
C#ってprintfの%sに相当するものってないのん?
{0}
System.Windows.ExpressionとSystem.Linq.Expressions.Expressionが被るのがうざすぎる
>>638 >>640 解決しました
→解決策は必ず書いてよ…
ググったけど出ないんですけど
どなたかわかる人教えてもらえませんか?
「できる」
なんだよそのインプレスの本のタイトルみたいなの
「やればできる」
661 :
デフォルトの名無しさん :2009/02/01(日) 17:29:36
XmlSerializerで保存できるClassの中のメンバってstringやintぐらいですか? 例えば、オプションを入力するようなフォームがあって、 その情報をファイルとして保存する時、そのオプションオブジェクトまるごと 保存・復元できたらいいなと考えていたのですが、XmlSerializerで それをやろうとするとExceptionが発生します。 やはりそのオプションからわざわざstring型とかを抜き出して 別のクラスにいれて、それを保存するしか方法はないでしょうか?
例外のメッセージは読んだか? 多分 Serializable 属性がついてないものをシリアライズしようとしたんだと思うが。
663 :
デフォルトの名無しさん :2009/02/01(日) 17:59:45
662> 天才!そんな方法があるんですね! そんでやってみたところ、このオプションFormはFormを継承しているためか、 「アセンブリ 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' の型 'System.Windows.Forms.Form' はシリアル化可能として設定されていません。」 と出てきたのですが、Formを継承したオブジェクトは結局まるごとはSerializeできなくて、 この派生クラスのみの情報クラスを用意して、コピーして、Serializeって感じですかね?
SerializableAttributeはXMLシリアル化と関係ないよ。。。
665 :
663 :2009/02/01(日) 18:07:49
>>657 "Using(Graphics g = PictureBox1.CreateGraphics())"
と、ぐぐったらたくさんでてきたぞ。
668 :
663 :2009/02/01(日) 18:33:17
666> 普通に考えて無理でしょうね。 なので、今オプションクラス(:Form)の持つ、CheckBoxやTextBoxを 別のクラスを用意してコピーして、それをSerializeしようとしましたが、 やはりExceptionで無理でした。これもFormが出来ないのと 同じことですよね。。。 じゃぁファイルしたい情報は結局全部String型にしなくちゃいけないってことですか? オプションをまるごと保存できたらいいなんて需要ありそうなもんだから そんなソリューションはありそうなもんだと思ってましたが。
フォームみたいな変なものに依存しないクラスならそのままシリアライズできる
設定情報をまとめたクラスをシリアライズすればいいじゃない コントロール丸ごと保存しても意味ないだろ
>>668 普通は設定情報は設定情報クラスを用意するもんだから
UIとデータは分離
673 :
663 :2009/02/01(日) 18:48:00
670> はい。仰るとおりでございます。 ただ、その 設定情報のまとめたクラスを用意する & TextBox.TextなどのStringをコピーする & 起動時、オプションFormに反映させる のが面倒だっただけです。これだとオプション項目が増える(減る)度に この設定情報クラスも追加・管理しなくてはいけないですし。 なんか不効率だと思って。 ということはみなさんアプリケーションの設定情報を保存する時って 設定情報をまとめたクラスを用意してるってことですよね?
674 :
663 :2009/02/01(日) 18:52:53
671> >UIとデータは分離 はい。わかってはいるんですが、オプションFormにもそのデータは 保持しているわけで、どうにかならんかと考えてました。 では、そのUIのデータを設定情報のデータを 反映させるのはみなさんどうされてますか? やはり1つ1つコピーですか?
675 :
663 :2009/02/01(日) 18:53:59
では、そのUIのデータを設定情報のデータに
一つ一つコピーの意味がわからん。 本当にデータの分離がわかってるんだろうか。
逆だ 設定情報が先にあって それを操作するUIを付け加える
678 :
663 :2009/02/01(日) 19:13:22
1つ1つコピーというのは、例えば、 class config { //設定情報クラス string path; } class Option : Form{ //オプションを設定するダイアログ TextBox box; } みたいな二つのクラスがあって、OptionのOKボタンが押された時に config.path = Option.box.Text; みたいなことをやっているんですよね? Option.boxでもデータもってるのになぁと思って。 でも結局設定情報クラスを用意しなくてちゃいけないんですよね。。。 ありがとうございました。それでがんばります。
がんばるも何も… まあ、数ヵ月後に自分のレスを見返してみなよ。 あーアホなこと書いてたなあって思うだろう。
ググれば済む話なのに質問した上でなお力業で済ませるあたりが素晴らしい。 脳筋にも程がある
かんけいないがオブジェクトグラフをそのままたたっこめるユーティリティ作った。 結構便利。
つーかアンカーの付け方くらい覚えろ
すいません。 昨日のDispose()の件であと1件 DataGridView1.Rows.add(new Bitmap(100.100)); という文法でBitmapを作成しておいて 別スレッドで using (Graphics g = Graphics.FromImage((image)DataGridView1[0,0].Value)) { 描画; } を行う場合 これはBitmapじゃなくてDataGridView1.Dispose()を行えばリソースが開放されますか。 それともDataGridView1.columns[0].Dispose();を行うのでしょうか。
言ってることがむちゃくちゃだな usingを使えばgは自動的に解放(Dispose)される Disposeを呼べば呼んだ対象が解放される それだけのことだけど 慣れるまでスレッドなんかしばらく封印した方がいいんじゃない?
卒業制作でC#使って何かソフトを作るのですが ソースコードごと載せてあるソフトないですか?
ありません
グラフィックコンテキストの開放とBitMapは別だと考えていました。 >>DataGridView1.Rows.add(new Bitmap(100.100)); ここでnew しているBitmapはリークしないんでしょうか。
そこをなんとかっ
はいはい専門乙。 一生下っ端なんだろうな。
>>683 そのうちGCに回収されるからリークとまでは言わないけど一緒にDisposeされることはないよ
>>685 codeplex
スレッドは後々慣れてから実装することにします。 今はメモリーが安全に使われてない可能性がある箇所を重点に調べています。 >>DataGridView1.Rows.add(new Bitmap(100.100)); の場合 new Bitmapではなくて メンバに Bitmap[] bmp; として 再描画するときに foreach(Bitmap bmp in this.bmp) { bmp.Dispose(); } とするして開放するべきなんでしょうか。
あのねー。 作ったら自分で責任持つ。それだけ。 解放するタイミングは、使わなくなった時点からいつでも都合のいいとき。 あと例として提示するコードが変なのが気になる。 DataGridViewRowCollection.Addにそんなオーバーロードないっしょ
dataGridView1.Rows.Add(カラム1の内容,カラム2の内容,,,); というメソッドを使っているのですが。 例として用いたコードはカラム1のクラスがDataGridViewImageColumn としてデザイナで作られている場合で 実際に DataGridView1.Rows.Add(new Bitmap(100.100)); コンパイルが通ったため正しいと思っていました。
//Bitmap bmp = new Bitmap(200,200); //this.dataGridView1.Rows.Add(bmp); this.dataGridView1.Rows.Add(new Bitmap(100, 100)); Graphics g = Graphics.FromImage((Image)dataGridView1[0, 0].Value); Pen pen = new Pen(Color.Red, 3); g.DrawLine(pen,0,0,100,100); pen.Dispose(); g.Dispose(); コメントしてあるコードでも動くのですが 今のコードでも動いてしまうため newしたBitmapのポインタが分からなくて開放できないので もしかしたら勝手に開放してくれたりするのかと期待しました。 この場合はthis.dataGridView1.Rows.Add(bmp);とフリーするアドレスがわかる ように書くことにします。
>>this.dataGridView1.Rows.Add(new Bitmap(100, 100)); これはDataGridViewRowCollection.Add( params object[] values); というオーバーロードのようです。
>>697 完全に自分でリソースを解放しなきゃいけない言語のほうが、
はっきりしていてわかりやすい部分もあるよな。
例えばDataGridViewを継承するClassか、DataGridViewをメンバに持つClassを自作して、うまく解放してやるとか。
前者の場合、DeleteやClearをOverrideして、行を挿入されたり、削除するたびに
該当するインスタンスを破棄するようにするとか。
後者の場合、同じメンバにArrayListをもっておいて、Addするたびに
インスタンスをArrayListに入れといて、DeleteやClearするたびArrayListから削除するとか。
またはその複合型。
C#ってVBみたいに何もわかってなくてもいきなり書けるのがいいよね C++は文法から徹底的にやらないとだめだったからC#はすごいと思う
>>699 前者の方ができればベストですが、現段階だと難易度が高いため
後者の方法ですることにします。
ありがとうございました。
>>700 言語というより、フレームワークや開発環境がバックボーンにあってのC#ってことかな
ただ暗黙的な型指定とかわけわからん仕様はVBに逆行している気がする
pascalぐらいに厳密な型指定ぐらいでちょうどいい
LINQのための技術なんだから使わなきゃいいだけだろ
オブジェクトを作る時はかならずnewを付けないといけないんですか? 自動でメモリ解放されるなら、余計な文字を付けずに勝手に確保してくれないんですか?
var の話ならすでにオーバーロードとか型パラメータ省略とか 式内の型明示なしとかやりまくってるくせに、宣言部分に入れたら ほえるのって感覚的にどうよと思ってしまう。 逆にそういうのがないと使い物にならないってことでもあるんだが。 ある意味宣言部分でだけできないほうが不自然だろうよ。
クラス宣言部でもvar使えるようにして欲しかったな(´・ω・`)
>>705 より一層逆行しているってことだろ?
>宣言部分に入れたらほえるのって感覚的にどうよと思ってしまう。
3.0になってから文句言い出したなんてのは、完全にお前の作文だろ。
それとも
>>702 の発言をずっと監視してたのか?
型パラメータの省略なんて不必要なんだよ Object型でいいんだから 逆に言うと厳密にObject型と定義してる
>>707 俺は別に705じゃないけど、そんな人をいきなりお前呼ばわりするほど
エキサイトするような話でもないだろw
>>702 どこが逆行してるのか理解できんなあ。
君がよく理解してないだけじゃないの?
varってVBのOption Explicit Offとは全然違うよ。
710 :
デフォルトの名無しさん :2009/02/02(月) 01:09:11
無名クラスとかはどういう型にするつもりなんだ?
C#4.0のdynamicみたら発狂しそうだな。
あれは俺も発狂しそう 使われない事を祈りたい
Linq To SQLは廃止される方向だから、暗黙的な型指定がLINQのための技術なら、 余計な実装してくれたってことなんじゃないの?
714 :
580 :2009/02/02(月) 01:16:59
>>583 App.configにこれ追加したんですけど
>>580 と状況変わりません。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v1.1.4322"/>
</startup>
</configuration>
私の環境だけですかね?
自分の解釈だとアプリケーション構成ファイル(App.config)の
configuration→startup→supportedRuntimeで実行環境指定できると思ってたんですけど
なぜかできません。
dynamicは実質COM専用だろうけどね。 ただ、object型使うよりはるかに高性能なんだぞ。 Linq To SQLはLinq to Entityに衣替えしただけだよ。ほとんど一緒。
716 :
デフォルトの名無しさん :2009/02/02(月) 01:17:59
linqはsqlのためだけの技術じゃないんだが
>>715 DLR のことも思い出してあげてください。
あと、マルチプルディスパッチするときとかは便利そう。
718 :
デフォルトの名無しさん :2009/02/02(月) 01:21:45
もしかして、 var i = 5; i = "hello"; みたいなことができると思ってんのか?
>>709 コンパイラが「推測」する点で、使う側と読み手の「憶測」が生まれるから却下だろ。
for文のカウンタでvarって使えたっけ?
>>715 EntityはADOチーム SQLはC#チームだろ
だから無理矢理、言語仕様を変更したってこと
オブジェクトを作る時はかならずnewを付けないといけないんですか? 自動でメモリ解放されるなら、余計な文字を付けずに勝手に確保してくれないんですか?
>>718 たぶんそうなんだろうね。
でなけりゃ「VBに逆行」の意味が通らない。
>>719 いや憶測なんて生まれないって。
やっぱり何か勘違いしてるよ。
>>720 勝手に確保されたら困るだろ。参照だけ宣言したいときどうするんだよ。
>>714 ところでVisual Studioは2002か2003使ってるよね?
2005/2008じゃバージョンを1.0や1.1には落とせないよ。裏技はあるけど。
なにこの糞スレしねよ
725 :
705 :2009/02/02(月) 01:30:58
>>719 あのさ、俺が挙げた例のうちオーバーロードも式内の型明示なしも
1.0 かそれよりはるか前からあるんだけど。
これらの二つも
>コンパイラが「推測」する点で、使う側と読み手の「憶測」が生まれる
を満たすぞ。逆に聞くとなんで var だけだめなの?
>>721 いや生まれるだろ
var i = Class.GetID();
では何が得られるかは分からない。
GetID()が何を返すか調べなければわからないから、可読性が低下してる。
>>725 それを最初から指摘してるから矛盾がないといいたいわけだろ
お前の批判の論拠がvarが実装されて初めて文句を言い出してるからおかしいなんだから
インテリセンスがその辺一発で補完してくれるしねえ
>>726 逆に聞くが、
Class2.Foo(Class1.GetID())
でClass2.Foo のオーバーロードがどう呼ばれるかわからないのは
いいんですか。
>>726 変なこと言う人だな。
i(とGetID()の返り値)の型はコンパイル前に確定してるし、
プログラマがそれを知る必要がある場合はいつでも簡単に知ることができる。
通常はそれで必要十分だよ。
型がいつでも明示されてなきゃ嫌だ、っていうのは気持ちとしては理解できるけど
現実問題として本当にいつでもそんな必要があるのかっていうとそんなことはない。
731 :
デフォルトの名無しさん :2009/02/02(月) 01:39:30
IDE上だけでソース眺めるだけじゃないからなぁ htmlだってプリントアウトしたものだってあるし
>>729 コンパイラが類推して型を決めるのと、
目的の型を引数として渡せばそれを認識して動作するのとは別でしょ。
問題はコンパイラが類推することに憶測が入るわけだから。
(システム)ハンガリアンって、
>>726 みたいな思考をする人が広めたのかなあ。。
確かに型が使われてる傍に常に明示されてた方が読みやすい場合もあるだろうけど、
いつでもそうでなきゃ困るっていうのはちょっとパラノイア的だと思うけど。
>>732 だから類推も憶測もないってば。。。
何を言ってるんだよ。
735 :
580 :2009/02/02(月) 01:44:15
>>723 VS2005を使ってます。
VSが2005になって要素「'supportedRuntime' 」が非サポートになったことから
「要素 'supportedRuntime' のスキーマ情報が見つかりませんでした」の「情報」が吐かれる
という解釈でよいですかね?
つまり「'supportedRuntime」要素は古い仕様だと。
VS2005が1.0や1.1環境で動作する実行ファイル作れるかどうかということは
別問題として考えてます。
型なんて大体の場合無駄な情報だし エラーはコンパイル段階で特定されるしな 型の余計な情報はなくして intの値とか計算とかの方に神経を尖らせるべきだ
>>735 supportedRuntimeはサポート書いてるよ。ただVisual StudioのIDEがはじいてるだけ。
<supportedRuntime version="v2.0.50727"/>
にしたら警告が出るだけで動くうえ、MSDNにもちゃんと記述もある。
739 :
580 :2009/02/02(月) 02:00:41
>>738 VS2005が弾いてるだけですか。
厳密には警告ではなく情報なので弾いているわけではありませんが、
要素自体はサポートしている要素なのにどうしてですかね?
740 :
579 :2009/02/02(月) 02:01:42
>>579 「Webページのビルド コメント」機能って誰も使ってません?
ToString()のせいで、変数の型によってインテリセンスの機能は、 最低最悪の糞機能なわけだが、var導入でその改善も無理になったわけだ intに対しては確実にintだけ返すメソッドを表示するインテリセンスになってくださいよ
>>741 メソッドチェーンって分かる?
intの変数に代入するからってintを返すメソッドしか呼ばないわけじゃないんだよ
>>739 VS2005/2008がCLR ver.2.0.50727しかサポートしてない以上、
たとえば将来のバージョンv4.0.1234のような指定をされても
VS上でデバッグできないだろうということ。
>>742 だからToString()のせいで事実上無意味になってるって書いてあるじゃん
クラスにはToString()があって、ToString()にはLengthがあるんだからさ
>>732 いや、例えば、これ横に長いから、
FooBarHogePiyo.FooBarHoge(Foo.Bar.Hoge.Piyo.PiyoPiyo.Baz.BazBaz);
こう2行に分けた。
var tmp = Foo.Bar.Hoge.Piyo.PiyoPiyo.Baz.BazBaz;
FooBarHogePiyo.FooBarHoge(tmp);
という使い方・考え方もできる。憶測が入ると言えるのか?
もう1つ。
Hoge hoge = new Hoge();
2度も型を書くのは冗長だからvarを使った。
var hoge = new Hoge();
これも類推だろう。でも曖昧か?
ToStringのせいじゃないでしょ どんな型だろうとうまいこといじればなんでも返せるんだから
暗黙の型変換もあるね。
>>742 でも型がDateTimeとか、自作クラスならintやstringと比較して、かなり制限されるから
インテリセンスで必要なのだけ表示する意義はあるんじゃないか?
それが推論される型だと、すべてがインテリセンスで表示されてしまうわけだし。
>>745 少なくともtmpがどんな型なのかわからないじゃんw
int? string? Hoge?
全てのオブジェクトにはGetHashCodeがあるわけだが
>>748 たとえば
class Nothing{}
たとえNothing型を返したとしても
DateTime dt = hoge.Nothing == null ? new DateTime() : DateTime.Now;
DateTimeは返りうるわけだ
varはD言語で使ってるけど(autoだけど)、一度も困ったことないわ。 ましてや、IDEの支援が受けられるC#なら、大丈夫だろ。
>>749 初めのもわからないよね。var だけがだめな意味は?
>>749 元のtmp無しのコードだって分からない点は同じ。
tmpという名前を付けたからと言って、自分は型まで積極的に欲しいとは思わない。
まあこのネタC# 3.0が出たときに散々出尽くした話だけどさ。
>>753 むしろ下のほうが分かるだろ。new してるんだから。
>>754 じゃ、逆に言うと積極的に導入したい理由は?
型が余計な情報であって明示することで可読性が下がるならvarにすればいいし そうでないなら明示すればいい 感覚的な問題だが 俺は型が明示されることで可読性が上がるとは全く思わない
758 :
579 :2009/02/02(月) 02:40:24
>>743 それはちょっと思ったのですが、
それだと「supportedRuntime」要素自体を弾くようなことはしないと思ったのですけど
弾いちゃう仕様なんですね。
>>757 人間が書いてる以上、見てすぐにわかる感覚的なものは大事なんじゃないか?
var i = 1;
var i = 0m;
ulong i = 1;
decimal i = 0m;
俺は下の方がわかりやすいと思うけどね。
>>756 引数・戻り値のようにインタフェースを固定したい場面かな。
境界面は割とはっきりさせたい。
ついでに言えば、別にコンパイラがvarを認識しなくても、仮にvarって書くと
IDEが片っ端から実際の型に置き換えてくれて、
後から右辺を書き換えればそれに追従して型も書き換えてくれる、
という機能だったとしても自分は満足できるな。
>>758 はじいてはいないな。警告かと思ったら単なる情報だ。
もともとDTDやXMLスキーマできっちり管理する類のものじゃないのだろう。
userSettingを追加すると同じメッセージが続出だ。
>>761 ローカル変数で??
固定??
具体的に例をあげてくれると嬉しいな。
>>760 その例って無理やり感がするだけで何の意味もない気がするんだよな
わかりやすい、はぁそうですねとしかいえないし。
そもそも元々、
g.DrawString(..., 1, ...);
g.DrawString(..., 1.0, ...);
こういったリテラルの型を意識すべきな状況なんていくらでもあったから、
リテラルの型は意識すべきって思ってたし実際してるし var 使っても困ら
ない
>>761 具体例で、匿名型とかジェネリクスとの組み合わせとか型が長すぎる
場合が多すぎとかでもあげれば。
>>766 ulongじゃなくてintだろってことだろう。
>>764 すまん言い方が悪かった。つまりローカル変数は全部var使っていいと思っている。
>>765 自分で記述しているにはいいけど、他人のを読んだら多分、発狂するだろうな
いちいち呼び出される側のクラスの返り値の型を調べないといけないから
>>769 返り値が何をするかは型名ではなく変数名に現われる
型名なんかただのノイズだよ
>>769 マウス上に乗せるだけだな。
戻り値の型が重要で調べなきゃならないときだけだけど。
int foo() { var x = ccc.GetHoge(); return x; } GetHoge()の戻り値の型は必要か?
>>768 オブジェクト指向言語だから、一つのメソッドは極限まで細分化されてて、
だからローカル変数でvarが使われててもそれほど負担がないって思想なんだろうな
ローカル変数で俺が分かればvarで問題ないってのなら、
じゃ、ローカル変数の変数名は極論で言えば1文字でも可能?
>>772 GetHogeから返ったxがintかどうか良く分からんから
その場合は必要に見えるな
>>774 これは?
int foo() {
return ccc.GetHoge();
}
>>775 ひどく可読性が低いコードに見えるな
GetHogeでintが返るなんてありえん
>>771 俺が記述したのならいいけど、他人ので、その度に、カーソルに乗せるってのは苦痛だな。
ドキュメント作る時、ソースコードコピペしてvarが入るのは許してくれるのかなww
>>776 一方Derはこう書いた:
auto foo() {
return ccc.GetHoge();
}
public int X { get { var x = ccc.X; return x; } } これならvarでいい まあ変数いらんけど
>>775 それははまだ問題ないだろ。問題は
>>772 の返り値がよくわからないこと。
例えば、こんな例だとvarじゃわけわからない。
もちろん、こんな単純な例だったらいいと思うけど、もっと間に複雑な処理をした場合の話。
int foo() {
var x = ccc.GetHoge();
return x.Count;
}
んで、戻り値を見れば型がわかるから、varでもいいなら、 ↓はどうなんよ。 >ローカル変数で俺が分かればvarで問題ないってのなら、 >じゃ、ローカル変数の変数名は極論で言えば1文字でも可能?
>>780 それならCountが返ってるんだって分かるから
varの型なんていらんと思うけど
>>780 それは名前が適当だからわかんないんだろう。
int NumberOfHoges() {
var hoges = this.GetHoges();
return hoges.Count;
}
みたいなかんじだと、
GetHoges()の型がHoge[]だろうがIList<T>だろうがそんなこと正直どうでもいい
同じことの繰り返しだな int foo() { return ccc.GetHoge().Count; }
>>781 型が分かってもそれが何をするものかは一般に分からない
intが返ってもそれが何の数値かは分からない
変数名は必要だ
変数名で何の数値か分かるならば
intなんていう型情報はいらない
>>783 varにする分、想像しやすいように変数名を充実させましょうっていうのなら、本末転倒だろ
>>786 変数名は充実させるべきだ
変数名は使われるところにずっと付いてくるからな
型名は最初の一回しかでてこない
なんだか分からなくなって型名を探しに戻るなんてのは最悪だ
そして型名を見たところでたいした情報は取ってこれんのだ
>>785 変数名に正確さを求めるか、型名に正確さを求めるかの二者択一を考えるのなら、
人によって命名に差がなく、確実に命名される厳密な型指定を選択するほうが論理的だろ
>>786 この程度、普通の「充実度」だと思うけど。
変数名から類推できる型を書かなくていいようにするのがvar
>>787 つまり厳密に型指定をしたほうが、より親切だが、
ローカル変数程度であれば、それぐらい妥協してもいいということだな。
varは型の厳密さを損なうわけじゃないんだが…
妥協してもいいというより 書かない方がノイズが少なくなってソースがすっきりし 可読性が上がる
>ローカル変数程度であれば、それぐらい妥協してもいいということだな。 メンバーやメソッドにvarを許さなかったのはその辺の判断があるんだろう。 varをpublicにした場合は予期しない型が外部に出てしまうからなぁ。 ローカル変数は特定の型にキャストされないと外に出れない。
>>792 varのほうがノイズが多くなるだろ
ぱっと目ではわかんないんだから
>>794 わかる必要のないところをvarにするんだって言ってるじゃん
>>793 でも
>>792 の言うように書かないほうがノイズが少なくなって可読性が上がるなら、
ローカル以外でも許容すべきだと思うのだが。
>>796 許せるぎりぎりはprivateなメンバーとメソッドあたりまでだと思う。
>>797 なるほど、そのへんまでは、なんとなく理解できるな。
じゃ、積極的にvarを使う理由は、長い型名やクラス名を記述する労力削減?
>>794 型名はたいした情報でもないのに場所をとり
それが何の型かいちいち脳内で検索してしまう
varは意味を取らなくていいので読み飛ばして
変数名という重要な情報にすっとアクセスできる
何で今更varで騒いでるの?馬鹿なの?宗教論争なの? 結局はこういう事で、馬鹿は俺に近づくなって言いたいんだろ。 まともなレベルの人が使うと、可読性も向上し効率的に書けるが 馬鹿にvarを与えると、乱用と意味不明な名前により酷い事になりかねない。
>>796 メソッド名で意味が分かるなら戻り値の型名なんていらんと思う
引数の型はないと静的型言語として崩壊するけど
まぁ、マイクロソフトもvarは構文上で便利なだけって言ってるからな 面倒臭がりさん用
>>801 いや厳密に型がわかる場合のみ推奨でしょ
var i = 1;
var s = "1";
var a = new[] { 0, 1, 2 };
とか。
メソッドの返り値を入れるのには不向き。見た目で分からないから可読性が低い。
>>801 引数の型をvarにしても静的型付けは維持できるよ。
テンプレート関数に書き換えればいいだけだから。
もっともC#のジェネリックではだめだけど。
>>800 そうやって言語仕様が改悪されて、元に戻れなくなるんだろ
ObjectPascalのほうが数倍増しだよ
>>805 その引数にドットを打ったとき
インテリセンスに何を出せばいいんだよ
静的型言語のメリットが完膚なきまでに失われるだろ
>>804 メソッドの戻り値が何かというのは
型じゃなくメソッド名で分かるようにしなきゃダメ
どうせ型なんてたいした情報にならないんだから
型名だけで十分説明できてるなら
変数名も型名と同じになる
そういうこともよくあるけど
その場合は変数名と型名が二重になって無駄
>>807 何も出せないよ。
何も制約のないジェネリック引数に対して何も出せないのと同じ。
>>808 その命名規則が怪しいから確実に命名される型名が必要なんでしょうが
メソッド名で判断可能なら、そもそも型名なんて必要無い
そもそも型なんてIDEでカーソル合わせれば簡単に(以下無限ループ)
>>810 型名の命名規則は明々白々だってわけ?
意味が良く分からん
型名は基本的にはいらないが、newする時、引数の型を指定する時には要る
>>811 ローカルが全部varで、いちいちカーソル併せて確認すんのかよ
意味ねーww
>>812 メソッド名はどんな命名でもエラーにはならんが、
型名は少なくとも元が無ければエラーになるだろ
返り値のあるメソッド名やプロパティ名に、型名が入ってないとエラーになるっていうほど、
メソッド名から返り値が想像できるのならvarでも問題ないと思うが。
>>813 型名だって作るときにはどんな名前でもエラーにはならんだろ
そして型名は自分自身のことは分かるが
それがどんな文脈で使われるかは分からない
情報として変数名、メソッド名の方がずっと「それがなんであるか」を表すことが出来る
ほんとに書き手があんぽんたんでメソッド名に意味分からない名前をつけるなら
型名があると便利だろうが
型名もそいつが考えたんなら何も期待できん
varだと、変数が何かわからないから、初期化方法がわからんよな null、0、空文字、その他、どれで初期化すればいいんだ?
>>815 お前がvarを使ったことがないのが良く分かるよ
>>814 そう主張すればするほど積極的にvarである必然性がないんだよな
だってメソッド名がしっかりしていて、型名があって、変数名がしっかりしているのが理想だろ?
>>818 変数名やメソッド名が雄弁なら
型名なんてノイズにしかならずむしろ邪魔
そんなものをわざわざ手を動かして書くなんて狂気の沙汰だ
>>819 出来ないに決まってるだろ
型推論できねえんだから
>>820 その保証がないから、完全に命名が保証されてる型名が必要なんだろ
>>822 変数名が雄弁じゃないなと思ったら型を書けばいいだろうよ
俺はそんなことはないけどな
あと完全に命名が保証されてるという意味が分からん
意味分からん型名なんていくらでも作れるぞ
右辺を見て左辺を型推論するのがvar、 左辺を見て右辺を型推論するのはnull初期化 なんだから、両方とも型がわかんなかったら推論できるはずがないじゃん。
nullに初期化して後でどんな風に使われるか調べることも出来ないことはないんだよな そこは不便だと思うけど 副作用を前提にしてるからあんまいいコーディングじゃないことも確か
>>824 少なくともClass名などとして存在してるってことだよ
存在しない型名を書けばエラーになる
それに自分が書いて自分だけが理解できればいいなら、
どんな命名だっていいだろ。変数もメソッドも。
他人が見たり、時間が経っても
少しでも可読できるよう、多くの表現があったほうがいいと言ってるわけで。
>>824 じゃ、すべてObject型にして、メソッドだけみてキャストさせりゃいいじゃん
>>815 右辺脳というかある程度経験してよさがわかってないと伝わらない
だろうけど、型付 null は default(T) でいける。
>>827 存在しない型名を書くとエラーになるということに
どんなメリットがあるのか
どんな可読性を高める仕掛けがあるのかわかんねっての
可読性が高いソースコードって言うのは
すいすい読めてすいすい意味が取れるコードなわけで
変数名が雄弁でないとなかなかそうはならないし
変数名が雄弁ならそれより情報として劣る型名は
すいすい読むための邪魔にしかならない
分かりにくいところでは名前付き引数を積極的に使うと
もっと可読性を上げられると思う
だからといって全部を名前付き引数で呼び出したら
可読性は下がるだろ
>>831 DataSetをDateSetと記述してしまってエラーにならなかったら問題だろ
>>831 InteliSenseで、意図しない返値が選択されてしまったとき、
コンパイルエラーになるだろ
>>831 変数名が雄弁かどうかは設計者しだいだが、
どんな雄弁でない変数名でも、確実に最低限の型名が理解できる、
これ重要なんだよね
835 :
768 :2009/02/02(月) 05:10:33
ちょっと離れている間に随分伸びたな。
>>773 極論というなら、もちろんいいよ。現実はi, jくらいしかやらないけど。
>>832 タイプミスは変数名だろうとメソッド名だろうとコンパイル段階ではじかれるだろ
くぐりぬけることもあるかもしれんがそんなん気にするほどの確率じゃない
>>833 変数の型が意図しないものだったら
varだろうとvarじゃなかろうとまずコンパイルエラーになるわ
>>836 >存在しない型名を書くとエラーになるということにどんなメリットがあるのか
存在しない型かいてコンパイルエラーになるメリットないんだろ?
何を言ってるんだ?
>varだろうとvarじゃなかろうとまずコンパイルエラーになるわ
var.GetHash()とか、var.ToString()なら確実にエラーにならず、
型がわからないからclassもわからず、原因究明に苦労するかもな
>>834 型名が最低限かどうかは設計者次第だろうよ
型名には情報を盛り込みにくいしな
型名があるから変数名は短くてもいいやみたいな考えだと
読みにくいソースコードになるだけだ
むしろvarを使って変数名を充実させようと気を配った方がいいように思うね
結局必要な情報を必要なだけ盛り込むのが可読性の高いコードなわけで
情報が多ければいいと思って毎行コメントつけても可読性は下がるばかりだ
コメントがなくてもすいすい読めるのがいいコードだ
同じように型名がなくても意味が分かるのがいいコードなわけだ
いいコードでは型名なんて余計な情報なんだよ
>>838 いや命名方法は個人によって異なるから、その考え方はおかしいな
すべての人に確実にわかる命名方法なんか存在しない
それが存在できるとすれば、言語仕様で規定された組み込み型や、
その上に成り立った型名だろうよ
こういう型の表記が許されれば、結果的にどんどん悪化していく原因になるよ var tmpNo = Code.GetNo() みたいな表示がまかり通って読みにくくて仕方なくなる まだvarがintかstringかなら想像のつきようがあるってもんだが
ごめん、それは書いてあってもわからん
842 :
デフォルトの名無しさん :2009/02/02(月) 15:52:33
.NETで.NET命名規則以外の命名法を使っている人間が存在していたことに驚いた
MSのことか
844 :
デフォルトの名無しさん :2009/02/02(月) 16:03:11
はい
845 :
デフォルトの名無しさん :2009/02/02(月) 16:04:00
純血のハンガリアン人とか
ハンガリアン=ハンガリー人 ハンガリアン人=ハンガリー人人
ハンガリアン=ハンガリーの ハンバリアン人=ハンガリーの人
848 :
デフォルトの名無しさん :2009/02/02(月) 16:30:11
ハンバリアン=ハンバル
SecureStringをまともに使えてる人いる? GUIアプリケーションじゃ結局Stringに渡すことになってSecureでも何でもないんだが・・・ なぜ、String型にIStringインターフェイスを実装しないのかと
どのみちGUIから先は手出ししようが無いからどうしようもない気がする
使ったことないけど、WPFのPasswordBoxというクラスには SecurePasswordというSecureStringで受け渡しするプロパティがあるみたい。
横からちょい質問 GUIはC#で作って、実際の処理を他の言語に任せることは出来ますか?? C++のdllは使える、とかどこかで見たのですが…
できんでもない C++のクラスは直接扱えない
まぁつまりC#を使うならC#オンリーってことですか?? そこらへんのライブラリ拾ってきて(ryってのは無理なんでしょうか
できるできる。 Cとかの単純なDLLならDllImport。自分でクラス化する。 COMクラスならCOM Interop。だいたいそのままC#のクラスになる。 C++クラスライブラリなら、Visual C++ (C++/CLI)でC#向けにラッパークラスを作る。
>>852 C++/CLIで、アンマネージのC++DLLと.NETのDLLを混ぜて使える
だから、C#でGUIを作って、C++/CLIで結合したらいいと思うよ
DllImportでThisCallをサポートしているので、 ファクトリと開放用のstaticメソッドを用意すればC++のクラスの呼び出しも不可能ではない。 が正直おすすめしない。
859 :
255 :2009/02/02(月) 20:16:58
参考になりました、感謝しております とりあえずGUIはC#で作ることにします
C#で統合アーカイバDLLやなんかを呼ぶサンプルが、ネット上にゴロゴロあるよ。
ドトネトでDebugViewで見られるデバッグ出力をするのはどうしたらいい? 要するにWin32のOutputDebugString相当のものってことですが。
>>861 System.Diagnostics.Debug.WriteLine かな? 知らんが。
Traceじゃないの?
>>713 Linq to SQLは廃止というかそもそも本筋じゃない。
Entriesが本命だ。
それに暗黙的な型指定じゃなく、厳密な型指定だ。
厳密だから省ける。OK?
Entries って初めて聞いた
おまいらvarごときでうだうだ言ってたらF#なんかつかえんぞ
>>864 varは暗黙的な型指定だよ 言葉としては
厳密に型を推論できるから暗黙に指定できる
868 :
861 :2009/02/02(月) 23:48:01
…今晩もやるの?もう放置でいいよ正直 右辺の抽象度がぐっと上がって var もついた上でどううまく使うか とかなら面白いけど、その前で止まってんだもんつまんねぇ
>>868 System.Diagnostics.Debugger.Logとかじかに使うと、
Release版のモジュールにも入ったままになるから、
おとなしくTrace/Debugのオブジェクトを使っておけ。
>>870 うんだからあえて「そのように」したいのよ。
特殊事情って奴だね。
っていうか、命令口調クン、いい加減そういう言葉遣い止めた方がいいと思うよw
だまれ若造
874 :
デフォルトの名無しさん :2009/02/03(火) 00:26:49
UI関連の質問です。 フォームのKeyPreviewをtrueにしてキーイベントをメインのフォーム側で一括管理してるのですが、 入力中のキーダウンまで拾ってしまう(一部DataGridとかは拾わずに済むが)ので 入力中の場合はキーダウンさせない様にしたいのです。 TextBoxは条件によって、幾つ生成されるか分からない状況な上、FlexGrid等もあるので、 1.フォームに含まれるGUIオブジェクト全てを列挙し、 2.その各々に対して入力中か否かの判定をする 上記を実現する方法を教えてくださいまし
処理したいキーって何? ProcessDialogKey とかで何とかならんの?
ユーザーによります。 aに割り当てたい方もいらっしゃるでしょうし、 F1に割り当てたい方もいると思うので・・・ その割り当ては設定次第なんです。 ProcessDialogKeyちょっと調べてみます。
キーフォーカスならActiveControlプロパティでとれるが
ホットキーとか使えよ・・・
皆様レスありがとうございます。
>>877 やってみます。
>>878 ユーザーがどんなキーでも好きにカスタマイズ出来る事が
条件なので・・・自分もそう思うんですけどね・・・
だったら入力中でも効かなきゃまずいだろw 入力中とフォームでキーを処理するときの違いは?
尋ねられたこと以外は書き込まないでください。ウザいだけです。
Debug/TraceでもDefaultTraceListenerからDebugger.Logが呼ばれるのにな。 直接呼ぶと後から出力の制御も出来んし、停止も出来ないのに まぁ特殊事情(笑)なら仕方ないか
聞いてる内容以上の事に突っ込まれたらウザいよねw こっちはそういう仕様でやらなきゃいけねーんだっつうw おまいさんのすばらしい設計思想は解ったから、黙ってろって感じw
>>880 いや、入力中は反応しない事も条件です。
入力出来なかったら意味無いので
入力中は普通に文字を打てる事
それ以外の時はキーに割り当てた機能・関数が実行される事
です。
「入力中」の定義があいまいなんだよ。 ようするに、TextBox とかにフォーカスがあるときは Form でキーを処理しないようにしたい、ってこと? なら、ActiveControl でフォーカスを持ってるコントロールを取得して、種類ごとに処理する、しない、 ってやるしかないんじゃない? 列挙は Controls。必要なさげだけど。
wをつける奴は基地外が多いな
>>885 すいません。
余り詳しく書くとアレなので・・・
>ようするに、TextBox とかにフォーカスがあるときは Form でキーを処理しないようにしたい、ってこと?
ちょっとだけ違います。
フォーカスが有っても入力中とは限らないのでフォーカスを持ってたら
という条件ではなく、入力中か否かにしたいのです。
今思いつきました>特殊事情
>>888 なんじゃそりゃ。。。
「入力中」ってなんなんだ?
もしかしてIMEでの入力の話?
だから、入力中の定義は? [A] に機能が割り振られてたとして、TextBox で A が押下されたらどうなんの? [Enter] に機能が割り振られたとして、Button で Enter が押下されたらどうなんの? [Space] に機能が割り振られたとして、CheckButton で Space が押下されたらどうなんの? 全部、入力中といえば入力中なんだよ。
>>890 いいえ、IMEで入力してるとは限らないです。
糞SIerはとっとと淘汰されないかね。
あまりプログラム板の住人を敵に回さないほうがいい……!
釣りっぽくなってきたな。 寝る。
>[A] に機能が割り振られてたとして、TextBox で A が押下されたらどうなんの? Aが入力されます。 >[Enter] に機能が割り振られたとして、Button で Enter が押下されたらどうなんの? Enterに割り当てられた機能が動きます。 >[Space] に機能が割り振られたとして、CheckButton で Space が押下されたらどうなんの? Spaceに割り当てられた機能が動きます。 >全部、入力中といえば入力中なんだよ。 確かにそうですね、編集中か否かと言った方が良かったですね。
それ、言い換えただけだからw 定義を述べよwww
なんか妙なことで絡んでる奴がいるみたいだけど、 俺が「特殊事情」と書いたのをおちょくってる(まあ、つもり)の奴って DebugViewが何かわかって言ってるのかね。 知ってれば何がしたいかだいたい察しが付くと思うんだが。
あまりプログラム板の住人を敵に回さないほうがいい……!
どう見ても釣りだな。そうでないとしたら頭が高卒レベル
GUI上のTextBox、DataGrid等入力可能なGUIオブジェクトが入力カーソルが出て入力待ち状態なら編集中 それ以外はキー機能が生きている状態です。
あまりプログラム板の住人を敵に回さないほうがいい……!
で、編集の定義は?w そんなのを示すプロパティやらメッセージはないから、コントロールの種類ごとにフォーカスを 持ってるかどうかでしか判断できないだろ。
>>902 あまりプログラム板の住人を敵に回さないほうがいい……!
あまりプログラム板の住人を敵に回さないほうがいい……!
あまりプログラム板の住人を敵に回さないほうがいい……!
あまりプログラム板の住人を敵に回さないほうがいい……!
あまりプログラム板の住人を敵に回さないほうがいい……!
こんな感じで要件の定義ができない人間がごろごろいるから困る
Cursor プロパティが I ビームかどうかで判定できる?
「編集中」(笑)とマウスカーソルの位置は関係ないだろ。
いや、だから余り詳しく言えないんですってば・・・ だから、それを言わなくても済む様に ・フォームに含まれるGUIオブジェクト全てを列挙の仕方と ・その各々に対して入力中か否かの判定をする って自分に最低限必要な部分だけ抜きだして聞いたのに
入力中(笑) 求める物がそれなら既に出てるだろ
わかる範囲で回答出てんじゃん。 バカはくだすれ行けよ・・・
いいえ、あなたが言っているのは必要最低限未満なんですよ。
散々定義定義って騒ぐから出来るのかと思ったら
結局出来ないし・・・
>>880 で要件勝手に邪推して効かなきゃまずいだろ
とかアホかと・・・
>>881 の言った通り質問された事だけに答えろよ
別に定義知らんでも「その判定はできません」で済んだ話だろ
馬鹿だなぁ
定義によってはできるから。 定義が明確じゃないものをできるともできないとも言えん。
おちょくってる人間は一人じゃないな。 偉そうなことをいってくる奴はおだてて使わなきゃ。
よく分からんのだけど、TextBoxにフォーカスがあって入力中じゃない場合ってどんなとき?
普通に
>>885 で解決していそうな気がするけど
「入力中」 言葉に振り回されてるね プログラムで出来ることは、フォーカスの有り無しの判定しかない!って言われてるのに まだ意味不明な要求を押し付けてくるひどい石頭だ。
ContextMenuStripって、配置すると、フォームの上部に『ここに入力』って表示されて、 項目の入力ができますよね? それが『ContextMenuStrip』しか表示されなくなって、編集できなくなってしまいました。 すでに配置した物も全てです。(Itemsのコレクションからは編集できます) 何が原因でしょうか?
919 :
918 :2009/02/03(火) 08:44:52
すいません、フォームがでかすぎて表示し切れてないだけでした。 スクロールバーが表示されない大きさにしたら表示されました。
>>920 見るべきところはそこじゃないでしょ。
Label1つだけ貼ってあって、そこにマウスジェスチャからの入力が表示されるなら
デモとしては十分だと思うけど。
バカスw
なるほど ここから機能付け足すのはどうやるんですか? →なら右キーが押されるとか
ググれば一発
なんてぐぐるの
>>923 →が出力されてるコードを書き換えて右キーが押されたのと同じ挙動になるようにする。
起動中のアプリに右キーを送る方法については
>>924
すごい疑問なんだけどC#って名前、なんで#なんかMSは使ったんだろう? 書式記号なんか名称に使うなよって思うんだけど。
Cよりちょっと上って意味だろ #は半音高い。
♯ だっけ? #だっけ?
++ ++
デリゲートってメソッドを参照するためのポインタって事はわかるんですが たとえば、どんなケースの時にこれを使用しますか? ちょっと使い方がわからない・・・
イベント 高階関数
C#の勉強をしてます。C#を用いたWinアプリの作り方を、実践的に学ぼうとしています。そこで質問です。サンプルコードを多く見たいと思います。以下の条件に合致するコードを入手できるサイトをご紹介ください。
・C#で書かれたWinアプリで、
・C#のソースコード付き
・無料
・アプリの種類は問いません。GUI/CUIいずれも可
・コンパクトなアプリが良いです
http://q.hatena.ne.jp/1134005329にて紹介されていた 「SDJEditor」はいい感じでしたが、規模として大きすぎました。初心者がざっと眺めるには、ちょっとつらいライン数です。これよりは小さいアプリが希望です。
C++系はサンプルコードが多く見つかりました。C#は少ないようです。プログラミングのチュートリアル的なページも見つけましたが、さほど多くありません。
以上、よろしくお願いします。
CodePlexやCodeProjectで探せ
例えばどんなのがありますか、ちょっと貼ってもらえませんか
そういうの自分で探せない(探そうとしない)と、この先つらいよ?
じゃあ雑誌とかでないですか、本屋いってくるので 英語はむりです
CodePlexなんかほとんどC#でかなりの数があるから好きなの漁れ ほとんど英語圏の人が書いたコードだけどどっちみちソースコードは英語だろ 一緒だ
>>937 世の中にはいい質問と悪い質問があって君のは悪い質問かな
自分で探しましょう
結局はそれが自分のためです
英語わからないもんはわからないです
英語がわからないPGは一生三流
じゃ日本語の雑誌でコード載ってるアプリないですか
クラスの名前やメンバの名前に使われてる英語もわからないの? 英語のwebの情報読むにはそれくらいで十分なんだけどな 大変だね
中学生なんです、読めないもんは読めないんです
まあ中学生じゃこの程度の頭だよな。
ありました
C++みたいだけどC#使えばそれこそ一瞬で作れるなこんなの
>>952 どういった印刷をしたいかによるが、ちょろいものなら
PageSetupDialogからこつこつ書いてゆくことも出来る。
印刷は「レポーティング機能の使用」のとこを見る
>>952 Pro以上にはCrystal Reportsが付いてる。
そのページの「レポーティング機能の使用」にある「Crystal Reports」がこれ
956 :
952 :2009/02/03(火) 17:30:07
>>949 こんな糞情報よくサイトに載せる気になったな・・・
MOONGIFT内にもC#とか.NETのカテゴリに幾つか紹介してあるじゃないか。 その辺見つけれないって、プログラミング以前の問題じゃないか?
インターネットであることを抜きにしても相当マズいよな
ここまで厳ついと料理のタイマーとしては使いたくないなw
ちうか中学生なら自分で好き勝手コード書くレベルならいいんだけど 実践的なとかなると志はすばらしいけど、目標高すぎだからその前に 普通に学校の勉強がんばりなさい。順番ってものがあるので
タイマーを作るにしたって三権分立や剣道の知識が求められるし。
滑ってるよ
ラーメンタイマーくらいみんな作ったことあるだろうけどさぁ 公開するとなりゃ、もそっと凝った感じで作るんじゃないか
最強ラーメンタイマー決定戦でもやろうか
MYベンディングマシンが最強
冷蔵庫にマグネットで貼り付けてあるキッチンタイマー以上の利点が出せるかなあ
>>968 吸盤式のが買って数日で落下→一発で故障して俺涙目
なので据え置き式をお勧めしたい
飯時になると突然最前面に表示され、3分カウントして勝手に消えるやつでも作るか。
毎食カップラーメンなのか・・・
三権分立は小学校だよな
パンデクテン方式ぐらい知ってないと継承を理解するのは不可能だしな
パントマイム方式なら分かるのですが。
,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 / ヽ/ ヽ l l l l l l ,. ‐'' ̄ "'' 、 ,,. --‐┴─-- 、 / ̄ "'' -、 / ,.-‐''"´ \ _/ ヽ l / ヽ l l / ● l l ヽ l (_人__ノ ● ヽ / そんな事言われても ,,>-‐| ´´ | / , , ,. ‐'' ̄ "' -、/ ウチ ポン・デ・ライオンやし / l ヽ_/ / ゙ヽ l ` 、 l l l ,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 l l, / ヽ / ヽ, / ヽ、,, l l l,,,___,,,/ "'''l l l ヽ /ヽ / ヽ,___,,,/ ヽ,,___,,,/ / | / |
ウンコがポンと出るライオンなわけか。
面白いと思って書いたのならそういうことにしておこう
同じ動作をする関数が入ったx86用とx64用のアンマネージドDLLが二つあって DllImportして使おうとしてるんですけど、 C#プログラムがx86環境下で実行された時とx64環境下の時で 呼び出す関数を切り替えるにはどうすればいいですか? //x86のときはこっちが呼ばれるようにしたい [DllImport("Func32.dll")] public extern static int Func(ulong x, ulong y, int z); //x64のときはこっちが呼ばれるようにしたい [DllImport("Func64.dll")] public extern static int Func(ulong x, ulong y, int z);
あ、LoadLibrary、GetProcAddress、Marshal.GetDelegateForFunctionPointerでできるのかな? とすると自身が実行中の環境がx86かx64かの検出はどうすればいいんだろうか。
うーん、IntPtr.Sizeで判定してもいいのかな。
LoadLibraryかDLL名同じにする
DLL 名が同じで、それぞれちゃんとした場所に置いてあれば、自動的に ファイルリダイレクションが効くんかね?
984 :
デフォルトの名無しさん :2009/02/04(水) 06:55:10
C#でのExcel操作について質問です。 特定のセルにマイナスの数値が入力されたら、そのセルのフォントカラーを赤にしたいのですが、 こういう処理をするにはどのようなコードを書けばよいのでしょうか?
効くけどシステムディレクトリだからな あんまり配置したくなかろう 起動時にIntPtr.Sizeで判定してPATHに追加してやるという手もある
>>985 確かマニフェスト書けば XP 以降ローカルに配置できな
かったっけ。SxS に配置するという手もあるけど。
今晩あたり実験してみるかな…。
が、まぁ x64 OS 使っている人ならわかると思うけど
現状なら配置を2重化したほうがいい。どっちでも
動かせるように。
わざわざ置き場所まで別れてるし。
public static int Func( ulong x, ulong y, int z ) { if( IntPtr.Size == 4 ) { return Func32( x, y, z ); } else { return Func64( x, y, z ); } } [DllImport("Func32.dll", EntryPoint ="Func" )] private extern static int Func32(ulong x, ulong y, int z); [DllImport("Func64.dll", EntryPoint ="Func" )] private extern static int Func64(ulong x, ulong y, int z); こんな感じならMSのライブラリもやってるね
>984 普通は条件付き書式を使いそうだけど。
プログラマにとって他人に知識を与えることは、 自分自身の存在意義の一つが無くなることだから、 そう簡単に知識を教えたくないってのが本心にあるんだろ 実際の創造物を合作であったり、披露すると素性がバレルから難しいしな。
またキチガイが来ましたよ
でも一理あるな
教えてくんが逆ギレするための理屈にしか見えん 埋め
どの条件を満たせば喜んで教えてくれるんだい?
いきなり教えてクン発動かよw 教えてクン養成マニュアルでも読んでいっそプロを目指せ
条件を聞いただけなのに教えて君扱いなのがイタイ
教えてくんでググれば分かる程度の条件を質問してくるから教えてくんなんだろ
>984 書式に #,###;[赤]"-"#,### とでも設定すればいいんじゃないか?
_.. ,,.-'ヽ ヽ "゙ー-、、 / : :! i 、 :. ヽヽ_,,.....、,,,....._;/ ,;' ;,.! i., ..;;;ヽ ヾ ,,;_ , / ヾ_:::,:' -,ノ ヾ;. , , 、;, ;; (:::) , ... 、, (:::);: `;. C) ,; ' 黙れ小僧! ,;' '.、 -‐-ノ ,;'、 ;' ;: ;: ';;
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。