ふらっとC#,C♯,C#(初心者用) Part28
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part27
http://pc11.2ch.net/test/read.cgi/tech/1208248879/
4 :
デフォルトの名無しさん :2008/05/25(日) 13:10:56
5 :
デフォルトの名無しさん :2008/05/25(日) 13:22:09
Consol.Out.Write("
>>1 乙");
勉強で、あるフォルダ配下の.txtファイルを一覧するアプリを作成しています。
DataGridViewにDataSet1をバインドして、
そのDataSet1はファイルリストのxmlを読み込むという風にしたいのですが、
private void Form1_Load(object sender, EventArgs e) {
this.dataSet1.ReadXml(@"C:¥test.xml");
}
としてもDataGridViewには何も反映されません。
DataGridView.DataBind()のようなメソッドもないようですが、
どのようにバインドすればよいでしょうか。
ちなみにxmlの形式は以下のようなものです。
<?xml version="1.0" ?>
- <ContentsInfomation xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd="
http://www.w3.org/2001/XMLSchema ">
<path>C:¥Documents and Settings¥Administrator¥My Documents</path>
<fileName>test.txt</fileName>
</ContentsInfomation>
7 :
6 :2008/05/25(日) 17:36:07
自己解決(?)しました。 ツールボックスからフォームにD&Dしたdataset1ではなくて、 コード中でDataSetをnewしてバインドしたら表示されました。 何かのプロパティが作用してたのかな…。
多分DataGridViewのDataMember つまりどのテーブル表示すればいいのか分からんと
9 :
デフォルトの名無しさん :2008/05/26(月) 12:57:54
textBoxにサウンドの再生位置を表示するため、 Timer_Tickで再生位置取得、textBoxに表示としているんですが、 こういう一定時間ごとに処理ってTimerでやっていいもんなのでしょうか。 他にこういった処理をするためのものってありますか。
Timerがまさにその用途だろ
再生位置表示みたいな割にいい加減な用途なら問題なし。 厳密な一定間隔ごとにサウンドを再生するといった用途で使うなら音がずれまくるだろうな。
そのような場合はどうするのですか?
もっと高精度なタイマーを使う
14 :
デフォルトの名無しさん :2008/05/26(月) 15:01:16
>>10-11 ありがとうございます。
こういった場合Timer使わずにこうしたほうがいいとか、
あるのかなと思って聞いてみました。
問題ないようでよかったです。
タイマの精度ってVistaなりEFI搭載PCで改善されたってことはないのかね。 最新環境でもいまだに55msなの?
System.Windows.Timers.Timer使わなきゃいいだけだし…
すみません、お聞きしたいのですが C#でLANの他端末の電源ONは出来たのですが 遠隔でログオンって出来るんでしょうか? 自分なりにググってみたのですが判りません・・・ お願いします
18 :
17 :2008/05/26(月) 21:16:48
すみません VS2005EE&Win2000です
19 :
デフォルトの名無しさん :2008/05/27(火) 11:25:30
private AxWMPLib.AxWindowsMediaPlayer mediaPlayer = new AxWMPLib.AxWindowsMediaPlayer(); private void Form1_Load(object sender, EventArgs e) { mediaPlayer.settings.autoStart = true; mediaPlayer.URL = "C:\\love.mp3"; }
20 :
デフォルトの名無しさん :2008/05/27(火) 11:26:27
すいません。
>>19 は書き込みミスです。
VC#2005EE XP
WMP使って音楽を再生したいのですが、
ActiveX コントロールのインスタンスが作成されないようで、
autoStartのところで
「InvalidActiveXStateException はハンドルされませんでした」
とエラーが出てしまいます。
何が問題なのでしょうか。
private AxWMPLib.AxWindowsMediaPlayer mediaPlayer = new AxWMPLib.AxWindowsMediaPlayer();
private void Form1_Load(object sender, EventArgs e)
{
mediaPlayer.settings.autoStart = true;
mediaPlayer.URL = "C:\\love.mp3";
}
ControlsにAddしてる?
22 :
デフォルトの名無しさん :2008/05/27(火) 12:29:08
>>21 FormのDesigner.csってのに書いて処理できました。
ありがとうございました。
>>22 *.Designer.csを自分でいじらない。
ツールボックスにWindowsMediaPlayerを追加しておいて、普通のコントロールと同様にフォームに追加し、
コードの生成はVC#にお任せにするのが無難だよ。
(ツールボックスのコンテキストメニューでアイテムの選択→COMコンポーネント)
コードで書くにしてもコンストラクタとかに書けばいいんでね? てかツールボックスから書かずにAxWMPLibのアセンブリは追加したんだろうか。
スクリーンセーバを作っています。 Bitmapオブジェクトを作り、そこに色々と描画し、Paintイベントが来たら(Refreshをしたら)をそれをフォームに描画、という手順を踏んでいるのですが、 どうも遅いようです。これは改善できないのでしょうか。 LockBitsを使っているので、Bitmapオブジェクトの代わりに何か使う、ということは出来ないみたいなのですが、、、
GDIで描画
Form上でcalc.exeを起動させたいんですけど どうすればいいんでしょうか 再度ググって来ますダイブ!!
>>20 usingは WMPLib; ?
C#2008で柱名い
いやアセンブリ参照したあとならusingはクリックでVSが補完してくれる。
>>30 >”windows”は名前空間”System”に存在しません、
windowsの先頭は大文字
フォームデザイナでフォーム上に追加したコントロールのDisposeメソッドは、 どのような仕組みで呼ばれるのでしょうか。 ***.Designer.csを見ても、コントロールのDisposeメソッドを呼び出している部分は見つかりません。 何らかのタイミングで自動的に呼ばれるのであれば、自作のカスタムコントロール上に配置した 子コントロールのDisposeメソッドも、実は明示的に呼ばなくても大丈夫?
親がDisposeされるときについでにDisposeされる
>>31 ありがとうございます。
書き込みはちょっと間違いがあるかもしれません
サイトののコードをコピペしても駄目でした
System.Windows.Forms.dllとか参照に追加
>>35 System.Windows.Formsを追加したらちゃんとコンパイルできました!ありがとうございます。
本当にくだらない質問してすみませんでした。
37 :
デフォルトの名無しさん :2008/05/28(水) 08:20:34
>>27 Processってコンポーネント貼り付けて
Process.Start(”calc.exe”);でスタートだってよ
C#で配列は Data[4,4] Data[4][4] 2通り使えますよね int[][] Data = new int[4][4]; この宣言方法ではエラーになります Javaのように1発で宣言する方法ないですか?
追加 Data[4][4] こちらの方式を使う場合の話です
ありません
そうなんですか 残念!
せっかくだからラムダ式を使って Array.New(4,4, () => new Foo()) こんな感じのを作ればいいんだろうけどintだと初期値いらんな
>>38 それなら[,]でいいと思うが一応。
int[][] Data = new int[4][] {
new int[4],
new int[4],
new int[4],
new int[4],
}};
もしジャグ配列とただの多次元配列の区別が付いていないなら、勉強し直すこと。
>>43 わかりました
やはり通常 ジャグ配列より多次元配列の方が効率よくて推奨なんですかね
いいや全然 明らかにジャグ推奨
>>44 おおざっぱに言ってしまえば、多次元配列の中身は1次元配列といっしょだから。
添え字の書き方が特殊なだけで。
>>45-46 そうですか ジャグでもいいんですか
Javaに流用しやすいのがいいですね
ジャグより多次元の方が早いだろ
一番下の添え字だけ変えていくならジャグの方が速いよ バラバラなら多次元の方が速いこともある
50 :
デフォルトの名無しさん :2008/05/28(水) 22:52:51
>>37 「=」押した瞬間 Pgで事前に指定(フォーカスのある)したテキストボックスに
ポピー&ペーストできる方法ありませんかね・・・
ググッっはいるんですけど ^^;
51 :
デフォルトの名無しさん :2008/05/28(水) 22:57:09
>>50 電卓にCtrl+cで値をコピーできるから
クリップボード参照してテキストボックスに入力してみては?
>>51 確かにそれはいえてるんだけど
かっこよさの観点から「=」入れると
かっこいいいいいいいい!
俺もてもての展開を気体
くーるまーにーポッピー
>>51 確かにそれはいえてるんだけど
かっこよさの観点から「=」を叩いた瞬間テキストボックス
入るとかっこいいいいいいいい!
ジョジョふうにゆうと
CooooooooooooooooL
>>53 コピーな
55 :
デフォルトの名無しさん :2008/05/28(水) 23:51:21
>>52 出来るかどうか分からんけど
電卓の上に透明なウィンドウ重ねて
マウスやキボドの入力をそのまま電卓に送って
=押されたときだけクリックのあとにCtrl+cを送って、貼り付けるとか
クリップボード壊しちゃ駄目かな? WM_COPY使えたりしないか
ファイルで1バイト(8 bit)の読み込みは ReadByte() で出来ますが 1ワード(16 bit)の読み込みはどうすればいいですか? ReadShort() というのはなさそうですが
Read()
ReadByte() + 256 * ReadByte()
ありがとうございます やってみます
BinaryReaderを使え
BinaryReader微妙に使いにくいんだよね とりあえずエンディアン指定ぐらいしたいなぁ
>>62 あとReadStruct()とかあるといいよな。
2つのバイト列が一致しているか比較したい場合にはどうしたら良いのでしょうか? byte[] b1とb2の中身が同じかどうか調べたいのです。 ==やEqualsだと判別できないようです。 一回、Base64で文字列にして比較するか、 foreachでぐるぐる回しながら1バイトづつ比較するのでしょうか?
65 :
64 :2008/05/29(木) 17:02:18
Enumerable.SequenceEqualだな3.5的に
>>66 まじっすか、3.5はいろいろありますねぇ。
3.5が標準で搭載されるように早くならないかなぁ。
オレなんか、C#3.0からもう戻れない状態だw
LINQだけ抜き出して.NET 2.0にくっつければいいんだろ 誰かLINQと互換性のあるライブラリとか作ってないの
拡張メソッドが記述できない時点でほとんど意味は無いと思うが…
.NET 2.0が対象でもC#3.0は使えるだろ LINQがないだけで
拡張メソッドは無理になくてもいいかな、匿名クラスとラムダ式ができないと発狂するかも
>>69 MONOのSystem.Core.dll
>>70 自前でExtensionAttribute宣言すればいいじゃない。
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
class ExtensionAttribute : Attribute { }
VS2008で.NET Compact Framework 2.0、ターゲットをCEで エミュレータ環境にてC#でのプログラミングをしています。 System.Windows.Forms.ControlクラスのFontプロパティに Arai と Tahoma 以外のフォントを指定する方法を御存知の方は いらっしゃいませんか? Form や Label、TextBox に MS明朝やゴシックなどを指定 したいのですが、フォント選択のダイアログには Arai と Tahoma しか表示されず、またコンストラクタ内(InitializeComponentメソッド 内、または同メソッド実行後に)に下記のような指定をしても、 デフォルト(Arai, 10pt)のままです。 this.Font = new System.Drawing.Font("MS ゴシック", 9F, System.Drawing.FontStyle.Regular); プログラム自体が原因ではなく、他に原因(プロジェクトの設定等) があるのかも分からない状態です。 よろしくお願いいたします。
とりあえずInstalledFontCollectionでフォントファミリを列挙してみたらどうだろう
77 :
75 :2008/05/30(金) 12:11:42
即レス、ありがとうございます。 InstalledFontCollection でフォントファミリを列挙してみたところ、 "Courier New,MS UI Gothic,Tahoma,MS ゴシック,MS Pゴシック"の フォントを確認できました。 しかし、フォントダイアログに表示されていた"Arai"が一覧にありません。 デバッグで確認した結果、"Arai" を指定(というか、フォントファミリの 一覧にないフォントを指定)すると、"MS Pゴシック"が使用される事が 分かりました。 しかし、これ以上は分かりません。今はエミュレータですが、このプロ グラムを動作させるCEには "MS 明朝" がサポートされているしで、 何が何だか分からなくなってしまいました(´-`;)
Arialじゃないのか?
>75が新井さんで自作フォントなんじゃね?とか言ってみる
80 :
75 :2008/05/30(金) 13:25:45
おっと!>78 の指摘通り、Arialですw
昔、PGについて右も左も判らない頃に先輩から「このフォントは
ヘルメットのAraiが作ったんだよ」と言われ、ヘルメットのロゴと字体が
にていたので、綴りを確認しないまま、そのままAraiに脳内変換。
その後、後輩に指摘されるまで、あらゆるところでずっと使っていました。
参考:アライヘルメット(左上のロゴを参照)
http://www.arai.co.jp/jpn/top.html …未だトラウマな件はさておき、本題について誰か御存知ないですか?
81 :
75 :2008/05/30(金) 15:58:09
自己レスです。 フォント選択のダイアログには Arial と Tahoma しか表示 されなかった件について、ダイアログに「すべてのフォント を表示」のチェックボックスにチェックを入れたら表示され たので指定する事ができました。 ただし、MS明朝を指定してもエミュレータ上ではゴシック に置き換えられて表示されるので、CEエミュレータの問題 と思われますので、質問をWindowsCEプログラミングスレ に移動して続けたいと思います。 レス頂いた方々、ありがとうございました。(´-`)ノシ
.Net FrameworkにSTLでいうdequeってないよね どっかにdequeのいい実装はない?
VS2008でテストを書いているんですがメッセージボックスのテストとかってどう書けばいいんでしょうか
日本語でおk
>>82 それこそSTL見ればいいんじゃね? あとJavaとか
自分で書くのがめんどくさいんだよ いいよもう自分で書くよ
ボタンを押したらメッセージボックスが出てきてOKを押したときのテストとか?を書きたい 何も考えずButton_Clickをテストから呼んだら普通にメッセージボックスが表示されたorz OKとかCancelでテストを書きたいんだけどテストコード上どう書けばいいのやら・・・
>>87 だから日本語でおk。
エスパーするに、メッセージボックスで押されたボタンを判定したいということか?
俺的にエスパーするとフォーム上にボタンを配置して そのボタンを押せばメッセージボックスを出したいと言うことかな?
>>82 Wintellect's Power Collections
プログラミングMicrosoft .NET Framework 2版で紹介されている。
メッセージボックスで選んだボタンによる分岐などのテストだろ… メッセージ送ったら何とかならんかったっけかな?
メッセージボックスで押されたボタンを判定したいなら、MessageBox.Show()の戻り値を見ればいい。 DialogResult result = MessageBox.Show(); // メッセージボックスが閉じると、resultにOKとかCancelが入る if (result == DialogResult.OK) { ... } else if (result == DialogResult.Cancel) { ... }
いやそういうことじゃないと思うんだよね…
アセンブリが厳密署名をされているかどうか、確認する方法って、 バイナリエディタで書き換えてみる以外にあるでしょうか? 署名無し、 遅延署名の公開鍵のみで署名 秘密鍵で完全署名 これらの状態を出来るだけ簡単に判別したいのです。 真ん中のは起動できないので、まぁ、分かるような気もしますが、 厳密署名有と無しを簡単に見分ける方法はあるでしょうか?
リフレクター ILDASM VSで参照 確かに不便だと思う
そういうユーティリティ作ればいいんじゃね? 指定ファイルをLoadFromしてGetName()表示するようなの
98 :
95 :2008/05/30(金) 21:15:37
皆さんどうも有り難うございます。 確かに、ディスアセンブラみたいので見れば、PublicKeyTokenの値が見えますね。 難読化ばかりに興味がいっていて、気づきませんでした。 どうも有り難うございました。
99 :
デフォルトの名無しさん :2008/05/30(金) 21:26:15
C#で指定した時間だけ処理を停止させるのってなんでしたっけ? 調べてもでてこないのでおしえてください
Thread.Sleep
>>99 「c# 停止」で出てきたが、電話帳でも調べたのか?
「C# 指定した時間だけ処理を停止させる」で検索してたんだろ
103 :
デフォルトの名無しさん :2008/05/31(土) 00:03:03
>88,89,92 メッセージボックスの「ボタンクリック」をテストコードに書きたいとです ボタンクリック処理の中でメッセージボックスが出るんだけどそのたびにテストが止まるから まぁメッセージボックスが出るたびに手動でクリックしていけばいいんだろうけど・・・
>>103 Button.PerformClick呼ぶ。
むちゃゆうなw
プログラミングって論理的思考も必要だけど、 理路整然と説明できる力も必要だよね。 色んな解釈が出来ないように正確にコードを書いていくんだ。
フォームデザイナで作られるリソースと、 リソースデザイナで追加したリソースとの共存って出来なかったのかなあ。 もしくは、フォームデザイナで追加出来る、 バイナリデーターの単純なコンテナがあればいいのに。
共存したところで別に意味ないんでないか? 別々に呼び出して一緒に使えばいいだけで
カスタムコントロール作った時に、 コントロールのresxに、固有のビットマップなんかを含めたくなるな。 Resources.resxに入れてるけど、ちとプログラムのモジュール性が下がる。
なるほどね
参照型のフィールドを明示的に初期化しなかった場合、初期値がnullになってたんですが これは言語規格で決められてるのですか?
はい。
変数は0、参照はnull、stringもnull、配列もnull
114 :
デフォルトの名無しさん :2008/05/31(土) 23:11:50
すいません!どなたかご教授願います C♯から、VBAで記述されたプログラムを呼び出したいのですが どうすればよいのでしょうか? よろしくおねがいします
115 :
111 :2008/05/31(土) 23:13:21
>>114 そのVBAはExcelやWordのもの?
環境によっていろいろ違うから、
VBSやVB6のプログラムなどとの勘違いの可能性も含めてもう少し具体的に。
117 :
114 :2008/05/31(土) 23:23:05
>>116 ありがとうございます!
VBAはAccess上で記述されたものです。
C/C++のsize_tに相当する型は、C#では何ですか?
uint
UIntPtrだな
123 :
114 :2008/06/01(日) 00:09:48
124 :
デフォルトの名無しさん :2008/06/01(日) 01:22:00
初歩的な質問ですみません C#にポインタはないんですか?
あるよ
unsafe{ //ここでポインタをご自由に }
オプションでunsafeを許可するのも忘れずに
>>124 ふうん。すごいね(棒)。ネット知識(笑)?
確かunsafeの実装は必須じゃないんだっけ
クラスにすればいい。 .NETの構造体はプリミティブな内容を表す以外には使わないことになってる。
133 :
デフォルトの名無しさん :2008/06/01(日) 12:03:26
C#にクラスってあるんですか? クラスはポインタを使わないんですか?
クラスはデフォルトで参照型 常にポインタをやりとりしてる
ポインタじゃなくて参照だっぜ ポインタごときただのアドレス値などと一緒にしてもらっては困る
どっちかというとポインタ 正しくはハンドル
>133 >C#にクラスってあるんですか? >クラスはポインタを使わないんですか? どっちもないよ。自分で調べようともしない奴にはね。
へーC#ってクラスないんですかー 勉強になりました。 明日先生に言ってみます。
140 :
デフォルトの名無しさん :2008/06/01(日) 13:51:41
教えてください。 今、C#で簡単なデータベースを作っています。 同じフォルダにおいたmdfファイルに接続してあれこれ出入力するアプリです。 困っているのは、F5でデバックして起動している間はデータを保持するのですが、 一旦終了すると、テーブルのデータがすべて消えてしまうのです。 データを削除するようなコードは書いていません。明らかにデバッグ中は何をしても テーブルのデータは維持されています。 また、デバッグをしていない状態で、サーパーエクスプローラでテープルを選択し、 [テーブルデータの表示]状態で手入力をしたデータは、デバッグを経てもずっと テーブルに保持されます。 なぜなんでしょう? フォーム上でテーブルの入力規則に違反したりということはありません。 デバッグ中は集計他あらゆる操作に対応しますので、テーブルにデータは入っているのに。 原因として何がありえますでしょうか?
141 :
デフォルトの名無しさん :2008/06/01(日) 13:55:39
COMMITしてないんじゃないの?
142 :
140 :2008/06/01(日) 14:06:13
>>141 COMMITなるものの意味がよくわかりませんが、
確かに、mdfファイルとの関係が刹那的というか、
互いに唯一の存在として婚姻を確認しあった記憶がありません。
接続の設定をさらっとしただけです。
どこでそのCOMMITなるものをすればいいのでしょうか?
申し訳ありませんが、もう一言だけでもお願いします。
婚姻?
秘密を作らずずっと一緒にいることの設定 >婚姻 知らないうちにデータが消えるとか、他からの操作を受けたりしないでほしいのです。
145 :
デフォルトの名無しさん :2008/06/01(日) 14:16:37
ObjectContainer client client.Commit (); これ
繰り返しテストが出来るようにオリジナルのDBファイルから デバッグ実行のたびにコピーしてるはず。設定で変えられたと思う。
なんか自動翻訳機にかけられた文章のままで質問している人がいるな。
148 :
140 :2008/06/01(日) 14:22:14
>>145 ありがとうございました。
どこかのプロパティフォームで設定するわけではなさそうですね。
これから調べて適切なところに記入してみます。
ありがとうございました。
普通に言葉を綴ってるつもりでもそれが詩になってしまうんだろう
150 :
133 :2008/06/01(日) 15:14:22
>>134-136 この参照型というのがポインタだと思えばいいんですかね。
違いはあるにしても役割的には同じみたいなんで。
もう少し調べてみます。
ありがとうございました。
>>150 加算減算ができるのがポインタで、できないのが参照、
くらいに思っとけば当面困らないと思う。
153 :
133 :2008/06/01(日) 21:42:46
なんとかできるようになりました。 ありがとうございました。 VC#の本とVC++の本を買ってきたのですが VC#の本にはクラス定義のことが書いてなかったので 最初クラス定義ができないと思っていました。 チェーンの最初と最後を指すポインタ変数(参照型)も クラスのメンバー変数にしないとエラーになったので ダミーのクラスを定義しました。これが正しい方法か どうかわかりませんが、とりあえず動いています。
クラス定義をしなければあらゆるC#プログラムは動かないよ
そう言えばC#ってクラスのメソッドの定義と宣言って分けれるの?
>>155 メタ情報はアセンブリ自身が持っているから定義と実装を分ける必要はなく出来ない。
あえて分けたいならインターフェイスとその実装クラスになるだろう。
あとC#3.0からPartial Methodという似たものは追加になっているが、
宣言と実装を分けるためのものではない。
そもそも分ける必要性って無いよね。 C/C++だとヘッダをインクルードしたりするけど、 C#なら直接アセンブリを参照設定して使うものだし。
いや、普段C++やってて最近ちょっとC#を弄り始めたから ちょっとだけ気になったんだ、ありがとう ヘッダファイルないのが何か気持ち悪いと言うか、まだ慣れない
C++/CLIを使い出すとわけわかんなくなるぞよよ
逆にC#のクラスの書き方に慣れるとC++のヘッダファイルがめんどくさくなるよ。 あれこそVSが自動で挿入してくれればいいのに。
161 :
デフォルトの名無しさん :2008/06/02(月) 17:03:21
ListViewで行間を広くするにはどうしたらいいのでしょうか?
谷尻 かおり の技術評論社 C#いつ出るんだよ・・・ さっさとだしてくれよ Accessなんかもういいからさ! もおおおおおおおおおおおおおお!!
谷尻ってデーターベース関連の本出してる人? 2008対応の本なら見てみたいな
Visual C# 2005 [実践]プログラミングテクニック 応用できる基本の書き方
166 :
デフォルトの名無しさん :2008/06/02(月) 22:21:39
当然VC#2008だよ そろそろ出してもいいだろ 2005買ったとたんに2008でたら 痛すぎて注文できない そもそも高い 監修は旦那か? お願いだから監修外して値段下げてーーーーー
谷尻の本はイラネだろ。DGVひとつまともに解説できなかった人に LINQとか増えてる2008のちゃんとした本が出せるとは思えない。
「DGV」て、なあにググッたらワンちゃんのふん取り袋って出てきたが・・・
170 :
デフォルトの名無しさん :2008/06/02(月) 23:09:34
DataGridViewか
>>158 俺、最近仕事でC++に戻ったけど、あのヘッダを自分で書くスタイルはやっぱ最悪。
めんどくさいのはもちろんのこと、
private メンバ追加しただけでそのクラスを参照するありとあらゆるソースの再コンパイルが必要だし、
ヘッダ読み込みのせいでコンパイル速度も低下してるし。
メソッド追加するのがしんどくなって、長ったらしい関数が増える。
byte[] buf = new byte[100]; みたいに配列を確保した時、各要素が0になるのは規格で決まってるんだっけ?
うん
174 :
デフォルトの名無しさん :2008/06/04(水) 02:17:21
コレクションフレームワークDictionaryとその反復処理(foreach+KeyValuePair) CSVファイルの読み取り方法 SQLServer ExpressEditionのデータベースへの接続のためのConnectionStringの書き方 (”...Data Source = .\\SQLEXPRESS”) 以上の機能の説明が全部網羅された本があったら教えてください。 (特に3番目を書いてるのは見たことがないです) C#は言語自体はいいと思うけど、多くの市販の解説書はひどいものじゃないでしょうか? 私(Java,C経験者)に言わせれば上みたいな機能がFormの色づけよりずっと基本なんですが。
そうですか
>174 っ「SqlConnectionStringBuilder」
あなたに言われてもね
179 :
デフォルトの名無しさん :2008/06/04(水) 10:40:57
ListView の ColumnHeader の TextAlign について 0番目のHeader は TextAlignの 設定ができません(Leftのみ)。 ・ColumnHeaderコレクションエディタで設定しようとすると コンボボックスで選択したのに、Leftに戻ってしまいます。 ・コードにて記述しても同じく、0番目はLeftのまま表示されます。 1番目以降は 任意の設定を認識してくれます。 原因等 ご存知の方、いらっしゃいましたらお教えください。
あなたに〜
182 :
デフォルトの名無しさん :2008/06/04(水) 11:46:03
>>181 即レス、ありがとうございました。
質問後、ググってたらまっ先にMSDNに記述ありました…
DataSetで自動生成されたFindBy何がしかを使用して、 DS.SomeRow row = dataset.Some.FindByFooBar(foo, bar); ってなことをやった時に、rowに値が入ったのか入らなかったのかを 判別する方法はないでしょうか? fooとbarは主キーです。そのためにFindByが自動生成されている訳ですが。 やりたいことは、キー重複を防ぐために、挿入前に、事前に確認したいだけなので、 上の方法で取得できたか出来ないかを調べるのが、もっとも簡単かと思ったのですが。
184 :
183 :2008/06/04(水) 15:13:06
どうやら、主キーが複数ある場合はContainsでも駄目なようなので、 地道にFind(foo = f and bar = b)と書いて、返ってくるRowsのLenghtで 判断することにしました。
ん?rowがnullかどうかじゃだめなのけ?
VS2005でプロジェクトデザイナからアプリケーション設定を追加しようとすると、 「app.configファイルに値を保存しているときにエラーが発生しました〜」と怒られて 値が保存されません。 VS2005より後にTurboDelphi(.NET1.1)をインストールしたのが原因かと思い、 VS2005(.NET2.0)を再インストールしたのですが、改善されません。 対策が分かりましたら、どうかご教示をお願いいたします。
>>185 それは試したんですけれど、rowがnullにはならなかったんですけれど‥‥。
そういうものかと思って納得したんですが、後でもう一度確かめてみます。
>>186 app.configのXMLが壊れちゃっているのでは?
app.configだけ削除して、作りなおしてみるとか。
app.configなんて只のXMLですし、プロジェクトデザイナじゃなくて手書きでも問題無いですよ。
実際、VS2003の時は手書きだったし。
新しくapp.configを作って、なんとなく項目をマージすれば大丈夫。
>>185 だーー。nullじゃないかどうかだけでいけますた。
なんでさっきは駄目だったんだろ。
どうも有り難うございました。
190 :
デフォルトの名無しさん :2008/06/04(水) 17:30:53
オブジェクト思考難しー(右手で左の乳首をつまみながら
191 :
186 :2008/06/04(水) 17:33:37
>>188 即レスありがとうございます。
app.configの削除はやってみたのですが、ダメでした。
となると、手書きですか・・・
System.Windows.FormsにSeparatorコントロールみたいなやつってある?
WPFのSeparatorみたいなやつ? コントロールとしては無いでしょ WPFみたいに統一されてないからそれぞれの実装次第
C#のソースに [hoge(page)] bool hage = true; [hoge] void panaya(object sender, EventArgs args) のようにカギ括弧を使った書き方があるのですが、これは ・何という名前で? ・どのようにすれば作れるのですか? F1キーのヘルプだと、括弧内のクラスについての説明から始まっていてどう要領を得ません。 名前を教えて貰えれば、ヘルプや入門ページで探せる気もするんでお願いします。
195 :
デフォルトの名無しさん :2008/06/04(水) 18:24:25
hage = true; これわざと!?
>>194 属性
Attributeを継承したクラスを作ると出来る
>195 狙ってない。狙ってない。落ち着いて。 >196 ありがとうございます。 なんだか凄く一般的な名前で、上手くを検索できなかったようです。 「属性の適用」ってヘルプ記事を見つける事ができたのでこれから読んでみます。
198 :
192 :2008/06/04(水) 19:31:21
>>193 thanks
Control間の区切りで、水平セパレータ一本引きたいんだけど、
なさそうだね。
>>198 昔ここで教えてもらったのでは、
Label separator = new Label{ BorderStyle = BorderStyle.Fixed3D, Size = new Size(100, 2) }
こんな感じでそれっぽくなった。
200 :
192 :2008/06/04(水) 20:34:18
>>199 おぉっ、まさしくこれです。
very thanks !
>>199 へぇ〜 みんな そうやってんの?
オレ、いつもGroupBox を縮めて使ってたよ。
Windows.Formで、SplitContainerを使用したとき、Panel1と2の間の 境界線の幅を太くして、つまりSplitterWidthを大きくして、 その境界線の上にコントロールを配置することは可能なんでしょうか?
203 :
デフォルトの名無しさん :2008/06/05(木) 14:27:05
やってみろよって思うんだけど 出来なかったんだけどどうすればいいですかなら分かるけど
204 :
202 :2008/06/05(木) 16:00:18
>>203 質問の仕方が悪かったですね。
もちろん、試してみて出来なかったので質問しました。
両パネルにコントロールを配置することは可能ですが、
パネル部分以外のSplitContainerにコントロールを配置することは不可能なようです。
まぁ、コンテナっていうぐらいですから、当然ですか?
ということで、境界上に置くつもりだったコントロールは、片方のパネルの上に寄せました。
Shurikenのアドレス帳とかだと、境界上にコントロール置いてあるんですが、
あれは激しく自作っぽいですな。
>>204 そのコントロールのParentがSplitContainerではなければ
コード上でそのコントロールのLocationを適切な値に変更すれば
境界上に配置可能。
203の厭味ったらしい性格が治る見込みはありますか?
ありません
>>205 う〜ん、なるほど、動的に境界上のコントロールの座標を算出するってことですか。
確かに、SplitBarの移動のイベントは取れるようですので、可能かも。
私のやりたかったことって、単純にSplitContainerでは実現できなくて、
縦3分割の3つのパネルを作り、真ん中のパネルが固定幅というのと同義だ
ということに気付きました。
でも
>>205 がおっしゃるように、SplitContainerを使って、動的に計算した方が、
真ん中ペインをドラッグしたときのマウスイベントの処理が楽ですよねぇ。
http://pc11.2ch.net/test/read.cgi/tech/1061285378/531-532 から誘導されました。
前もって作った配列の要素とクラスとの"紐付け"をしたいのですが、
良い手はありますか?
ちょっと条件があります。
・DirectXで配列を引数にとる関数を使いたい。
・配列は構造体もクラスも使えるけど、構造体配列が好ましいらしい。
・頻繁に更新するので、List<T>.toArray()は勿体ないっぽい。
だいたいこんな事を考えてます。
sruct instanceData {
int hage
}
class GameCharactor // 構造体の配列と同数作られるクラス
{
private int hoge;
static instanceData[] idarray; //構造体配列
GameCharactor(int i){hoge = i} //コンストラクタ
public int hage{ get{return idarray[hoge]hage;} set{idarray[hoge].hage = value;} }//プロパティ
public int class_only_member;
}
GameCharactor::idarray = new instanceData[numBoxes]; //構造体配列初期化
<略>
List<GameCharactor> CharaList = new List<GameCharactor>(numBoxes); //最大がnumBoxes
現状非常に見栄えが悪いかも知れません。
先入観的に、構造体配列に拘っていたりします。
おおまかにこれっぽく動いてC#で好ましい手とはどんなのがありますか?
>>209 言いたい事は分からんでもないが。Listは、それ専用に書くかな。
何をやりたくて、どんな構造にしたいかで変わってくる部分も有るから。
聞きたい内容には、それでもいいんじゃない? でつよ。
2.どちらでもいい。配置指定の構造体のほうが楽かもね。
3.専用を作る
クラスの中にDX用の構造体を持ってもいい。
211 :
デフォルトの名無しさん :2008/06/05(木) 21:36:33
初めまして。質問です。 string文字列に格納されている16進数を数値に変えるにはどうするのがスマートでしょうか? 例: "1A"→26 に変換したい
212 :
209 :2008/06/05(木) 21:44:38
>210 変なの読んで貰って、ありがとうございます。 これで終わらせて、次の工程に進めます。 頭の中に、ポインタとキャストがあるので、不安に 陥って書いてしまいました。 C++ではあり得ないなとか。 あんまり酷く言われなくて助かりました。
213 :
デフォルトの名無しさん :2008/06/05(木) 21:45:01
int num16 = Convert.ToInt32("FFFF", 16);
214 :
213 :2008/06/05(木) 21:47:29
>>212 DXを駆使したいなら、あまりOOP的な関数は使わないほうが言いと思われ。
NEW繰り返すような事は控えたほうがいいかな。例えば、オブジェクトのデータは
最初にガバーーと取ってその中でやりくりとかね。リストも、専用に着けたり離したり
高速でできるように、もちろん時間内に処理できるできないで流動的なリストになる。
高速なオブジェクト管理も作るしね。 まあ、やりたい事によって色々ですよ。
216 :
211 :2008/06/05(木) 22:29:12
>>213-214 ありがとうございます!!!(>_<)
まさにそれです!!!お早い返事、ものすごく助かりました!!!
217 :
デフォルトの名無しさん :2008/06/05(木) 23:53:14
c#使いの人たちは 打ち出しはクリスタルレポート使ってるの?
シングルトンってガベージコレクションの対象になります?
なりません
>>219 ありがとうございます。
ちなみにならない理由て簡単に教えてもらえないでしょうか。
staticな変数に入ってるオブジェクトはガベージコレクションの対象にならないから アクセス可能な変数に代入されているオブジェクトはGCに回収されない つまりstatic or 使用中のメソッドのローカル変数に代入されているオブジェクトは回収されない そうじゃないものは回収される
>>221 めっちゃ助かりました!
ありがとうございます
Mutex m = 〜; : // GC.KeepAlive(m); てのがあったと思うけど、KeepAlive入れないとmがスコープ内にも関わらず回収されちゃうのは コンパイラの最適化でもう使われないmにnullを入れるとかしてるの? それともガベージコレクタが動的にコード見て判断してるの?
JITコンパイラがnullにするコードを追加してる、多分。 まあMutexなんてusingしときゃすむ話だ。 ってかましろほっぽっとかずにusingなりちゃんとしとけよって話。
配列やコレクションを引数にとるメソッドで、コレクション自体がnullの時はArgumentNullExceptionを 投げるんでしょうが、コレクションの要素の中にnullのものがあったときもArgumentNullExceptionを 投げていいんでしょうか。
いや、よくない。 ArgumentExceptionなり、それの派生クラスを適当に定義して投げれ
MSDNくらい見ようぜ > メソッド呼び出し時に渡される引数が null 参照 (Visual Basic では Nothing) で > あってはならないにもかかわらず、渡された引数のうち少なくとも 1 つが null 参照 > (Visual Basic では Nothing) のときに、ArgumentNullException がスローされます。
よく読め
229 :
デフォルトの名無しさん :2008/06/07(土) 13:46:25
visualC#2008でプログレスバーって言うのがありますよね? アレを敵の体力バーにしたいのですが、どうすればプログレスバーの 値を増減させられますか?おしえてください。yahooで調べてもでませんでした。
ネットで調べる前にまずヘルプみれっつうの
体カバーにみえた
232 :
デフォルトの名無しさん :2008/06/07(土) 14:03:09
ヘルプみて 頭がいたくなって 熱がでました。 ありがとうございました。
MSDNはわかりにくい場合が多々あるのはわかるんだが こういう質問を見ると、本当に調べたのか?と疑問に思う はっきりいえば嘘だと思う
ググレカス
初心者スレなんだからいいじゃん 初心者じゃないくせにうろうろすんなhage
しかし、その程度のtipsも探し当てられない能力の低さには脱帽
238 :
デフォルトの名無しさん :2008/06/07(土) 23:41:24
てかここで聞くよりググった方が早いだろ
>217 クリレポはPro版から手軽に使えるから使うけど、.netのクリレポって最初の 起動が死ぬほど遅いんだよな。下手すれば10秒超える。 まぁ、どっちかといえばActiveReportの方が多いんじゃないかな?
クリレポは確かに手軽に使えるけど、for VS2008にはマージモジュールが用意されてないんだよな msiならあるんだが
241 :
デフォルトの名無しさん :2008/06/08(日) 21:40:29
クリレポは機動が遅いから評判いまひとつなのか めもめも 葡萄屋のActiveReportかあ 買う金ないお 貧乏会社だし
242 :
デフォルトの名無しさん :2008/06/08(日) 21:43:24
ジャイブレポートなんてどうかな? VBでブイブイ言わせてるみたいだけど(うちの会社でわ)
243 :
デフォルトの名無しさん :2008/06/08(日) 21:46:47
アクテブレポート12万だとー ウインビスタのほうが安いじゃないか MSを見習え
Excelじゃダメな理由を教えろ
Excelにはいて印刷? 聞いた事有るけど C#のアプリでボタン押してExcel立ち上げて Excelのプレビュー見て 印刷ボタン押して めんどくさー
OLEオートメーションでいいだろ
自動印刷のあたりで、エクセルマクロを規制しようとするセキュリティソフトが騒ぎ出す ユーザーから見て「エクセルが起動したこともわかんない」という状態は不可能
OWCでいいだろ
OWCって何でんの? Oっきい方のトイレ? うんこしながら考えろってこと?
そのとおり!
251 :
デフォルトの名無しさん :2008/06/09(月) 10:09:25
252 :
デフォルトの名無しさん :2008/06/09(月) 10:27:25
みんな仕事でC#使ってるだけなのかぁなんかガッカリだな
俺は仕事じゃなくて自分用のツールとか作ってる でも配るんなら.NETがネックになるから避ける人が多いかもね
なんでSP3に入れてくれなかったんだろうね
ドトネト弱者は放置でOK
256 :
デフォルトの名無しさん :2008/06/09(月) 11:39:24
ドットネックw
Process.Startで呼び出したEXEの戻り値ってどうやって取得すれば良いんでしょうか
プロパティにあるだろ
横入りで申し訳ないけど、
>>248 さんの言ってるOWCって何ですか?
oh、ExitCodeか・・・見落としてた
office web component かな?
タイトルバーの右クリックにメニューを表示したいんです。 どなたかヒント下さい。
ヒント:質問の仕方を考え直しましょう。
やり方は知らないし関係ないけど、 タスクバーからのメニューの一番下が「閉じる」じゃないアプリには、たまにぶち切れそうになるな
cmd.exeのことですね、分かります
エスパーするとGetSystemMenu
>>266 出来ました、ありがとうございます。
システムメニューって言うんですね、知りませんでした。
>>264 なるw
右クリック→即左クリックで閉じようとしてヘルプとか開いたらもう・・・
なんのためのAlt+F4
270 :
デフォルトの名無しさん :2008/06/09(月) 22:32:46
タスクバーのアイコンダブルクリックでも閉じれるよ
↑うそ付くなw
272 :
デフォルトの名無しさん :2008/06/09(月) 22:54:55
あータイトルバーだった
>>269 手が常にキーボードの上にあるとは限らない
マウスだけで操作してるときとか、タスクバー使うことがある
ただ、俺は
>>268 と違って右クリックx2派だが
無限ループに入ってるっぽいアプリってAlt+F4効いたっけ?
ウィンドウとは別のスレッドが無限ループしているとか 無限ループの中で(VBでいうDoEventsのように) メッセージループへの応答をしていれば、効く。 そもそもそんな状態だったら、やたらとCPU食う以外 無限ループくささをあまり感じないと思うけど。
システムメニューの閉じるつぶしてたら、上記の方法は全滅だけどな。
>>275 sleep入れてりゃ単純な処理なら無限ループでも全くCPU食わないよ。
むしろ正常なプログラム。
ゲーム作るとメインループをぐるぐる回し続けるのが普通だからね。
ゲームは普通のプログラムと違うだろ ここでいう普通とは以下省略
ASP.NetをC#やっててメッセージボックス?を出そうと思って MessageBox.Show("表示したい内容"); と打ち込んでるんだが「現在のコンテキスト内に存在しません」とかなんとかエラーがでて実行できないんだけどどうしたらうまくいく?
ASP.NETではWindows.Formは使えないぞ
ぬ、そうなのか どっかに教科書とかないもんかorz ちなみにWebフォーム(?)でメッセージボックスだすにはどうすればいい?
window.alert
ありがとう、明日会社でやってみるよー
それくらいぐぐれよ・・・ ここはふらっとだった
285 :
デフォルトの名無しさん :2008/06/10(火) 22:53:58
ぐぐる前にここで聞け
マルチディスプレーでデスクトップの全体の横幅を取得する方法教えてください。
質問です。 LINQ to SQLのDataContextについてなんですが、 データをSQL Serverからではなく、XMLから読み込み、保存出来ないでしょうか?
>>286 System.Windows.Forms.Screen.AllScreensで列挙して計算。
>>288 レスありがとうございます。
どのように並んでるかは、どう判別するのですか?
全て横一列とは限りませんよね?
290 :
デフォルトの名無しさん :2008/06/11(水) 00:58:46
>>287 LINQ for xml というのが別にある
>>290 Screenクラスの配列で帰ってくるので、各々の横幅は分かるのですが、どう並んでいるかの取得方法がわからなくてつまづいてしまいました。
文字列の配列とはどういうことでしょうか?
LINQ to XMLとLINQ to Objectの違いがわからない
>>290 あ。
.ToStringで相対位置がわかるのですね!すばらしい・・気付かなかった。
ありがとうございました。
座標から計算すればいいんじゃないの?
296 :
デフォルトの名無しさん :2008/06/11(水) 01:17:13
あーマルチウィンドウかマルチディ(
>>295 あ。.Bounds.Xでわかるんですね。
さっき実験したときは全部0だった気がしてたので、どうやら勘違いしてたようでした。
解決しそうです。ありがとうございました。
>>293 極端な話、IEnumerableに対するLINQがLINQ to Objectで
XElementに対するLINQがLINQ to XML。
根本的な質問なんですが C#でプログラムを書いて配布するときに.netも同じCD内にやいて配布することはできるのですか?
ここはふらっとだった…
Form1のキャプション変更を教えてください Form1.Caption= ではできませんでした
Captionってどっから出てきたの? Text だろ。 でもForm1はインスタンスなの? そうだとしてもウィンドウ実体ができてからでないとかわらんけどな。
タスクバーの文字を変えるやつです VBでは Form1.Caption= でよかったんですが Form1.Text= というのもありませんでした インスタンスというか最初に立ち上がる単体です
まずは@ITのC#入門でも読んで基礎を身に付ければいいよ
しまったここはふらっとだった。 this.Textな
309 :
デフォルトの名無しさん :2008/06/11(水) 20:02:37
ぐぐる前にここで聞け
StreamWriterでテキストファイルに書き込んでるんだけども 2バイト文字(だと思う)が文字化けしちゃうんだけどこれはなんで?
Encoding
312 :
デフォルトの名無しさん :2008/06/11(水) 22:14:36
>>310 あーそれ俺も蹴躓いた一番最後が改行コード1つで終わってると文字化けするっぽかった気が
てかコレ
StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("shift-jis"));
Shift_JISでおk
日本語版以外を作るつもりはないけどEncoding.Default使っている。
しまったここはふらっとだった。
大文字小文字ね
>>314 無指定時の標準がutf-8でEncoding.Defaultが別にある不思議。
Encoding.DefaultはANSIのデフォルトコードページだろ。 なにが不思議なんだ。
まぎらわしいのは確かだわな。Encoding.Ansiとかにしといてくれればいいものを。
List<T>からAsReadOnly()でReadOnlyCollection<T>を得た後 ReadOnlyCollection<T>への参照のみ保持しておく ってのはやっても大丈夫?
>>320 だめ。ReadOnlyCollection<T> を新たに new すれば大丈夫だけど。
322 :
デフォルトの名無しさん :2008/06/12(木) 15:03:29
.NETはじめたばかりなんだが Formの描画可能エリアサイズ(フレームを除く幅・高さ)を取得する方法を教授して欲しい ^p^ まったくもって初心な質問だが、おおおお願いいたしまする
WidthとHeightプロパティ
>>322 ClientRectangle とか ClientSize
326 :
デフォルトの名無しさん :2008/06/12(木) 15:09:07
日本語で頼む
AsReadOnlyってreturn new ReadOnlyCollection<T>(this);だけだぞ そのあとはReadOnlyCollectionが参照を保持してるから元のリストはGCされない
>>328 「問題無い」ことに反論あるならちゃんと理由を書きましょうね
HashTableをforeachで取り出したときと逆順に取り出したいんだけどどうしたらいいか教えてください。
無理です
hashtable.OfType<DictionaryEntry>().Reverse()
キャストに失敗することはありえないので、Cast<T>() の方が
>>335 ありがとうございます。
OfTypeとかC#3.0ですか?
C#3入れてみます。。
Select 繋げて匿名型の型付き Key, Value にもしたいななんとなく … Hashtable 使うやつが 3.0 使えるのかってのは俺もスルーするー
KeyValuePairの方がベター
340 :
デフォルトの名無しさん :2008/06/12(木) 23:31:39
ぐぐる前にここで聞け
しまった。ここはふらっとだった。
メッセージボックスは MessageBox.Show("メッセージ", "") ; ですが これでメッセージがでてOKを押すまで次の処理に移らないようにするにはどうすればいいですか?
普通はメッセージボックスが閉じるまでブロックされてるはずだけど
ループの中で使ってるんですが 連続で大量に出てしまいます あ、タイマー割り込み先になってました こちらを抑止しないとダメですね
マルチスレッドのアプリケーションを作っているのですが、スレッドでTextBoxに書き込もうとするとエラーになります。 バックグラウンドでもスレッドを使っても同じエラーになるのですが、どうしたらいいでしょうか?
Invoke
345です。 早い回答ありがとうございます。Invokeを使って一度動かしてみます。
DictionaryとSortedDictionaryの使い分け方を教えてくれー 要素数が多いとSortedDictionaryの方が有利なのかと思ったら 全然関係なかったし。
>>350 foreachなどで順番に読み出したときにキー順に読み出せるかどうかの違い。
むしろSortedDictionaryとSortedListの使い分けの方が悩む。
じゃあ順序はどーでもいいときはDictionaryでいいのかぁ?
353 :
345 :2008/06/14(土) 03:55:53
345です。 Invokeを使ってTextBoxに書き込みはできるようになったのですが、関数を while(Roop){ スレッド内容 } として、ボタンを押したときにRoopをfaultにした場合にしているのですが、終了しないのですがどうしたらいいのでしょうか? 一応、thred.Isbackgroundはtureにしています。
ステップ実行してみたら?
「スレッド内容」の中に時間のかかるループがあるとか。 あと落ち着け。
いくつか質問があるのでお願いします。 1.ListにListをいれて2次元配列みたいにしようと List<List> list = new List<List>(); したらエラー'System.Collections.Generic.List<T>' の使用には、'1' 型の引数が必要ですというように怒られた。 理由がわからないのと、代用法を教えてください。 2. 配列を受け取って不要な要素の削除挿入がしたいので配列からListへの変換がしたいと思うのですができません。逆はあるのですが。 新たにListを作って挿入していくしかないのでしょうか。 3. 通常DataSetはselectして抜き出して表示、加工してUpdateという使い方をしますが、CSVからDataSetを作るという記事を 見て自前で作ったDatsetをデーターベースに突っ込めるか気になったので教えてください。
中のListも型を指定しないといけない。 List<List<int>> list = new List<List<int>>(); 2つ目はList<>のコンストラクタでいける。 int[] a; List<int> l = new List<int>(a); 2次元配列とかからList<List<>>なら、こうも単純にはいかないだろうけど。
>>350 Dictionary はハッシュ辞書、
SortedDictionary は赤黒木。
ハッシュは、所望の要素数に対して、
最低でも倍くらいのメモリ確保しとかないと実行速度落ちる。
(デフォルトコンストラクタで結構大きめにメモリ確保してたはず)
でも、キー順で要素取り出せる必要のないときは普通に Dictionary でいいと思う。
教えていただけませんでしょうか。 GetPrivateProfileStringでINIファイルの中に定義したファイル名(フルパス) を取得していますが、取得できたファイル名がトレースで見てみると c:\\tmp\\test.txt のように\が二つ並んでいます。このファイル名をつかってFTPアプリ用 のパラーメータ文字列を作ろうとしているのですが String.Format(" -p -b {0} {1} {2} {3} {4}", IP,//IP FtpUser,//ユーザー FtpPass,//パスワード ArcFile,//転送対象ファイル名(問題の文字列) FtpPath);//転送先パス とやると、Arcファイル名の文字列にc:\\tmp\\test.txtのように \が2個入っているため、正常にファイル名と認識できないようです。 そのため、FTPコマンド(独自作成)が異常終了している状況です。 どのようにすれば\\を1文字にして正常な形式のファイル名でコマンド 文字列を作成できるのでしょうか。 お手数ですが、どちら様かご教示のほど、お願いしますm(__)m。
359です。 すいません。ほかに原因があったようです。 お騒がせしましたm(__)m。
>>358 デフォルトってたしか3か5か7だったかせいぜいそのくらい。
3だった気がする。
どうせあっという間に拡張されるしどうでもいい話だが。
362 :
デフォルトの名無しさん :2008/06/14(土) 17:37:30
システムがムシキングっぽいゲーム作ってるのですが、 画像の表示の仕方がわかりません。おしてください。 ちなみにマイクロソフトvisualC#2008をつかっています。
基本的にここのレスって、言語を一から勉強すれば全て解決できるはずの問題ばっかりだね。
一から勉強してるときにつまずいたやつが来てるんじゃないの?
366 :
デフォルトの名無しさん :2008/06/14(土) 17:59:54
てかググり方を教えるスレだから
368 :
362 :2008/06/14(土) 18:42:44
言い方がわるかったみたいなのでしつもんを変えます。 visualC#でpictureboxってありますよね?それを使ってボタンを押すと 画像が変わるプログラムをつかうりたいのですが、どうすれば画像をかえられますか? 一応 pictureBox1.image = ファイルの場所 とやってみたのですができませんでした。 おしえてください
369 :
デフォルトの名無しさん :2008/06/14(土) 18:48:03
>>368 picturebox1,2,3と作ってvisibleで切り替えろ
XMLを出力するとき、 XmlTextWriter と XmlWriter のどっちでも できるっぽいんだけど、どういう使い分けをすれば いいんでしょう?
ドキュメント読め > public abstract class XmlWriter : IDisposable > public class XmlTextWriter : XmlWriter この2つを見つけることができれば、あとは自明
XmlTextWriterは推奨されてないよね? >Microsoft .NET Framework には、 >XmlWriter クラスの実装である >XmlTextWriter クラスが含まれていますが、 >2.0 リリースでは、Create メソッドを使用して >XmlWriter インスタンスを >作成する方法を推奨しています
XmlTextWriterのインスタンスを直接生成することが推奨されていないのであって、 XmlTextWriterを使用することが推奨されていないのではない。 XmlWriterインスタンスと言っても、実際には具象クラスのインスタンスなわけだ。 どの具象クラスのインスタンスを返すかはXmlWriterの判断に委ねろ、ということだ。
>373 直接生成しないでXmlTextWriterのインスタンス どうやって作るの?
XmlWriter.Create
返り、XmlWriterだけど・・
子を作って親に入れるんじゃなくて、 親しか作れないのに?
親の名義だけど実際に帰ってくるのは子だよ。
XmlTextWriter.Create(@"hoge.xml") で帰ってくるのXmlWriterだよ。
>>381 抽象クラスのインスタンス帰ってくるわけないだろうが…
あ、違った。 でも、XmlTextWriterは帰ってこないね。
なるほど。 createの意味は分かった。 じゃあ、ソース上はXmlWriterでよくて、 XmlTextWriter使う必要ないんじゃないか。
だからそう言っているじゃないか
387 :
デフォルトの名無しさん :2008/06/15(日) 05:10:14
ぐぐる前にここで聞け
どちらかというと.NETスレ向けかもしれませんが… コントロールのイベントについてなのですが、SplitContainerを2段重ねたものにPanel、Label をおいたものを作り、LabelにDoubleClick、MouseDown、MouseMove、MouseUpイベントを 追加して使用しているのですが、このコントロールを動的に作成し、同じコントロールをPanelの 中に入れ子になるように追加して使用するようになっています。 このとき、1段目のコントロールのLabel.DoubleClickはちゃんと発生するのですが、2段目以降の コントロールのLabel.DoubleClickが発生せず困っています。Mouse〜イベントはちゃんと 発生するのですが… コントロールを入れ子にしすぎると発生しなくなるイベントとかあるのでしょうか?
>>381 変数の型とインスタンスの型を区別して考えるようにしろ。
C#でGUIアプリケーションを作りたいんですが、 参考になりそうな本、もしくはサイトを教えてください。 自分のスキルは「JAVA・C」をポインタくらいまで学習した。Python・Perlの基本部分がわかる程度、です。 目標としては「live2ch」みたいなインターフェースのtxtログ検索プログラムを作ろうと思ってます。
public class Number { public string[] Num; } public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Number Date = new Number(); Date.Num[0] = "01aaaa"; // ここでエラーが出る } } オブジェクト参照がオブジェクト インスタンスに設定されていません。 というエラーが出るのですがどうしたらいいのうでしょうか
>>391 3行目
public string[] Num = new string[10]; // 配列の大きさは適当
List<T>使ってAddした方が動的さが直感的で使いやすく コードが分かりやすくて良いいんじゃないかと。
ArrayListがいいよ
395 :
391 :2008/06/15(日) 23:21:36
AllDate date = new AllDate();
StreamReader sr = new StreamReader("data.dat", Encoding.GetEncoding(932));
while (sr.Peek() != -1)
{
buf = sr.ReadLine().Split('/');
for (int cnt = 0; cnt < 4; cnt++)
{
if (buf[cnt] == textBoxSearch.Text)
{
listBoxResult.Items.Add(buf[2]);
date.No[cnt] = buf[0]; // ここでエラー
}
}
label5.Text = listBoxResult.Items.Count + "件の検索結果が出ました";
}
sr.Close();
このようなプログラムで、検索でヒットしたbuf[0]だけど他のClassに保存してプログラム内で使いまわしたいのですが、
>>392 さんが教えてくれたやり方だと、宣言した大きさを超えるとやっぱり
オブジェクト参照がオブジェクト インスタンスに設定されていません。
というエラーがでてしまいます。どうしたらいいんでしょう・・・
396 :
391 :2008/06/15(日) 23:22:56
>>395 bufは
string[] buf;
で宣言してあります
397 :
391 :2008/06/15(日) 23:26:53
399 :
391 :2008/06/15(日) 23:31:47
本当にありがとうございます やばいです
>>396 forで何回ループするかわかってるなら
その前で
date.No = new String[max];
とすればいいんじゃね
C#2008EEをXPで使用して勉強しています。 親クラスから複数の子クラスが派生しており、シーンによって子クラスの メソッドを呼びわけるようにしたいと思っていますが、 うまく呼びわけることができません。 class Parent { } class Child1 : Parent { void Method(){} } class Child2 : Parent { void Method(){} } 例えば上記のようになっていた場合、ユーザから入力された値によって Child1のMethodとChild2のMethodを呼び分けたいのですが、 どのように記載すべきでしょうか。 こういうシーンが1箇所ならswitchで呼び分ければいいのかなと思ったのですが、 上記のように処理を分岐させたいシーンが複数あり、 その度にswitchを記述するのがよくないと思っています。 初歩的ですがアドバイスをお願いします。
>>402 ベースクラスで virtual or abstract
派生先で override
…なんでもいいから、C# 入門みたいなテキストをまずはやってみな
基礎の基礎は掲示板だと限界がある。ピンポイントなもの向け>掲示板
XPなら何も考えないでswitchで書けよ、と思ってしまふ
XP違いw
基本intでしか使わない変数を ごくたまーにdoubleで使うことが分かっている場合、 intで書いてそこだけdoubleにキャストすべきか、最初からdoubleで書くべきか、 そんなどうでもいいこと勝手にしろ、か・・・・ご意見拝聴致したく候。
doubleをintにしたら?
演算する時は常にdoubleで使うとかいうんじゃなければ、 intでいいんじゃまいか。
そういうときは、なるべく余計な記述をしなくてすむようにしたいな。はじめからdoubleに一票。
基本intでしか使わないって言ってるんだから、言葉通りに取ると、 それだとintで余計な記述をするようになるんじゃないの?
doubuleにintいれても意味無いだろ
>>403 今日ほど参考書を買おうと思った日はありません。
帰りに買って帰ろうと思います。
ありがとうございました。
C#で小物ツールを作るときに、たとえば mytool.css をダブルクリックすると裏で自動的にコンパイルして あたかもスクリプトのように実行してくれる仕組みとそれに対応した拡張子ってないですか? それくらいは自分で作ればいいんでしょうけど。もしあれば教えてください。
エディタの外部ツール登録とかじゃ駄目なのか?
貴重な御意見しかと頂戴いたし申した。
申すは可笑しいだろうjk
申し訳ない
ASP.NETをC#でやってるんだけどもそれもここで質問していいのかな? テキストボックスに値を入力して、入力された値に含まれる半角・全角のスペースを消したいんだけど ("aa aa"と入力されたら"aaaa"とか) 今はTextChangedイベント使ってAutoPostBackプロパティをTrueに設定して動かしているんだけど、 ポストバック時の再表示がちらちらして鬱陶しいんだ 何か他に方法はないかな?
>>418 javascriptを使ってクライアントサイドだけでチェックと変更をする。
具体的にどうするかはスレが違ってくるな。
割り込みすみません。 今oracleのテーブルにアクセスしてクエリ抽出し、それをcsvに書き出す というのを作っているのですがデータアダプタとかデータセットとか良くわかりません。。。 (oracleアクセスとクエリビルダで抽出までは出来たのですが) 参考になるサイトとかどなたかご存知でしょうか? お願いします
VS2008にしたんだけどビルドしてもDEBUGフォルダだけでReleaseフォルダが 出来ないんですけど何故?
ちゃんと設定した?
>>419 よかったらJavaScriptの方へ処理を飛ばすというかJavaScriptを動かす方法とタイミングを教えてくれないだろうか
>>422 VS2005EEでは設定した覚えがないんですけど。。。
今はvs2008PEです
Release ビルドしても出来ないの?
>>425 2005のときはビルドとかリビルドとかのメニューありますよね?
アレのビルドってやると普通に出来たんですが・・・
配列やリストの中の最大値、最小値を求めるメソッドって無いの?
Max, Min なんでそのままの名前なのに見つけられないの?
ない。ソートして最大/最小のインデックスでええやん
Min/MaxはIEnumerable<T>の拡張メソッドなので.NET3.5から、 くらいの言及はしてやっても良いと思うが
質問者の側で指定がなければ最新版を対象に話するよ。
PostBackが鬱陶しいならajax
>>437 でも実はこれが一番の近道じゃないか?w
>>434 酷いな。何故か勝手に割れだと決め付けられてるし。
緑の▲ボタンの右側にデバッグ/リリース変えるコンボボックスあるっしょ。
>>423 <script type="text/javascript"><!--
function blankcheck(id){
var txt = document.getElementById(id);
txt.value = txt.value.replace(/\s/g, "");
}
//--></script>
<input type="text" id="TextBox1" onchange="blankcheck('TextBox1')" />
これでいけるのだが、よく考えるとasp:TextBoxタグにこれを追加するのが面倒だ。
無理やりねじ込む方法もあるが、AutoPostBackをはじめASP.NETがonchangeを使う可能性が
あるから危険かも。
window.onload = function() {
document.getElementById('TextBox1').onchange = function(){blankcheck('TextBox1');}
}
asp:TextBoxタグなどを拡張するのがマナーなんだろうけどややこしそうだ。
毎秒100個くらい構造体(40byte)をバイナリファイルに出力したいのですが 1:構造体をバイナリファイルに出力する方法 2:可能な限り速やかにファイルに実際に書き込みをするようにしたい どうすればいいでしょう?おしえてください よろしくおねがいします
>>441 考え直してはくれないか・・・
public static void SaveToBinaryFile(object obj, string path) {
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) {
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, obj);
}
}
>>442 なんだか変数の名前も記録されてしまいますね
ファイルがバカでかくなりそうなのでやめます
他に何かいい方法はないでしょうか?
まだまだ募集中〜
募集中…
募集中噴いたwwww BinaryFormatterで最初の要求仕様は満たされているが、 余分な物を出力したくないと言うならBinaryWriterを使えば良い。 Marshalとか使った方法もあるけど、自分で調べれないような人は使ってはいけない。 ・StructLayout&Marshal.SizeOf→Marshal.AllocHGlobal→<Marshal.StructureToPtr→Marshal.Copy→[FileWrite]>→Marshal.FreeHGlobal
そもそも毎秒100個もファイル書き出すなよ・・・
用途を聞かないと判らないが、そんな勢いでファイル出力しなきゃならない設計自体が間違っている予感。
一つのファイルに対して 40byte*100個/秒 書き出すって意味じゃないのか。 いくらなんでも秒間100もファイル作るわけが・・ないよね? しっかし、用途がさっぱり分からないなぁ
そもそも秒間100もファイル作れるのか?
用途がわかれば色々アドバイスもできるんだがな。 DB使えとか。リモーティングがいいとか。
セクター直書きなら余裕。
普通に考えて設計が間違ってるわな。 昔、CSVファイルを1秒毎にFTPで送るって仕様があってだな、そのファイルってのがリアルタイムで製作していくらしいんだ。 ファイル数は10〜20個で、1ファイルあたり100列くらい。 そのシステムが全国にあって、名古屋のFTP鯖に向けて送りたいらしい。 さらに失敗時に再送処理もいれてくれとか細かい設定まであった。 何を言っているのかわからなかったよ。
RC版は正式版に自動アップデートするの?
>>453 何がしたくてどう考えたらそんなこと思いつくんだろう・・・
456 :
デフォルトの名無しさん :2008/06/18(水) 23:48:23
ただのアホ
>毎秒100個くらい構造体(40byte)をバイナリファイルに出力したいのですが 一個のファイルだろさすがに書き方から見ても。 まあBinaryWriterでちまちま書いとけ。
適切な大きさのバッファを割り当てればストリームで十分スピードは出る。 ちまちまランダムアクセスするよりずっと早い。
??
流れを読めない人なんだろうからほっとけよ
ボットシステム作る板かとオモタww
462 :
デフォルトの名無しさん :2008/06/19(木) 13:45:31
今、C#.NET FrameworkでWindowsアプリを作成する練習をしているのだが メインのFormプロパティ FormBorerStyleに、Noneを指定した場合 フォームデフォルト(キャプションウィンドウ, タスクウィンドウ上)のコンテキストメニューは、どうやって呼出せばいいのでしょうか (´・ω・`) 教えてエロい人
CreataParamsオーバーライドしてStyleにWS_SYSMENU追加
464 :
デフォルトの名無しさん :2008/06/19(木) 14:12:58
>>463 ありがとう!正常に表示されますた。
WindowStyleの追加削除は、そこで直接行えばいいのね(・ω・)
C#2008を使用していますが、Typeの情報からインスタンスを生成する方法ってあるんでしょうか? 動かないけどこんな感じで Type test = typeof(string); Object obj = new Object (test); //stringのインスタンス生成したい
>>465 アセンブリの遅延ロードなどで使う
Assembly asm1 = Assembly.LoadFrom("sclass.dll");
Type sclass1 = asm1.GetType("Sclass");
ISclass s1 = (ISclass) Activator.CreateInstance(sclass1);
ActivatorとかType.GetContructorからとか どうでもいいがStringは引数なしコンストラクタを持たないぞっと
>>462 せっかくForm使ってるんだから、MenuStrip使えよ。
>>466 >>467 ありがとう。
そのへん調べてみたら簡単には出来なさそうなので
もうちょっと勉強してから実装してみます。
LoadFromを広めるな。
アセンブリをハイジャックされる可能性がある。
それはLoadFormと関係ない問題
ASP.NETでTextFieldParserを使いCSV読み込ませる処理をやっているがWEBアプリなのでどんなデーターをねじ込まれるか分からないので 最低限バイナリファイルを弾きたいのだがtry chatchしてもexeファイルは弾くが画像データとかは例外を出さずにそのまま素通りしてしまう。 どうすればいい?TextFieldParserはストリームで読み込む。
475 :
362 :2008/06/19(木) 20:38:36
画像をpictureboxに挿入したいのですが、下のようにしてもできません、 ちゃんとusing System.Drawing;も打ち込んであります。ファイルの場所もただしいです。 なのに名前 'image1' は現在のコンテキスト内に存在しません。とでます。 解決策をおしえてください。 private void Button1_Click(System.Object sender, System.EventArgs e) { image1 = new Bitmap(C:\Users\pc\Documents\C#\Visual Studio 2008\Projects\" + @"WFA1\WFA1\nomal.bmp", true); PictureBox1.Image = image1; }
これは? Bitmap image1; それかこうするか Bitmap image1 = new Bitmap(C:\Users〜 てか直接とか PictureBox1.Image = Bitmap(C:\Users〜
>>446 貴重な情報ありがとうございます
やってみました
いまのところ動いてるっぽいです
(intって8byteでしたっけ?boolとbyteが4byteでセーブされるw ま、いいけど)
今日のところはデータは1秒あたり平均20弱くらい来てたようです
ファイルに保存できました(たぶん)
どーもみなさんありがとうございました
>(intって8byteでしたっけ?boolとbyteが4byteでセーブされるw ま、いいけど) なに使って書いたわけ? BinaryWriterならそんな無駄は出ないぜ(出たからどうだという話もあるが)。 Marshal使ったんなら別だが。
Marshalを使ったのだろうけど、アラインメントを理解してない。
もし使うならちゃんと調べて使えと書いてたのに・・。 LayoutKind.Sequentialの構造体アライメント(Pack)/構造体のサイズ(Size)を指定する もしくはLayoutKind.ExplicitにしてSizeを指定し、FieldOffsetで適切に配置してやればおk
こうゆうケースではバイトオーダーも気にしなきゃいけないのかな? BinaryWriterだとリトルエンディアン固定で考えればいいはずだけど。
うん、バイトオーダーが違う環境だと問題が起きるよ。 もしそういうケースで使用するなら、出力ファイルのバイトオーダーをどっちかに揃えてやらないといけない。 リフレクション使ってバイト列を逆にするやつ作っとくと楽かも
まあ普通はIPAddress.HostToNetworkOrderとかつかう。
C#でUACのLowモードで他のプロセスを実行させる方法って、ありますか? .NET Framework 2.0でやりたいのですが、C++でVista Win32 SDKを使わないと無理でしょうか?
TcpClientを作成して、接続⇒データ送受信⇒切断を繰り返したいのですが、 TcpClient.Closeしてしまうと、再接続のときにまたNewしないといけないとか、 TcpClient.Client.DisConnectで接続を切って、再接続しようとすると例外が発生したり 上手くいきません。スマートな方法教えてもらえないでしょうか?
どんなのを指してスマートと言うんだ? TcpClientが一回の接続用に設計されてるのは変えようが無いが
487 :
485 :2008/06/20(金) 10:40:26
>>486 >TcpClientが一回の接続用に設計されてる
のような仕様なのであれば
>TcpClient.Closeしてしまうと、再接続のときにまたNewしないといけない
も納得がいくので問題ないです。
スマートというのは、
インスタンス一つで接続⇒データ送受信⇒切断と使いまわせたら、と考えてました。
一回の接続専用と割り切って,newするだけでリフレッシュできる設計もスマートだと思わない?
489 :
デフォルトの名無しさん :2008/06/20(金) 10:43:56
ポルナレフ呼んでくるぞ!?
TcpListener クラスとか使えたりするのかな?
491 :
デフォルトの名無しさん :2008/06/20(金) 11:58:42
Excelマクロを呼び出した後、クローズと終了はExcelから手動により行い たいのですが、COMオブジェクトの解放はExcelが起動されている状態でも 以下のやり方でOKなのでしょうか? Excel.Application xls = new Application(); Excel.Workbook wbk = (Excel.Workbook)(xls.Workbook.Open(〜省略〜); xls.Run(〜省略〜); //wbkクローズとxlsQuitは行わない Marshal.ReleaseComObject(wbk); Marshal.ReleaseComObject(xls);
短時間で大量に送受信をするなら使い回した方が、 そうでないなら毎回newするほうがスマートな気がするがどうよ
気のせいだ
494 :
デフォルトの名無しさん :2008/06/20(金) 12:44:14
スマートとか意識してる時点でアホ
>>492 > 短時間で大量に送受信をする
それならそもそもcloseしなければいい
そう言ってるんじゃないの?
そう言ってるな
498 :
362 :2008/06/20(金) 23:01:44
476様 ありがとうございました。 おかげでエラーがなくなりました ですが、ほかの部品(っていうのかな?)がまったく表示されなくなりました。 がんばって直したいとおもいます。画像について教えていただきありがとうございました。
499 :
498 :2008/06/20(金) 23:17:45
連スレすいません、さっきのほかのものがまったく表示されなくなった件なんですが、 自分では解決できそうにないので、とりあえずコードの一部をのせてみました。 もしこれだけで分かる方がいらっしゃいましたら、おしえてくださいませ。 おねがいします
わかりません。
501 :
デフォルトの名無しさん :2008/06/20(金) 23:48:32
>>499 多分ピクチャーボックスの裏に隠れちゃったんでしょ
背景として画像を表示してその上にボタンとか置きたかったら
FormのBackgroundImageプロパティに指定する方法もあるでよ
コンソールアプリケーションで データベースを使うのは無理でしょうか? (型付きデータセットなど)
使えるよ。何の制約もなく。
eClipのようなクリップボードソフトを勉強の為に作っているんですが 履歴データ読み込み時に、改行を含む文字列の固まりを個別に認識する為に 履歴データ出力時に何か目印となるものを出力しておきたいのですが 何かいい方法はないでしょうか。
テキストで書くなら、 元々の文字列に含まれてる改行を違う文字列に置き換えるとか 最初に何行あるのかのデータを書くとか
>>491 それで問題なかったはず。
気持ち悪いけどね。
508 :
504 :2008/06/21(土) 18:32:14
>>507 XMLについて調べてみましたが扱えない文字列等は発生しないのでしょうか?
>>505 ありがとうございます。参考になります。
なお、某所に以下のような記載がありました。
>eClip.datの形式はよくある、データをヌル文字(0x00)で区切り、末尾はヌル文字ヌル文字にするもの
これはC#でも同様な方法はとれるのでしょうか
509 :
504 :2008/06/21(土) 18:50:39
"\0"で書き込めました。お騒がせしました。
CRC32計算したいんだけど、ライブラリにない?
基本クラスライブラリには無い さがしゃすぐ見つかるがね
thnx。やっぱないのか。MD5やSHA1はあるのに、CRCはもう必要とされてないんだな。
はっきり言ってアプリケーションよりで使う意味はあんまりないんじゃね?
514 :
498 :2008/06/22(日) 00:08:04
わかりません。
日経BPのV C# 2005 アプリケーション入門って 本好評なんだけど やってみてさっぱり判らなく 自分自身にがっかりしますた オブジェクト指向って付いていけないよ・・・・・・・ もう俺も引退かな・・
>>516 日経なんか読むよりも触ってみた方がいい
オブジェクト指向よりまずはイベントにべた書きでも言語になれる事
そこからオブジェクト指向的にリファクタリングしていけばいい
518 :
デフォルトの名無しさん :2008/06/22(日) 18:12:44
ありがとうございます 2週間くらい読んで オブジェクト指向のところに入って チンプンカンプン アマゾンの書評には初心者向け とか 簡単に読み進めれるとか書いてあるのに 自分ときたら理解できずコード紙に張って手で追っかけ あっち飛んでこっち飛んで わからねええええええええええ 絶望・・・おれ終った・・・・・・ とういう感じでした 基本に戻って勉強します 相談みたいな感じになったけれども ありがとう
俺C#4年やってるけどオブジェクト指向わかりましぇーん
VisualStudioのツールボックスとかエクスプローラといった パネル(ウィンドウ?)はどのコントロールを使用しているのでしょうか?
厨房でもわかるのにわからないのか。
>>520 ドッキングウィンドウのこと? ドラッグで移動させたり独立ウィンドウになったりするやつ?
それなら基本クラスライブラリには無いよ。
523 :
デフォルトの名無しさん :2008/06/23(月) 09:45:12
>>506 有難うございます。
その言葉を頂き安心しました。
色々やってみた結果、Excel側でクローズする場合はReadOnly且つEditable=False
でオープンした方が良いという結論になりました。
TableLayoutPanelを使ってボタンコントロールを配置しています。 「追加」と「挿入」ボタンを設置し、追加の場合は単純なADDを、 挿入の場合は座標を取得してADDにcolumnとrowを指定してコントロールを挿入しています。 追加の場合は末尾に追加されていくだけなので問題ないのですが 挿入の場合、挿入したコントロールの箇所に更に挿入処理を(何度か?)行うと 順番が滅茶苦茶になってしまいます。 (下の図では最後は△が2つ続かないといけないのですが、(1,2)にある●の次に△が来ます) @AB @AB (1,1)に @AB (1,2)に @AB CDE →●を挿入 C●● →△を挿入 C△● →△を挿入 C△● FGH ●●D ●●● △●● Removeを行った場合も、"途中で挿入した位置を飛び抜かした位置に飛ぶ"ような現象もあるため ADD・Remove共にIndexを見てるのかとも思いましたが、どうにも原因が掴めません。 何か解決策があればお願いいたします。
525 :
デフォルトの名無しさん :2008/06/24(火) 21:57:17
すいません、質問よろしいでしょうか。 クラスtestのprintメソッドでProgramクラス内にある変数 i の内容を表示させようとしたのですが、 「静的ではないフィールド、メソッド、またはプロパティ'ConsoleApplication1'で、オブジェクト参照が必要です。」(エラー位置 20行 37列) と怒られてしまって前に進めない状態になってしまいました。どのように修正すればよろしいでしょうか。 using System; using System.Text; namespace ConsoleApplication1 { public class Program { public int i = 100; public static void Main(string[] args) { test wao = new test(); wao.print(); } } class test { public void print() { Console.WriteLine("{0}",Program.i); //ここが 20行目 37列目です。 Program.1 がおかしいと怒られました。 } } } どうぞよろしくお願いします。
526 :
524 :2008/06/24(火) 22:00:55
最後のは(1,2)ではなく、(2,1)でした。 すみません。
何がしたいのか良くわからないプログラムだ。 class test のクラス内でiもProgramも参照不可能だし。 Programはクラス名だし、何をしたいんだ?
wao.print(this); } } class test { public void print(Program p) { Console.WriteLine("{0}",P.i); //ここが 20行目 37列目です。 Program.1 がおかしいと怒られました。 う〜〜ん、これでどうだ? 検証してないけど。
testもProgramも同じclassってもんだ。 だからProgramもtestと同じようにあつかわにゃならん。 testを使うときにまず何をした?
とりあえず、static をいれたら動く public int i = 100; ⇒ public static int i = 100; なにがしたいかは わからんが
C#でメッセループするときの負荷100%防止策ってThread.SleepでFA? なんかWinAPIのGetMessageに比べて間抜けに見えるんだが俺だけなんだろうか。
kwsk いじりがいがありそうな
>>525 何がしたいのか分からないが、エラーメッセージそのままじゃない?(時々、エラーメッセージの日本語が理解できないときがあるが俺だけ?)
>>528 後半はそれで問題ないと思う(正しいパラメータが渡されてくるなら)
ただ、このコードを見てると凄く頭が痛くなる。テスト目的でも設計が糞すぎてうんこしたくなる
print()メソッドはProgramクラスに入れるべき
意図もまったくわからないのに設計語っちゃうんですか?
>>480 おそくなってすいません
Pack=1ってやってみました
おかげさまでサイズが小さくなりました
それでもboolが4バイトw
まーだアラインメント理解してないのか
なに?それ?
538 :
531 :2008/06/25(水) 00:54:16
>>532 俺宛?
最近C#とManagedDirectXに手出し始めたんだけど、解説書とかあんまし無いんでググってみた。
とりあえずゲームパッドを使いたいんでDirectInputを見てたんだ。
++だとPeekMessageで高負荷、GetMessageで低負荷みたいな使い分けがあることとかを学習した。
C#でもDllImportでコレやるんか。コレってアンマネジになるんかな。例外処理とかメンドそうだなって思ってたところに、
while(true)とSleep()を使ったループを発見したんだ。
コレだとVSも静かだし便利だ。ウン。でもコレってダサいよね、ってことでここに来てみた。
>>535 BooleanはCLI内で4byteで、0x0の時にfalseだとどっかで読んだ記憶が。と、過去レス読まずに答えてみる。気にしないでスルーしてくれ
>>538 MDXはWinForm依存でタイマーで間に合う程度のものを対象としているからしょうがないわな。
Sleep使ってるのはかなりやっつけのサンプルプログラムだと思う。
もうXNAへシフトしてるから資料がないのはしょうがない。
XNAならシビアなタイミングのゲームにも対応できる。
まさかManagedDirectXがアンマネージだとか思ってないよね?
>>531 http://pc11.2ch.net/test/read.cgi/gamedev/1212989813/31-35 MDXとWinFormsの組み合わせでゲームループを実装するならこれが普通。
GetMessageとPeekMessageが低負荷/高負荷ってのはちょっと違うな。
GetMessageだとあるFPSを維持するのにタイマメッセージを使う必要があるが
これは精度が悪すぎて紙芝居ゲーのまったりFPSですら実現が難しい。
なので通常はマルチメディアタイマーで自前で前フレームからの時間を
計測しつつPeekMessageでぶん回し、CPUの食いかたが気に入らないなら
適度にSleepを差し挟む。
これはWin32だろうがMDXだろうがXNAだろうが裏でやることは全然変わらない。
タイミングを通知するだけで付加情報のないイベント(たとえば下のようなものです)を 発生させる度にEventArgsのインスタンスを生成するのは無駄なような気がするのですが、 EventArgsのインスタンスを使い回しても問題ないものなんでしょうか。 public event EventHandler Tick; protected virtual void OnTick(EventHandler e) { if (Tick != null) { Tick(this, e); } }
つ EventArgs.Empty
>>543 おお、早速のご指導ありがとうございます。見落としていました。
EventArgsって何のためにあるんだ?
後で拡張しやすくするため
どんな風に拡張しやすくなるんだ?
>>545 反変性のためじゃない?
具体例を挙げると、
this.Hoge += (object sender, HogeEventArgs e) => { };
通常はこうするところを、
this.Hoge += (object sender, EventArgs e) => { };
こうかける。つまり、EventHandlerデリゲートは
規約に従っている全てのイベントに使えるということ
[MSDN] デリゲートの共変性と反変性 (C# プログラミング ガイド)
ttp://msdn.microsoft.com/ja-jp/library/ms173174.aspx
引数何も使わないなら引数なくてもいいじゃん HogeEventArgsのやつに突っ込みたいなら this.Hoge += (sender, e) => SomeAction(); こうでいいじゃん
// ラムダ式や匿名メソッドは限定的なんで除外。 例えばイベント引数が必要ないからって event Action Hoge; なイベントを作ったとする。 でこのイベントを色々なところで使って記述した。 その後ある場合に限ってイベント引数が必要だってことになった。 ここで event Action<Hage> Hoge; に置き換えると今までの記述全部書き換えにゃならない。 今まで書いてたのはそんな引数必要ないのに。 ていうときにEventHandlerパターンに従ってると簡単に拡張できるの。
551 :
548 :2008/06/25(水) 13:57:52
あ、ごめん。ちゃんと書くべきだった 一応、そのラムダ式と同じシグネチャを持つデリゲートのつもり void Method1(object sender, EventArgs e) { } があるときに、(Hoge, Fugaがなんであれ) this.Hoge += this.Method1; this.Fuga += this.Method1; とかけると
control.Invokeの場合にEventHandlerかMethodInvokerの形にしておくと パフォーマンスがいいようなことがMSDNに書いてある。 計ったことはないけど。 普通のイベントでは特に差はなかった。
パフォーマンスもまあそうだけど、 問題はリフレクションで動的バインドされてしまうこと。
554 :
531 :2008/06/25(水) 19:31:41
Timerは論外
…Xnaのほうがゲーム作るなら簡単だぞ?念のためにいっとくが。
例えばそのInvokeの処理内で例外投げるとスタックトレース取れないとか。
それってリフレクションのせいなの? 初めて知った
正確には、リフレクションのせいで例外がすべてTargetInvocationExceptionにラップされ、 それを解除するためにInvokeでInnerExceptionが再スローされ、 結果そこまでのスタックトレースが空になる。
と思ったけどMethodInvokerでも駄目だった勘違いスマソorz
結局リフレクションはしてるの?
叫んでる
それはリフレイン
delegateのInvokeとSystem.DelegateのDynamicInvokeだと性能が段違い。 DynamicInvokeはまともにリフレクションを使っている。 control.Invokeは引数がSystem.Delegateというのがポイント。 EventHandlerとMethodInvokerが特別扱いなのはこういう感じなのかと予想している。 void Invoke(Delegate d, object [] args) { EventHandler eh = d as EventHandler; MethodInvoker mi = d as MethodInvoker; if (eh != null) eh(args[0], (EventArgs)args[1]); else if (mi != null) mi(); else d.DynamicInvoke(args);
>>565 適当にソース追っかけてみたけど大体そんな感じだな
InvokeMarshaledCallbackDo()で、EventHandler、MethodInvoker、
WaitCallbackはそのまま呼び出して、それ以外はDynamicInvokeと
以下は大まかな流れ。とりあえず、参考までに
Invoke()
-> MarshaledInvoke()
-> PostMessage()
WndProc()
-> InvokeMarshaledCallbacks()
-> InvokeMarshaledCallback()
-> InvokeMarshaledCallbackHelper() (ExecutionContext.Run()からデリゲート経由)
-> InvokeMarshaledCallbackDo()
TreeViewのデフォルトで、キーボードからaとか押すと aから始まるノードに移動するが これはどうやって制御すんの?
TextBox.Text="hoge¥thoge"; てやるとタブが打てると思うけどタブが何文字分かって設定できますか?
TAB幅の設定はAPIだと、EM_SETTABSTOPS でやるんだけど、 これ直接SendMessageすればいけるかも。
>>569 ありがとうございます。
apiよくわからないけどググって来ます。
>>565-566 EventHandlerとEventHandler<EventArgs>で互換がないから要注意ということですな。
これでキャストエラーになってしまう。
EventHandler<EventArgs> h = (sender, args) => { };
Delegate d = (Delegate) h;
EventHandler x = (EventHandler) d;
EventHandler<EventArgs> h = (sender, args) => { }; EventHandler x = new EventHandler(h);
573 :
デフォルトの名無しさん :2008/06/26(木) 21:02:51
C#ってJAVAでいうJUNITってありますか?
nunit
575 :
デフォルトの名無しさん :2008/06/26(木) 22:29:57
(フィールドを追加更新の為)いらなくなったデータソースを削除したいのですが 「データエクスプローラー」のタブからは右クリック削除できるのですが 「データソ−ス」から消すにはどうすればいいのでしょう 消えなくて1時間ほど格闘中
「データエクスプローラー」のタブからは 右クリックで、データ接続は削除できるのですが 「データソ−ス」のタブから データセットを消すには どうすればいいのでしょうか? 変な文章になっていたので訂正
MbUnit TestDriven.NET
だ・・わからん 寝ます・・・
なんでVisualStudioがないんだよう
エディタの置換機能を作ろうとしてるんですが、 文字列中の特定の文字を、一度に全部ではなく 1個ずつ順番に置換するのに便利な関数などはありますか? 例えば、Cのstrtokなどのような
Regex の Match.NextMatch
ありがとう、調べてみます
C++からC#を使い始めてディープコピーに戸惑っています。 クラスを使う必要があるときC++のでは Class A; vector< A > B; for( int i = 0 ; i < 5 ; i++ ) { A.Init(); ・・・ B.push_back( A ); } とか書いてたんですがC#だと List< A > B; for( int i = 0 ; i < 5 ; i++ ) { Class A = new Class(); ・・・ B.Add( A ); } にしないとうまく動かない。 こういうのってC#にそった考え方に変えるべき? それともClass内部でディープコピーさせておくべき?
普通にnewしろ
585 :
デフォルトの名無しさん :2008/06/27(金) 23:07:31
ぐぐる前にここで聞け
しまった ここはふらっとだった
>>583 C++のクラスは値型。
C#のクラスは参照型。
589 :
デフォルトの名無しさん :2008/06/28(土) 01:02:14
RPGツクール最新作、XBOX360用のソースコードを出力する機能を搭載、Xbox Live経由で全世界に配信も
http://namidame.2ch.net/test/read.cgi/news/1214581472/ エンターブレインが発売を予定している「RPGツクール」の最新バージョンにおいて、
XBOX360に対応することがわかった。
XBOX360への対応は、PC上のRPGツクールで作成したプロジェクトを、XNA Game
Studio用のプロジェクトに変換(C#及びXNAを用いたソースコードとして出力する)と
いうものになるという。
この機能の実装により、従来ではRPGツクール内で実装するには難しかった機能を
ソースコードレベルで編集し調整を行うことが可能となるとともに、完成したゲームの
配布は「XNA Game Creators Club」を通して行うことが可能となる。
日本発のゲームエンジンとして、商用ゲームの開発に利用といった展開に期待できる。
また、RPGツクールとXNA Game Studioの連携により、段階を踏んだゲーム開発者の
育成にも期待が持て、教育機関への普及も考えられる。
http://news4xbox.blogspot.com/2008/06/rpgxbox360.html
所詮アスキー信用できん
591 :
576 :2008/06/28(土) 13:41:55
VS2008 独特の問題なのか 3日めググッテまいります
VS2008スレに移動します すまんかったの
タイトルバーを表示せず、かつサイズを変更できるウィンドウを作成したいのですがどうすればよいのでしょうか?
ControlBox=falseでよくなかったっけ
よくないよ
FormのText入れたままとか言わないか?
>>598 エンターブラインは古いほうのアスキーの子会社じゃん。
ブラインって何だよ。コピペしたら間違えたがな糞が
>>597 ありがとうございます。Textを空にしたら出来ました。もう少し調べるべきでした。
たびたびの質問で申し訳ありませんがウィンドウのサイズ変更で横しか変更できないようにするにはどうすればよいのでしょうか?
つまり、高さの変更は出来ないが、幅の変更は出来るということです。
よろしくお願いいたします。
MaximumSize/MinimumSize
603 :
531 :2008/06/29(日) 03:23:49
604 :
603 :2008/06/29(日) 03:44:36
ごめんなさい。自己解決しました。Sys.Win.Forms.SendKeys
そういう使い方ならDirectInput使わなくてもjoyGetPosでいいんじゃね
>>606 うちじゃ0.2秒くらい
ADSL+Celeron1.2G程度
環境によっては WebClient の初回動作がめちゃくちゃ遅い 原因は不明
質問です。。。 ボリュームをコントロールするためにはどこをいじればいいのでしょうか? delphiやらwin32やらでは見つかったのですが・・・。
Win32APIをDllImportで使うのよ CodeProjectとか漁ればライブラリあるかもしれないけど
>>608 便乗して質問なのですが、Webブラウザで
webBrowser1.Navigate("
http://hoge.com/index.html#1 ");
とすると、表示する時にカクッ、カクッと2段階にぎこちなく表示されます。
#1無しならば、もちろんスッと表示されますが、#1をつけてもスムーズに表示する
ような方法はありますでしょうか?
プロキシの自動構成が走ってるんじゃね?
614 :
611 :2008/06/29(日) 23:14:00
>>612 ブラウザで普通に開く時よりもかなりもたつくので、何か方法があると思ったのですが・・・
>>610 直でアクセスですね。 ありがとうございました。
タスクトレイに格納した後に,その上でマウスホイール転がしたーとかを知る方法ってあるかな??
フック
船長
?
!
☆
し
623 :
616 :2008/06/30(月) 06:30:32
なるほどフックですか。どもです。
.net3.0って2.0の上位互換? 2.0で作ったのって3.0で動きますか?
互換つーか.NET 2.0に幾つかライブラリを増やしたもの。2.0部分は変わってない。
626 :
デフォルトの名無しさん :2008/06/30(月) 14:58:26
WinAPIの構造体を.NET用に書き出すとき、 char[定数] はどれを使えばいいですか? 構造体中で長さを指定できずに困っています。
DllImportに手を出すならMSDNの「アンマネージ コードとの相互運用」以下全部熟読。
どっひゃー VC#2008って win2kに入らんのかょ・・・・orz
630 :
583 :2008/06/30(月) 16:35:22
>>584 、587
C#にそってnewを使っていこうと思います。ありがとう。
もうひとつ質問なんですが
public class TEST_A()
{
}
abstract public class TEST_B< T > where T: TEST_A, new()
{
}
↓ここのTに他で定義されたTEST_B< T >を入れたい
public class TEST_C< T > where T: TEST_B, new()
{
}
こんな風にしたいんですけど、どう書けばいいんでしょうか。
public class TEST_C< T > where T: TEST_B<T>, new() { } こうじゃないの?
632 :
627 :2008/06/30(月) 16:52:13
>>628 ありがとうございます。
文字列に対する既定のマーシャリングの部分で質問させてください。
char[]を含む構造体を渡して、参照先で値を受け取るのが目的です。
char[]としてはByValTStr属性が適合しそうなのですが、String型ではアンマネージな参照先で値を変更してはいけないというような記述があります。
しかし、構造体内ではStringBuilderは無効であり、文字列バッファのサンプルではStringBuilderを引数に直接渡すものしかありません。
構造体内で文字列バッファを使用するにはどうすればよいのでしょうか。
文字列のマーシャリングんところにあるだろー?
634 :
デフォルトの名無しさん :2008/06/30(月) 18:55:38
ComImportあたりを使って実装されたDirectXラッパーライブラリはあるでしょうか? Managed DirectXだと1対1の実装ではないので、Cで書いたプログラムを移植するのに わけがわからなくなってしまっているので探しているのですが。 自作しようかと思ったのですが、あまりに壮大すぎて無理そうですし。
>>629 IDEがほとんど一緒で変わっていない2005でいいじゃん。
>>631 それも試したけど動きませんでした
質問内容とは少し違うけど、結局ほしいのはメンバ関数だったので
こんな感じでやったら動きました。 ありがとう。
public class TEST_A { }
public interface TEST_B_Interface
{
void TEST_B_Func();
}
abstract public class TEST_B< T >
: TEST_B_Interface
where T: TEST_A, new()
{
public void TEST_B_Func() { }
}
public class TEST_C< T > where T: TEST_B_Interface, new()
{
TEST_C()
{
T data = new T();
data.TEST_B_Func();
}
}
コンパイル(ビルド)した日時を適当な Labelに入れたいんですけど何かいい方法ありませんか? 例えば、「バージョン情報」の項目の一つとして、 ビルドした日時を入れておける、みたいな感じなんですけど。
>>637 そういうの生成するタスクかコードジェネレータ書いてビルドプロセスに
入れる。
>>634 ラッパーというとSlimDXというのがあるな
中身は見てないから、どんなものかはわからんが
勉強でwebサイトを作ろうとやっているわけなんですが、 アップ時に、どうしても Parser Error Message: Could not load the assembly 'App_Web_default.aspx.cdcab7d2'. Make sure that it is compiled before accessing the page. と出てきてしまい、アップが出来ない状況です・・・・・ <%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_default.aspx.cdcab7d2" %> が悪いと出てくるわけなんですが、どうすればいいのか理解ができない状況です・・・ もし、ここが悪いんじゃね?っていうのがあれば教えていただければ幸いです。
アップって何?
笑ったら負けよアップップ
>>641 すません、言い方が悪かったす。
ffftpでアップロードして見てみたところ、上記のエラーがでてきた感じでした。
板違い
>>644 板違い扱いなんすか?orz
すんませんした。
>>646 すんません。ありがとうございます。そっちで聞いてみますね。すいませんでした。
がんばれー
649 :
デフォルトの名無しさん :2008/07/01(火) 21:08:43
Control.OnPaintメソッドでPaintイベントを発生させるようなんだけど、 OnPaint自体は誰が起動してるんですか? あと、OnPaintをオーバーライドするのと、Paintイベントを ハンドラで処理するのはどっち使っても同じことなんですか??
OnPaintはそのコントロール自身が内部から呼んでる 派生クラスではOnPaintオーバーライドが推奨
かぶさってるウインドウが動いたとかなんとかでOnPaintは勝手に呼ばれるんだろ
OnPaintの前はWM_PAINTメッセージだな
653 :
デフォルトの名無しさん :2008/07/02(水) 16:10:09
アプリが非アクティブのときにもtooltip.showでツールチップを表示したいんですが、どうしたらいいでしょうか? tooltip.ShowAlwaysでは駄目だったのですが・・ tooltip.showはOnMouseMoveから呼んでいます。
リストボックスのアイテムに変更があった場合にイベントを起こしたい のですが何かいい方法はないでしょうか。
自分のプログラムで変更してるんじゃないの?
派生クラスを作ってイベント起こせ
WPFならObservableCollection
サイズ小さくすればいいじゃん
panel引っ張って小さくしてももスクロールバーが表示されるようになるだけで駄目なんだ datagridview自体を小さくすればいいって事?
> panel引っ張って小さくしてももスクロールバーが表示されるようになるだけで駄目なんだ 面白い冗談だな
boolのサイズって4byteだよね? Marshal.StructureToPtrで1byteにならないよね? ちょっと独り言
boolは1byte
マーシャリング後の(Win32的な意味での)BOOLは4byte
typedef int BOOL;
よく知らんけど、boolは4byteでしょ。 true , falseで設定をメモリー上に保存すると無駄にメモリーを消費するから バイト配列に1 , 0で保存したほうが良いとどっかで読んだよ。
boolは1byte
少なくともSystem.Boolean(=C#のbool)のサイズは1byte
あーboolは2バイトか
はいはい 釣りはいいから
unsafe { Console.WriteLine("sizeof(bool) = {0}", sizeof(bool)); Console.WriteLine("Marshal.SizeOf(typeof(bool)) = {0}", Marshal.SizeOf(typeof(bool))); } 結果 sizeof(bool) = 1 Marshal.SizeOf(typeof(bool)) = 4
ほらね
structに配置した場合のアラインメントが4バイト境界になるんだよね。 boolはなぜか。
struct{ bool; bool; } とか struct{ fixed bool[2]; } でも8バイトになるの?
struct MyData1 { public bool Data1; public bool Data2; } unsafe struct MyData2 { public fixed bool Data[2]; } 結果 sizeof(MyData1) = 2 Marshal.SizeOf(typeof(MyData1)) = 8 sizeof(MyData2) = 2 Marshal.SizeOf(typeof(MyData2)) = 4
Monoだとサイズが違ったりとかしそう
>>680 マーシャリング後のサイズは環境に合わせて変わるで正解よ。
そもそもマーシャリングというのがそういうもの。
しない
>>676 ごめん訂正
structの長さは中に含まれる型のうち最大のものに長さ * n倍になってる
struct bb0 { bool b1; } => 1
struct bb1 { short a; bool b1; } => 4
struct bb2 { int a; bool b1; } => 8
struct bb3 { long a; bool b1; } => 16
2段目を見て勘違いしてた。
struct bb2 { int a; bool b1; bool b2; bool b3; bool b4; } => 8
これも8のまま
・・・独り言のつもりがとんでもないことに
なってない
(´・ω・`)ちぇ
688 :
デフォルトの名無しさん :2008/07/04(金) 11:11:07
Windows Formにて タスクバーウィンドウに表示されるコンテキストメニューから 「移動(M)」の項目を無効にしたいのですが、どのウィンドウ スタイルをイジくればいいのか分かりませぬ。 教えてエロい人 ( ;ω;)
そのかわりマウスでも動かせなくなるけどな。
質問させてください。 WindowsVistaマシンにて、ProgramFiles配下にA.exe とB.exeを配置し、 A.exeからB.exeを起動するようなプログラムを組んだ場合 uacにひっかかるのでしょうか? 試せばすぐに判ることだとは思いますが、 現在、Vista環境が無いため、試せないので・・・ ご教授お願い致します。
起動は問題ないよ でもこのくらいすぐにわかるくらいに 勉強したほうがいいよ 絶対役に立つ
693 :
さむくん :2008/07/05(土) 00:49:19
今晩は。 C#からアンマネージのdllを呼び出しています。スレッドセーフにするため スレッド独自のメモリを割り当て使用する(TlsAlloc())予定ですが... dllMainのプロセス起動/終了は1回行われますが、予定外のスレッド終了(DLL_PROCESS_DETACH)が 3回発生しています。デバッガで見ると、 スレッドxxxxはコード0で終了しました が4行出ています。(現在はマルチ処理は組み込んでいません) また、スレッド開始は全く発生していません。 C#からC++のdllを呼び出す時は、TlsAlloc()は使用してはいけないのでしょうか? どなたかご存知の方いましたら教えてください。
スレッドは勝手に作られる
デバッガのせいとか
>>693 ぜんぜん問題ないな。
case DLL_PROCESS_ATTACH:
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "DLL_PROCESS_ATTACH\r\n", 20, &len, NULL);
tlsindex = TlsAlloc();
TlsSetValue(tlsindex, GlobalAlloc(GPTR, BUFSIZE*sizeof(int)));
break;
case DLL_THREAD_ATTACH:
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "DLL_THREAD_ATTACH \r\n", 20, &len, NULL);
TlsSetValue(tlsindex, GlobalAlloc(GPTR, BUFSIZE*sizeof(int)));
break;
case DLL_THREAD_DETACH:
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "DLL_THREAD_DETACH \r\n", 20, &len, NULL);
GlobalFree(TlsGetValue(tlsindex));
break;
case DLL_PROCESS_DETACH:
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "DLL_PROCESS_DETACH\r\n", 20, &len, NULL);
GlobalFree(TlsGetValue(tlsindex));
TlsFree(tlsindex);
break;
VC#Express2005で使われていないメソッドやクラスを一気に消す方法 もしくは、一覧を表示する方法は無いですか?
まずは「使われていない」っていうのがどういうことかを もう少しくやしく
すみません。 プログラム内で参照されていない、で 理解頂けますでしょうか・・・・
usingの整理はVC#2008の新機能(Expressでも使える) [編集]−[IntelliSense]−[using の整理]−[未使用の using の削除] あと[usingの並べ替え]でABC順に並べ替えたりもして地味に便利。 残念ながらVC#2005では使えない。
ん、よく読まずに書いたけどusingの話じゃないのね それって無理じゃないか?
>>700 ありがとうございます。
便利そうですね。win2000なので、VC#2008入れられなくて残念です。
>>701 ええ。usingじゃなくて 単にどこからも使われていないメソッドとかを一気に消したかったのですが、地道に消していくことにします。
ありがとうございました。
703 :
デフォルトの名無しさん :2008/07/05(土) 19:09:18
>>702 TSなら "コード分析の実行"すればわかるでしょ。
(Proにあったかどうかは失念)
それ以外なら FXCop 使うしかないけど 同様の結果が得られる。
アップストリームからの呼び出しのないメソッドは
CA xxxx で警告される
Proには無い
>>703 すみません。TSとは何でしょうか?
FXCopググって着ます。
706 :
デフォルトの名無しさん :2008/07/05(土) 20:02:16
>>705 (Visual Studio) Team System
Team System
>>706 ,707
ありがとうございます。
Expressなのでだめですね・・・・
709 :
デフォルトの名無しさん :2008/07/07(月) 04:31:32
C#で他のプロセス上のデータを読もうとしています Spy++で対象のオブジェクトを調べたところ、クラス名がListBox、 ウィンドウキャプションがListBox1ということが分かりまして IntPtr hwp = FindWindow("ListBox", "ListBox1"); としました ListBoxはカラム数が1で、単純なテキストデータが何行が書かれています。 このあと、hwpからListBoxに書かれているそのテキストデータを 全て読み出すにはどうすればいいでしょうか? Marshal.PtrToStructureなどを試しましたがダメでした ご教示頂けると大変助かります よろしくお願い致します。
>>709 FindWindowで探せるはトップレベルのみ、
APIの使い方がわからないレベルならAPIスレ行ってから出直してくれ。
711 :
709 :2008/07/07(月) 06:54:25
>>710 トップレベルにListViewがあるんです
このコードまででウィンドウハンドルは取得できていて、
GetWindowText()を呼べばキャプションもちゃんととれます
知りたいのは取得したIntPtrから
どうすれば保持しているデータを取得できるのか、ということです
ListBoxなのかLixtViewなのかはっきりしてくれ
>トップレベルにListViewがあるんです って段階でアレだが。 本当にウィンドウハンドルとれてるなら LB_GETTEXTLEN LB_GETTEXT Marshal.AllocHogeHoge/FreeHogeHoge でできるが
別プロセスならVirtualAllocExやらReadProcessMemoryやらが必要な気が
>>713 SendMessage()とLB_GETTEXTでいけました
ありがとうございます!
716 :
デフォルトの名無しさん :2008/07/07(月) 19:43:14
ListのForEachでbreakするにはどうすればよいでしょうか? とりあえずnew List<int> {1, 2, 5, 10}.ForEach((int i) => { if (i == 5) break; Console.WriteLine("" + i); }); と書いたら「break または continue に対応するループがありません」と言われました。
>>716 List.ForEach( Action ); はループじゃなくて関数だから警告がでるんじゃない?
ラムダ式を使ってまでForEachを使うメリットってあるの?
TakeWhile使え
素直に foreach を使うか、すすめはしないが例外を使う try { ls.ForEach( i => { if (i == 5) throw new ForEchoBreakException() ; Console.WriteLine(i); }); } catch (ForEchoBreakException) {}
>>718 TakeWhileは遅延評価になるから、似たような拡張メソッドを自作する必要があるな
DataGridView_SelectionChanged(object sender, EventArgs e) { DataGridView.ClearSelection(); } 上記のタイミングで選択解除しても、カーソルだけは残ってしまうのですが、 カーソルも消す簡単な方法ってありませんか?
一般にselectedとcursoredは別もんだぞっと。 CurrentCellプロパティ
>>722 thx
DataGridView_RowPrePaint(object sender,DataGridViewRowPrePaintEventArgs e)
{
e.PaintParts &= ~DataGridViewPaintParts.Focus;
}
できた
>>716 new List<int> { 1, 2, 5, 10 }.TakeWhile(i => i != 5).ToList().ForEach(Console.WriteLine);
猫でも分かるCプログラミングというサイトや本がありますが 分からなかった場合、読者は何になるんですか
ミジンコ
百舌谷:「C#スレでCを聞くとは、猫遥か下の頭の狂ったミジンコが垂れ流した糞尿以下の存在だ。」
「猫でも分かるが○○には分からないCプログラミング」
729 :
729 :2008/07/09(水) 00:24:06
#include <stdio.h> #include <stdlib.h> #define HIGH_VALUE 32767 typedef struct {int seihin; int suryou;} rec; readF(FILE *F, rec *R) { if (fscanf(F,"%d %d",&R->seihin,&R->suryou)==EOF) {R->seihin=HIGH_VALUE;return(EOF);} else return(!EOF);} print_page(rec *IR, int I_eof){static int line,page=1,curP=1; switch(curP) { case 1:goto L1; case 2:goto L2; }; L1: while (I_eof!=EOF) {line=1; printf("\n 製品 入庫数 ページ%d",page);line++; while (line<=7&&I_eof!=EOF) { if (IR->seihin==-1) printf("\n%9s %9d","合計",IR->suryou); else printf("\n%9d %9d",IR->seihin,IR->suryou); curP=2;return(0); L2:line++; } printf("\n\n----------------------------\n"); page++; } }
730 :
729 :2008/07/09(水) 00:26:28
つづき main(){FILE *T;int T_eof;rec TR, IR;int seihin,gokei; T=fopen("nyuko.DAT","r");T_eof=readF(T,&TR); while (T_eof!=EOF) {seihin=TR.seihin;gokei=0; while (seihin==TR.seihin&&T_eof!=EOF) { gokei+=TR.suryou; IR.seihin=TR.seihin;IR.suryou=TR.suryou;print_page(&IR,0); T_eof=readF(T,&TR); } IR.seihin=-1;/*"合計"*/;IR.suryou=gokei;print_page(&IR,0); } fclose(T); return(0); } C言語をC#に変えなくちゃいけないんですが助けてください!!
マルチは誰も相手にしないよ。
732 :
729 :2008/07/09(水) 00:42:41
マルチってなんですか・・?すいません
>>732 ,.-─ ─-、─-、
, イ)ィ -─ ──- 、ミヽ
ノ /,.-‐'"´ `ヾj ii / Λ
,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
ノ/,/ミ三ニヲ´ ゙、ノi!
{V /ミ三二,イ , -─ Yソ
レ'/三二彡イ .:ィこラ ;:こラ j{
V;;;::. ;ヲヾ!V ー '′ i ー ' ソ
Vニミ( 入 、 r j ,′
ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ
ヽ ヽ -''ニニ‐ /
| `、 ⌒ ,/
| > ---- r‐'´
ヽ_ |
ヽ _ _ 」
ググレカス [ gugurecus ]
(西暦一世紀前半〜没年不明)
彼が生前残したHP
http://www.google.co.jp/
734 :
729 :2008/07/09(水) 01:56:08
すいませんよくわからなくてやってしまいました。 今日中にやらないといけないのでナントカお願いします(_ _);
スレタイ読めないの?
736 :
729 :2008/07/09(水) 02:09:20
C#に変換するのができないんですが、Cのとこにいったほうがいいんでしょうか?すいません
そんな泥縄通用せんよ。
739 :
729 :2008/07/09(水) 02:12:40
どうすればいいんでしょうか?
>>739 答えが降ってくるまでマルチ連投しれ。
それか,朝まで自分でがんがれ!
メソッドの戻り値って、配列とコレクション、どっち使うことが 多いんでしょう? コレクションのが便利だと思うんだけど、 .netのクラスライブラリは配列のが多いよね? 配列じゃないと中に入れてるものの型が分からないから?
用途による 型はジェネリック使えばいいし そうじゃなくても型指定されたコレクション作ればいい
C#の2008EEってコンポーネント作れないんでしょうか? VS2008買わないとダメなんでしょうか
>>741 ガイドラインに「プロパティの型を配列にするな」みたいなことが書いてあった気がする
コレクションなら普通にプロパティにすればいい
>>743 System.ComponentModel.Component を継承するだけだろ
今までJava程簡単な言語はそうそう無いんじゃないかと思ってたけど、C#がその上を行くとは思わなかった VBにも劣らないね、たぶん!
>>745 宣伝ではないが、Java数年C#数年やったが、JavaのはC#に総て引っ越した。
本業は別言語だがな。趣味でさくっと書くや、簡単なツールにはC#が速くて楽。
VBは昔から嫌いだった。 (釣られた?
javaはサーブレット/JSPなとこだけ残ってるな、うちは。 sparcのSolarisでapacheで動くようになったら全部移ってもいいが・・・
GetKeyboardStateを使ってCでいうif ( KeyTbl[VK_RETURN] & 0x80 ) のようなビット演算を行いたいのですが、どのように記述すれば 良いのでしょうか。↓のような感じでは怒られてしまいます…。 byte[] keystate = new byte[256]; GetKeyboardState(keystate); if (keystate[(byte)Keys.ShiftKey] & 0x80 != 0) { }
演算子の優先順位ぐらい基礎以前だろ
>>741 その場で新しく作るなら配列が一番速いからじゃね
>>751 有り難う御座いました。期待通りの動作が出来ました。
精進します。
754 :
いのしし :2008/07/10(木) 14:13:33
始めまして、 C#でプログラミングをしていて、GUIコントロールに拡張プロパティを 追加しようとしてつまづいてしまいました。 状況: IExtenderProviderの実装クラスを作成して、フォームに張る事で、 TextBox等にプロパティを追加する事には成功したものの、 DataGridViewの子要素(例:DataGridViewTextBoxColumn)に対して、 プロパティが追加できない。 Webで調べて、IExtenderProviderServiceを使えばなんとかなるかもしれない (思い違いかもしれませんが・・・)ところまで、調べたのですが、ここで お手上げ状態になっています。 拡張クラスを使う手も考えたのですが、横断的関心事の 解決に使いたいので、拡張プロバイダでの解決方法を めざしています。 どなたか、この問題に対する解決方法をご存知ありませんでしょうか? よろしくお願いいたします。
マルチは感心しないな
756 :
いのしし :2008/07/10(木) 15:07:04
> 755 申し訳ない。 他方での反応が良くなかったので、人口の多そうな こっちに移って来たというのが、実状です。
758 :
いのしし :2008/07/10(木) 15:31:32
>757 クローズしてきました。
ボタン押した際にタブページ(コレクション?)を増やすのってどうやんの? あと増やしたタブページ内にリストビュー生成したいんだけど方法がわかんね
適当にデザイナでTabControlにタブページ幾つか追加しといて、ついでにページにリストビューも追加して Form1.designer.csだっけ、それのInitializeComponentメソッドの中見ればいいよ
>>760 initialize時に生成してるのパクればいいのか、ありがとう
762 :
デフォルトの名無しさん :2008/07/10(木) 19:27:31
あるフォルダ内にあるファイルのうち、 「隠しファイル属性の設定されていないファイル」 をループで処理したいと考えています。 DirectoryInfo dir = new DirectoryInfo(@"C:\foo"); FileInfo[] files = dir.GetFiles("*.txt"); foreach (FileInfo f in files) { FileAttributes fas = f.GetAttributes; if ((fas & FileAttributes.Hidden) != 0) { [隠しファイル以外のファイルの処理] } } という方法は考えたのですが、他に何か良い方法はありますか? 数が多いので、できる限りループ回数は減らしたいです・・・ (ファイル数は60,000以上で、今後増える一方)
http://dobon.net/vb/dotnet/graphics/setremaptable.html このサイトを参考に勉強しているのですが、
//ColorMapオブジェクトの配列(カラーリマップテーブル)を作成
System.Drawing.Imaging.ColorMap[] cms = new System.Drawing.Imaging.ColorMap[]
{
new System.Drawing.Imaging.ColorMap(),
new System.Drawing.Imaging.ColorMap()
};
とする際に配列の長さを2以上、たとえば10にしたいときに
System.Drawing.Imaging.ColorMap[] cms = new System.Drawing.Imaging.ColorMap[10];
とすると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」のエラーが出てしまいます。
すごく基本的なところで躓いている気がするのですが、どう書いたらいいのでしょうか?
>>762 ユーザや他のプログラムが属性いじらないって保証があるならキャッシュするとかあるけど
基本的にそれでいいんじゃない?
>>763 配列の個々の要素もnewしないと駄目だが。
そのサンプルで { } の中でやってるみたいに。
>>764 レスありがとうございます。
{}のなかにnew System.Drawing.Imaging.ColorMap()をたくさん書けばその長さ確保できることは確認できました。
では10個必要なら10列書くしかないということでしょうか?
数字で指定できるスマートな書き方がありそうだと思ったのですが・・・。
ループって知らんの?
767 :
765 :2008/07/10(木) 20:25:55
>>766 宣言の段階でループってのはしたことなかったので発想できませんでした。
ありがとうございます。
768 :
762 :2008/07/10(木) 22:38:39
>>764 ああ、やっぱりこの方法なのですねー。
でも周りにC#使いいないから、そう言ってもらえて安心しました。
ありがとう。
>>768 C# 3.0ならこう書ける。
var cms = Enumerable.Range(0, 10).Select(dummy => new System.Drawing.Imaging.ColorMap()).ToArray();
そんな書き方するなよ
LINQクエリ式、リスト内包みたいなものだと思えば
>>769 の書き方もありかと。
SplitContainerのPanel1Collapsedしたときのちらつき軽減の方法ありませんか? DoubleBufferedはtrueにしてみたのですが改善できないのです
>>772 それは SplitContainer というか、Windows の仕様じゃね?
WinForms に限らず、ウィンドウリサイズするときってちらつくし。
そりゃバックグラウンドをいちいち描いてりゃ ちらつくわな
string s1 = "aaabbbccc"; string s2 = "bbb"; 上記2つのstringの共通した文字列(この場合bbb)をstringで取得するメソッドや方法はありますでしょうか?
string GetCommonString(string s1, string s2) { if (s1.IndexOf(s2) >= 0) return s2; if (s2.IndexOf(s1) >= 0) return s1; return ""; }
>>775 の書き方だとstring s2 = "dddbbbeee";の時にも対応できるようにしたいんじゃないの
>>775 string s1 = "aaabbbccc";
string s2 = "aaadddbbb";
の場合はどうしたい?
>>776-779 たしかに表現が悪かったです。
前方一致といったほうがいいのでしょうか
> string s1 = "aaabbbccc";
> string s2 = "aaadddbbb";
> の場合はどうしたい?
なのでこの場合aaaを抽出したいです。
string s1 = "aaabbbccc"; string s2 = "cccbbbaaa"; の場合はどうしたい?
情報を小出しにしてるとは思わないが泥縄状態だなぁ。今考えてるところだろう。
どんなプログラムのどの部分の部品としてこれを使いたいのかを説明したら? これを使わない解決法が得られるかもしれないよ
>>781 なるほど、いろんなケースが考えられますね・・・
> string s1 = "aaabbbccc";
> string s2 = "cccbbbaaa";
> の場合はどうしたい?
s1の先頭からs2の先頭の共通部分(この場合ccc)を取り出す
という説明ではどうでしょう
なのでこの場合cccを抽出したいです。
string s1 = "aaabbbccc"; string s2 = "caaabbbccc"; じゃ、この場合も"c"?
>>785 はい、そうなります
やはり一文字一文字比較して抽出したほうがよさそうですね
IndexOfですと共通文字列がわかっていることが前提ですし
string s = string.Empty; for (int i = s2.Length - 1; i >= 0; i--) { string ss = s2.Remove(i); if (s1.IndexOf(ss) > 0) {s = ss; break; } } return s; こんなかんじ?
string s1 = "aaabbbcccadd"; string s2 = "caaabbbccc"; これは "ca" ?
789 :
787 :2008/07/11(金) 10:55:11
間違えた for (int i = s2.Length; i >= 0; i--) { string ss = i == s2.Length ? s2 : s2.Remove(i);
791 :
787 :2008/07/11(金) 11:01:15
何度もすみません s1.IndexOf(ss) >= 0
暇つぶしに作ってたら仕様が違ってたみたいだが、せっかくなんで書く 二つの文字列の中で共通している連続文字列の一番長い部分を抜き出す場合のソース sCが答え i2をループさせずに0固定にすれば同じはず string sC = ""; int cntC = 0; for (int i1 = 0; i1 < s1.Length; i1++) { for (int i2 = 0; i2 < s2.Length; i2++) { int cnt = 0; while (true) { int ix1 = i1 + cnt; int ix2 = i2 + cnt; if (ix1 >= s1.Length) break; if (ix2 >= s2.Length) break; if (s1[ix1] != s2[ix2]) break; cnt++; } if (cnt > cntC) { cntC = cnt; sC = s1.Substring(i1, cnt); } } }
では、いまどきのC#風で class StrSep2 : IEnumerable<string> { string text; public StrSep2(string text) { this.text = text; } public IEnumerator<string> GetEnumerator() { for (int i=0; i<text.Length; i++) for (int j=0; j<text.Length-i; j++) yield return text.Substring(i, j+1); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } var ds = from t in new StrSep2(s2) orderby t.Length descending select t; foreach (var s in ds) if (s1.IndexOf(s) >= 0) { Console.WriteLine(s); break; } 一部いれかえれば仕様どおり public IEnumerator<string> GetEnumerator() { for (int i=0; i<text.Length; i++) yield return text.Substring(0, i+1); }
ソートが不要になってだいぶ効率アップ public IEnumerator<string> GetEnumerator() { for (int i=text.Length; i>0; i--) for (int j=0; j<=text.Length-i; j++) yield return text.Substring(j, i); } foreach (var s in new StrSep2(s2)) if (s1.IndexOf(s) >= 0) { Console.WriteLine(s); break; }
本当はC使ってポインタでガリガリ書く方が効率がいいんだが static class StringEx { public static IEnumerable<string> Suffixes(this string s) { for(int i=0; i<s.Length; i++) yield return s.Substring(i); } } --- var list = s1.Suffixes().OrderBy(s => s).ToList() var i = list.FindIndex(s => s > s2); if(i == -1) i = s1.Length; // s1.Substring(i-1) か s1.Substring(i) のどちらかで s2 との一致長が最大 // 境界に注意
this?
拡張メソッド。System.Coreを参照に行くのが気に食わない。
なんか仕様があいまいに感じるけど俺の頭が悪いせいか? たとえば検索キーがABCD(A,B,C,Dはそれぞれ他を部分文字列として含まない文字列) で表現でき、検索対象がAABABCABCDで表現できるときの期待される結果って?
質問 おねがいします
C#で動画を作成、操作するにはどういうやりかたがあるんでしょうか?
具体的には自動生成されるたくさんのbitmapをつなげてムービーに加工したいとおもってます。
今は連番のbitmapが出力されるとこまでプログラムで作っていてそこからはvista付属のムービーメーカーで画像をつなぎ合わせていますが、
サイズが大きくなると自動化しないととてもじゃないがやってられないような
ちなみに強引に作った物はこれです。
http://jp.youtube.com/watch?v=_iv0idI4Qf0
取りあえず比較的手軽なのはAVI系のAPIかね C/C++の方が絶対楽だけど つか探せば連番画像をAVIにしてくれるソフトぐらい転がってそうだが
せめてDirectX API無しは流石に考えられん
>>798 俺は元の説明を無視して各事例から、
検索対象に含まれる検索キーのプレフィックスで、長さが最大のもの
と解釈した
イメージとしては、検索キーの末尾から1文字ずつ削りながら探すといったところか
Cから入って全く分からないのですが、 const定数の多次元配列はどう作ればいいんでしょうか const byte [2,2] barray = {{1,2},{3,4}}; と入れてみたのですが 配列のサイズは変数宣言の中で指定できません ('new' を使用して初期化してください) と言われてしまいます
全く分からない人が何故いきなり配列を使うのかその方が謎だ
>>803 > 配列のサイズは変数宣言の中で指定できません
>>803 Cのconstとはかなり意味が違うからその辺は思い込みを捨てて基礎からやったほうがいいよ。
constはリテラルのみreadonlyにしても参照型の中身までreadonlyにできない。
constの解説も読むと良いよ
>>804-807 readonlyをつけても書き換えが出来てしまうと言う事は、
読み取り専用領域に確保する方法は無く、コンパイル時に定数へ置き換える機能しか無いと言う事でしょうか?
いったんCの常識を捨てろ
C#の配列は参照型だ。Cの常識は通用しない。 readonly byte [,] barray = {{1,2},{3,4}}; でコンパイルは通るが、barryがreadonlyになるだけで、brray[0,0] = 999 は書き換えることが出来る。
中身を書きかえれないようにしたい場合はどうすればいいの?
そのbarrayは、Cだとunsigned char *const barrayにmallocしました状態なんだな。 unsigned char const *constにする方法はない。 だから、読取りだけのプロパティやインデクサをよく使う。
AsReadOnlyでも使ってれば
814 :
デフォルトの名無しさん :2008/07/12(土) 01:14:38
C#のIDEでコントロールの親ってどうやって指定したらいいですか?>< 具体的にいうと panel1の上にpanel2が乗っててその上にSplitContainerが乗っかってる状態を panel1の上にSplitContainerが乗っかってる状態にしたいけど うまく選択と移動が出来なくてどうやったらいいのかわかんないです
>>814 つ[ドキュメント アウトライン ウインドウ]
static classをシリアライズ化するにはどうしたら良いでしょうか?
そもそもstatic classなんて状態持たすもんじゃない
すみません 正確にはstaticなメンバ変数をシリアライズ化・デシリアライズ化するにはどうしたらいいか、でした
*個々の*メンバ変数はインスタンスだろ 普通のシリアライズと同じ手順でできるじゃん
まあどうしてもやるなら ISerializable実装 でも例えば別のインスタンスをデシリアライズしたら staticなメンバは上書きされるとか嫌すぎるぞ
> シリアライズ化 ってアレだ。馬から落馬みたいなもんか
以降USBバスとかの話題禁止
COBOL言語とかも禁止か。
C#でドライバ回りがりがりやってる奴居るの?
質問です。 SplitContainer上のSplitterの部分をクリックした時に、Splitterを左端に移動するようなプログラムを作りたいと思い、 SplitContainerのMouseClick時に、SplitDistanceを0に設定する事で解決しようとしたのですが、 実際にSplitterをクリックすると、一瞬だけはその設定通りに動くのですが、すぐにクリックする前の場所に戻ってしまいます。 期待通りの動作をさせるにはどうするとよいのでしょうか。 ちなみに、Panel1MinSize、Panel2MinSize共に0に指定しているので、これが原因というわけではないようです。
>>825 Panel1Collapsedは使わないのか
827 :
825 :2008/07/12(土) 17:43:49
>>826 Panel1Collapsedでは、Splitterも一緒に消えてしまうので、今回の目的とは少しずれてしまう感じです…。
TreeViewのフォーカスについて質問です。 SplitContainerで左にTreeView、右にWebBrowserを配置して TreeViewのノードをクリックしたらノードが保持しているURLに WebBrowserがNavigateするようにしたのですが private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { webBrowser1.Navigate(e.Node.Text); webBrowser1.Focus(); } このように書いてもWebBrowserのほうにフォーカスが行かずに TreeViewにフォーカスが残ってしまいます。 どうにかしてWebBrowserにフォーカスを残す、もしくはTreeViewにフォーカスを 戻さない方法はないでしょうか?
BeginInvoke と無責任レスしてみるテスト
質問があります。 data.xには加速度センサのx軸の値が入ります。 string xpoint; xpoint = data.x.ToString(); x_point.Text = xpoint; このように型変換すると、 以下のようなエラーがでます。 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。 ご教授ください。
x_pointってなんぞ
具体的にどの行? dataの型は? xの型は?
エスパーすると無効な変数を使っているんだろ
>>830 P/InvokeやらActiveXを使ってるんだろうけど、
情報を小出しにするな。ご教授野郎はろくなのいないな。
×ご教授ください ○ご教示ください
ToolStripMenuItem.ClickとToolStripMenuItem.ItemClickedって何が違うの?
>>836 最近この手「御用厨」馬鹿が多くて困るが、「教授」を「教示」と同じ使い方をして
本来まったく問題がない。
わんくまあたりのブログで「教授」の方が意味的に重い、と無知を晒している奴もいたが
実際はそんなことはない。
>>838 DropDownItemClickedの間違いじゃない?字面の通りの違いで詳しくはMSDN。
教示、教授より普通に教えてくださいのほうが好感が持てると思うよ。
コピペ君って馬鹿だな、まで読んだ。
スレ違いはスルーでお願いします
>>844 やねの悪評がねもはもないように見えて、かえって助かってるんじゃね?
だいたいいっつも
>>841 >>843 がセットで書き込まれてるってどういうことよ。
やね=弓月
848 :
830 :2008/07/13(日) 17:43:01
自分も何が知りたいのか良く分からずに質問してしまいました。 もう少し整理したいと思います。 スレ汚しすいませんでした。
さあ、仕切りなおして行きますか! 次の方どうぞ ^^
850 :
デフォルトの名無しさん :2008/07/13(日) 23:59:09
C#でmciを利用しようとしているのですが、wavだけが再生できて、MIDIやmp3が再生できません。 mciSendStringの戻り値からエラーメッセージを取り出してみても、 「指定されたデバイス ドライバの読み込み中に不明な問題が発生しました」(エラーコードは266) というありきたりなもので、手がかりがつかめませんでした。 また、パスの中に空白があるわけでもなく、そもそも同じディレクトリのwavは再生できているのでパスの問題でもないようです。 「type mpegvideo」を指定してみても、変わりないようです。 ちなみに、C++からmciを利用してみたところ、mp3でもtype指定なしで問題なく動作しました。 原因として考えられるものはないものでしょうか。 wavだけが再生できるのが不可解です……。 /*******************/ // mciSendStringの宣言 [System.Runtime.InteropServices.DllImport("winmm.dll")] static extern int mciSendString(String command,StringBuilder buffer, int bufferSize, IntPtr hwndCallback); // 呼び出し時 mciSendString("open BGM.mp3 type mpegvideo alias MyMusic",null,0,IntPtr.Zero); //エラー266が出る mciSendString("play MyMusic from 0",null,0,IntPtr.Zero);
諦めて音楽再生部分C++で書いちゃえば?
bool型変数の中身覗かないでtrue/false切り替える方法ってありませんか?
「中身覗く」とは?
>>851 はい、ほかにもDirectXを利用するという方法もありますし、代替策は確かにあるとは思うんですが、
原因だけでもわからないと、気持ち悪いんです。
>>852 if (a) { a = false; } else { a = true; }
とかじゃなく、
a = !a;
ですましたいってことか?
Interlocked.CompareExchangeみたいなのが欲しいのかねぇ?
>>855 そう言うことです
っていうかa =!a;で良いんですか?
>>857 !演算子ってのは要するに、オペランドの真偽値を逆にして返すだけのものだから。
!演算子もaの中身を覗いてますが。
>>850 俺の環境では下のソースでMIDIが再生できた。Windows Vista 32bit, .NET 2.0 SP1
SoundPlay.Play(@"open C:\__________\midi\rainbowload.mid alias music");
SoundPlay.Play("play music");
class SoundPlay
{
[DllImport("winmm.dll")]
extern static int mciSendString(string a, StringBuilder b, int c, IntPtr d);
public static int Play(String msg)
{
StringBuilder sb = new StringBuilder();
return mciSendString(msg, sb, 0, IntPtr.Zero);
}
}
for (int r = 2; r < 18; r++){ for (int c = 0; c < 7; c++){ if (table[c, r] != null){ mthod(table[c, r]); } } } を実行するとNullReferenceExceptionがおこります。 以下のcsvをtable[,]に展開してます。 どういて例外が起こるのでしょうか? 1,2,3,4,5,6,7 ,,8,9,a,, ,,b,c,,, ,,d,e,,, ,,f,10,,, ,11,12,13,,, ,14,15,16,,, ,17,18,19,,, ,1a,1b,1c,,, ,1d,1e,1f,,, ,,,20,21,22, ,,,23,24,25, ,,,26,27,28, ,,,29,2a,2b, ,,,2c,2d,2e, ,,,2f,30,, ,,,31,32 ,,,33,34
tableがnullなんだろ
mthodがnullなのかもしれん
そう思ってif(table[c, r] != null)ってしてるんだけど・・・
>>864 for()の前にも別の引数で同じメソッド呼び出してるんだけど、
そっちでは例外出ないんだよね・・・
引数の型はstringです・・・
>for (int r = 2; r < 18; r++){ これの4行まえでヌルポしてました。ガッ!
>>865 それはtable[,]の要素がnullでないことを確認してるのであってtableがnullでない事を確認してるのではない
てか落ちてる場所はどこなんだ?
>>868 なるほど・・・
でもtable[,]はグローバルな変数だから・・・
csv読み込むメソッドがおかしいんだな、きっとそうだ!
おまえらありがとう、続きはまた明日にしてみる
string[,] hoge = new string[10,10]; みたいなやつをやらないとダメなんだぜ
グローバルだから何だってんだよ newしろよ
Webbrowserコンポーネントで、マウスの戻るボタンや進むボタンを使うにはどうすればいいですか?
マウスのドライバとかの実装次第な気がする そのアプリのBS/S+BSにボタン割り当てるとか駄目?
自分でボタン貼り付けてWebBrowser.GoBackを呼ぶ、という話でなく?
あくまで自分のPC環境の話だけど、押された時はMouseDownでMouseButtons.XButton1が来た 試してないからわからんけど、キーイベントでKeys.BrowserBackも来るかもしれない
WebBrowserにフォーカスがあるとイベントが来なかったりしなかったっけ? だもんでWebBrowserを継承してPreprocessMessageを オーバーライドしなければいけなかった希ガス
ハードについてる専用ボタンか、、、spy++してみた?
10個の数字から一番大きいものを探すのに、今、 Math.Max(a, Math.Max(b, Math.Max............... という感じで、Math.Max並べまくってるんだけど、 もっといい方法ないでしょうか。
エスパーになれと?
エスパーキタコレ
>>879 new[] { a, b, c, … }.Max()
別に小学生がプログラムをやるのは構わないが、数学とかちゃんと基礎科目の知識を蓄えながらやって欲しいよな
普通に理解できるし何も間違ってないだろ ループ使ってもやってることは同じ
885 :
879 :2008/07/14(月) 21:34:50
>882 ありがとうございます。
Math.Max(Math.Max(・・・を並べるのとループはやってることは同じでも 全然違うだろう
>>860 本当?本質的にはフリップフロップのトグル(電気信号の反転)なのに、
中身覗いたりするのはいくらなんでも無駄だろう。
a = !a;が、たとえば
pop
neg
push
と展開されるならば、誰も中身は覗いてないよ。
仮想マシンだって、そんなにへぼはせんだろ。
popしてるじゃん
レジスタにロードするのに、中身覗く必要はないよ。 (何をもって「覗く」とたとえるかは、哲学の問題かもしれないが) じゃあ、日本語で。 暗幕の中に電球があって、その外に押しボタンスイッチがある。 スイッチを押すたびに電球のON/OFFが切り替わるが、 スイッチの見た目の状態は変化しない。 担当者は、電球の状態を反転せよと命令されるたびにスイッチを押す。 スイッチを押すときに、現在の状態を知る必要はない。
890 :
888 :2008/07/15(火) 10:50:50
あ、ごめん、おいらはアトミックな操作的な意味で言ってた
CPUの中の人も大変だな
アホっぽい展開でワラタ
>>889 小学生みたいないいわけだな。ブール代数を一から勉強してこい。
入力がないのにNOT回路が動くわけねーだろ。
if (b) { b = false; } else { b = true; } と b = !b; の話じゃないのか。
どっちも中身を参照してるじゃん。それで?
TTLとかPLAとかで回路組んだことない人たちには、やっぱり直感的 じゃないんだろうな。まあ、いいや。そろそろスレ違いだし。
半田ごて使わずに直感的はないだろ。
popの実装を知っていたら覗いてないという発想はないな。
で、結局 if(a) a = false else a = true; と a = !a; の生成されるコードはどう変わってくるのよ?最適化されて同じ奴が出力されるの? ま、前者を思いつくことはないからどうでも良いが
それぐらい自分で試せよ。 bool a = true; 0000002c mov esi,1 if (a) a = false; else a = true; 00000031 test esi,esi 00000033 sete al 00000036 movzx eax,al 00000039 mov edi,eax 0000003b test edi,edi 0000003d jne 00000044 0000003f xor esi,esi 00000041 nop 00000042 jmp 00000049 00000044 mov esi,1 a = !a; 00000049 test esi,esi 0000004b sete al 0000004e movzx eax,al 00000051 mov esi,eax
昔の古いソースを見てみたらメソッドの命名規則が変なので 一括で修正したいのですが、VSでメソッドだけ検索する方法はありますか?(正規表現とか) DelphiやJavascriptなどなら"function"を頼りに検索すれば見つかったのですが C#は変数と関数の区別がつきにくいのでどうやって検索したらいいのか分からない・・・ 具体的にはhasChildという関数をHasChildと変えたいのです。(もちろん置換すべきメソッドは他にもいくらでもあるorz) もう一つ質問ですが、hasChildといった関数はすべてprivateかprotectedな そのクラスの中でしか使わない関数なのですが、この場合の命名規則はHasChildかhasChildなのかどちらでしょう?
VSならいくらでも手がある気がするけど。 例えば、ソースの右のコンボボックスから適当に選択して 飛んだとこで右クリックでリファクタ→名前の変更とか
hasChild(をHasChild(にすりゃいいんじゃないの
>>903 デリゲート変数使った呼び出しかもしれないぞw
905 :
850 :2008/07/15(火) 19:59:35
>>861 むう、やはり動かないようです…。
自分で色々試してみて、無理だったらMCI以外の手段で鳴らすようにします、
わざわざコードを書いていただいてありがとうございました。
>>901 一発じゃ難しいかもしれんが
クラスビュー→検索→オブジェクトの種類でグループ化→
マウスでひとつひとつ選択→右クリック→名前の変更
一応、安全には書き換えられる。
後者の質問は private は基本好きにどうぞ。protected は公開
しているのと一緒なので Pascal case (UCC)推奨。
というか MS ガイドライン的には確か UCC 基本で、LCC は
private instance field(正確には縛りなし)と parameter のみかな。
ある意味覚えやすい。
>>902-906 遅レススマソ&サンクス
>>906 を参考に検索しながらやりました
UCCはDelphiチックでLCCはjavaチックなのだな?
なのだな?
いえ、たっちです
UCCだのLCCだのその辺の人には意味不明の略語を使うのは 初心者スレとしてどうなのかね UpperCamelCase lowerCamelCase のことなんだろうけど一瞬なんのこっちゃと思ったわ
上島珈琲か
Microsoft的な用語はCamel CaseとPascal Caseだべ。
何かのテキストファイルを読み込む時に、コメント行(例えば//) の行は読み込まずに一行の文字列として返すメソッドを作りたいの ですが、どのような方法が効率的なのでしょうか。
手を動かせ
コメント行? 行頭から行末まで全部がコメントじゃない場合はどうしたいの?
//〜改行まで読み飛ばしながらStringBuilderに詰める
訂正 × 行頭から行末まで全部がコメントじゃない場合 ○ 行頭から行末まで全部がコメントというわけではない場合
918 :
デフォルトの名無しさん :2008/07/17(木) 21:39:00
C#でノートPCの電源(コンセントが抜かれたのを)が切れてたのを感知することは可能でしょうか?
WM_POWERBROADCASTとかで取れないかな?
コンセントが抜かれたら即死なんじゃね?
ああ、ノートPCか。
StringBufferとStringってどう使い方が違うんでしょう?
>>923 後からどんどん追記するか、
最初限りで変化しないか。
このスレはJavaの質問まで答えるようになったのか
>>924 なるほどありがとうございます
StringBufferは追記できない代わりに軽いとかですかね?
Stringは追記できない Stringの+は連結した新しいStringを一々作る StringBufferは追記できるので軽い もっともこれはJavaの話で C#ではStringBufferの代わりにStringBuilderを使う
あ、StringBuilderでした 勘違いですすみません
あれ?StringBuilderの方が追記可能でしたっけ じゃあ、 string t; foreach(なんたら){ t += かんたら; } みたいな処理はStringBuilderの方がいいってことですかね
MSDNに詳しく書いてじゃん。
ありがとうございます 一つ賢くなりました
Builderって言うぐらいだしね。
JavaにもStringBuilderあるよ
すみません教えてください Form1 に button1 と openFileDialog1 Form2 に pictureBox で、button1をクリックした時、openFileDialogが開いて、 ファイル名を選択してOkしたら、Form2のpictureBoxに表示させたいのですが、 Form2のpictureBoxへ表示するところはどのようにすればいいでしょうか? private void button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { Form2 form2 = new Form2(); // form2.pitureBox1.imageLocation = openFileDialog1.FileName; form2.Show(); } }
Form2にImageLocationって感じのプロパティとかLoadImageって感じのメソッドを用意する
form2.Image = new Bitmap(openFileDialog1.FileName); //Form2.cs public Image Image { get { return this.pictureBox1.Image; } set { this.PictureBox1.Image = value; } }
渡すのをDataObjectにして、その中に自分自身も入れとく。
>>929 そういうときはstring[]に入れてString.Concatが最速
こうですか?わかりません >< string t; foreach(なんたら){ t = String.Concat( new string[] { t, かんたら } ); }
>>936 >>937 ありがとうございました。うまくできました。
//Form1.cs
if (openFileDialog1.ShowDialog() == DialogResult.OK){
Form2 form2 = new Form2();
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
form2.Image = new Bitmap(openFileDialog1.FileName); // ◎
//form2.pitureBox1.imageLocation = openFileDialog1.FileName; // X
form2.Show();
}
}
//Form2.cs
public Image Image{
get {return this.pictureBox1.Image; }
set {this.pictureBox1.Image = value;}
}
943 :
938 :2008/07/18(金) 13:23:06
>>939 が良く理解出来なかったので、汚いやり方ですが
ドラッグ中の前後にフラグを立てて
//ドラッグ&ドロップ処理を開始する
ownDrag = true;
DragDropEffects dde = lbx.DoDragDrop(itemText, DragDropEffects.Copy);
ownDrag = false;
DragEnterイベントで以下のようにすれば上手く行きました。
if (ownDrag == true)
{
e.Effect = DragDropEffects.None;
}
else
{
e.Effect = DragDropEffects.Copy;
}
C#においてGraphicsとImageとBitmapの違いを教えてください
Graphics 描画操作のためのクラス Image ベクトル画像やラスタ画像など画像を抽象化して表すクラス Bitmap ラスタ画像を表すクラス
なるほど ImageをGraphicsとして操作するっつーのはImageを直に編集しにくいからですね ありがとうございました
>>944 マジレスすると、そういうのは掲示板で人に聞くには不適切な質問だと思うぞ。
そうでもない
じゃなくて描画対象は画像に限らないから プリンタに描画したりディスプレイに描画したりする
ピクセルを操作する命令がBitmapにだけあるのが特徴的
まあラスタ画像だから当然っちゃ当然 WPF ではなくなったけどな
>>951 WPFってベクター画最強伝説って奴ですか?
関連することで便乗質問しますが、 GraphicsとGraphicPathって何が違うんでしょうか?
名前とか
GraphicPathは書式付きかな?
MSDNライブリ読まないでここで質問するのは、夏がそうさせるんだよな。
ふらっとでそんな事いう奴の方が夏臭い気もするがなw
さっそく厨が沸いてきたw
夏だからな。
最近のゆとりはreadmeやhelpも読まないで使いこなせなかったら、糞アプリとか言い出すからな。 新人教育なんてやってられんぜ。
GraphicsとGraphicPathの違いは一言でいうとなんだろ
名前だろ
Pathのありなし。
説明みればそのままだよな。 なんで説明読まないんでバカな質問繰り返してんだろうか。
この前、同じ寮にいた奴がDVDプレーヤー買ったんだけど映らないので見てくれと言ってきた。 行ってみるとテレビとプレーヤーにコードが繋がれてないんだよね。 映るわけないだろ、取説に書いてあっただろと言うと、奴は、 読んでも意味ワカンネーから読んでねーと言い放った。 それと同じじゃね?
うん
Graphics クラス GDI+ 描画サーフェイスをカプセル化します。このクラスは継承できません。 GraphicsPath クラス 接続された一連の直線と曲線を表します。このクラスは継承できません。 何が違うのかよくわかんねいぞ
だろ? 読んでも意味ワカンネーから読まないんだよ。
語彙が乏しいな
971 :
デフォルトの名無しさん :2008/07/20(日) 10:09:04
質問です。 C#のFormから打った内容をWordに出力させる際 同じ段落の途中から書式を変更するやり方がわかりません。 つまりWord文章内で ある段落: TextBox1.Text TextBox2.Text (↑MS明朝) (↑MSゴシック) としたいのだが、 以下のコードだと両方MSゴシックで出力されてしまうわけでorz Word.Paragraph oPara1; oPara1.Range.Font.Name ="MS 明朝"; oPara1.Range.Text=TextBox1.Text; oPara1.Range.Font.Name ="MS ゴシック"; oPara1.Range.InsertAfter(" " + TextBox2.Text); 誰か頼む・・
ワードのオートメーションってやったことないのでテキトーなこと言うけど、 一度手動でやって記録されたマクロを見ればそこに答えがあるんじゃないの?
そりゃあ同じRangeだからそうなるだろ ちょっとメソッド名眺めた感じRange.SetRangeとか_Document.Rangeとか使えそう
TextBoxで任意の文字列だけ色やフォントを変えるにはどうすればいいですか?
できないので、RichTextBoxを使う。
できないんですか(´・ω・`) ありがとうございました(´・ω・`)
977 :
デフォルトの名無しさん :2008/07/20(日) 11:31:03
C#でぬるぽは出来ますか?
できます
いいえ、ぬるりです
コントロールの中にコントロールを入れられる たとえばSplitContainerみたいなユーザーコントロールはどうやってつくればいいですか そもそもスムーススクロールって自作しなくてもできた?
>>981 どんなコントロールでも子コントロールを持てる。
だがあんたの口ぶりからすると、もっと細かい条件がありそうだから、それがわかるまで
細かい回答は控える。
ControlのOnResizeなどに渡されてるEventArgsって何の役に立つんですか? OnMouseDownのMouseEventArgsなどは座標なんかのプロパティがあるからわかるんですけど。
なるほど
986 :
デフォルトの名無しさん :2008/07/22(火) 19:40:41
ファイルにロックが(使用中か)かかってるか調べるにはどうしたらいいんでしょうか。
実際に開いてみる
>>982 説明が難しいのですが
デザイナ上でTabControlみたいに、中にほかのコントロールを入れれるユーザーコントロ−ルをつくりたいのです
ファイルのロックがはずれるまで待機する方法はないでしょうか。
開けるまで何度も再試行する
つまんね
詰まんないも何も正攻法だろ
外れる保証がないじゃん 永久に待機し続けるのか? 1回失敗したら「失敗しました」でやめたらいいじゃん
いや普通タイムアウトを用意するだろ
俺はファイルのパスで取得したMutexを使っているけど、 関係ないプロセスが使ってきた場合は対処できないし、 いい方法があれば本気で知りたいわ
ゆとり用の機能はOSで準備していない
続きはWEBで
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。