ふらっとVisual C#,C♯,C#(初心者用) Part111
1 :
デフォルトの名無しさん :
2014/04/05(土) 22:08:28.72 ID:l3iN8hNI
5 :
前971 :2014/04/05(土) 23:34:54.89 ID:fZTxo1xf
BeforeNavigateは別のクラスAxWebBrowser使うときの話 うん 別にない
あ、そこに書いてるようにNavigatingで必要な情報足りないなら やっぱりDWebBrowserEvents2::BeforeNavigate2とか使う必要があるよ
Visualはもうないんだから外せよ
フォームが非アクティブになった時に、フォームとその子コントロールの明度を一括で下げたいんですがどうすればいいのでしょうか
WinFormにそんなシャレオツ機能は存在しない フォームのクライアント領域内ならともかくタイトルバーとかはシステム側の領域だし FormをDisableにすれば一部の彩度は下がるけどな
シャレオツw
>>10 透明度下げることで対処しようと思います
ありがとうございました
Form上にコントロールを1000個程度配置してスクロールさせると、フリーズします。 WindowsXP, 7 ではスムーズに動いていたのが、Windows8.1にした途端起き始めました。 1000個というのはPictureBoxなのですが、これをButtonに変更して1000個表示するだけの テスト用アプリを作ってもやはり発生します。 グラボのドライバを最新にしたり、システムのプロパティの視覚効果などを変更してみても 改善されません。 これが自分のPCの固有の問題か、Win8.1に共通の現象かを切り分ける方法ってありますか? 1000個も配置するという設計がおかしいのでしょうが…
1000個も配置するのが問題
やっぱりそうですよね
わらた
>>13 試しに動作確認してしんぜよう。ソース送レ
>>17 普通にフォームのプロジェクト作成して、ロードイベントに以下を書いて、
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
Button btn = new Button();
btn.Top = i * 24;
this.Controls.Add(btn);
}
}
それからForm1のAutoScrollをtrueにしただけなのですが…。
>>13 安直だが、FrameWorkを両方4.5で動かしてみるとか
重くしないとハードが売れない
WPFならハンドル食わないらしいから試してみれば?
コンボボックスの値を変更したら、もう一つのコンボボックスと値を交換しようとしているのですが、途中からおかしくなります。 参照している値を間違えてしまっているのでしょうか?よろしくお願いします。 ComboBox[] comBox = new ComboBox[2]; private void Form1_Load(object sender, EventArgs e){ comBox[0] = comboBox1; comBox[1] = comboBox2; for (int i = 0; i < 2; i++) comBox[i].DropDownClosed += new EventHandler(comBox_DropDownClosed); for (int i = 0; i < 2; i++){ comBox[0].Items.Add(i); comBox[1].Items.Add(i); } comBox[0].SelectedIndex = 0; comBox[1].SelectedIndex = 1; } private void comBox_DropDownClosed(object sender, EventArgs e){ int index = -1; for (int i = 0; i < comBox.Length; i++) if (comBox[i].Equals(sender) == true){ index = i; break; } int intSel = Convert.ToInt32(comBox[index].SelectedText); // 選択していた番号 int intDest = Convert.ToInt32(comBox[index].SelectedItem); // 変更先 comBox[intDest].Text = comBox[intSel].Text; // 入れ替える }
>>21 VirtualizingStackPanelとか使えば、そもそも1000個もいらないんだけどな。
ナニコレ WPF?
VSのC#です。
26 :
デフォルトの名無しさん :2014/04/12(土) 13:36:56.16 ID:QXbrFFBS
C#で音声認識を扱いたいんですがどれをどう使えばいいのかさっぱりわかりません おすすめの方法があれば教えて下さい
27 :
デフォルトの名無しさん :2014/04/12(土) 16:51:06.63 ID:K9bTN6Ty
>>26 無料のやつは、認識率悪くて使い物にならんよ。
本気でやりたいなら、
100万とかする業務用のソフト買いな。
プログラマなら認識率がどれくらいか見当つくよな IMEの誤変換なんて可愛いもの そもそも一体何に使いたいのか
>>26 キーワードだけ教えてやる。
2文字目はSだ。
GoogleのAPIを叩く
31 :
デフォルトの名無しさん :2014/04/12(土) 19:53:09.57 ID:kaC5V1Cc
日本版エシュロン。
モサドに技術供与受けろや
Microsoft Speech Platform
Microsoft Bob ネーミングのセンスがさすがマイクロさんやな
Robert! Bob: Oh! That's me Robert の別称
「C#」は当初かなり違和感のある名前だったけどすっかり浸透しちゃったな 天下のMSがこの名前で出してコケたら大恥だった D(笑)
Microsoftはいつもネーミングが糞 comも.netも検索しにく過ぎ
2009年にもなってGoとか名前をつけるどこぞに比べれば…まあどんぐりの背比べだな
>>39 vb6はそもそも情報自体が少ないからね
さらにvb.netのせいで探しにくくなった
練習として複数のPictureBoxに、高速で複数の画像を入れ替えまくってみたんですが private void button1_Click(object sender, EventArgs e) { Thread t = new Thread(new ThreadStart(loop)); t.Start(); } void loop(){ for (int i = 0; i < 1000; i++) { pictureBox1.Image = mybmp[i % 3]; pictureBox2.Image = mybmp[(i + 1) % 3]; pictureBox3.Image = mybmp[(i + 2) % 3]; Thread.Sleep(50); } } ときどき下のようなエラーが出ます。 これは、単純にPictureBoxの描画処理が終わらないまま次の描画を始めようとしたためでしょうか? 同一スレッド内の問題だからか、PictureBoxをlockしてみても改善しません。 実際この通りの動作をさせるわけではないですが、高速で画像を更新することはあると思うのでこのままだと気持ち悪い・・・。 >型 'System.InvalidOperationException' のハンドルされていない例外が System.Drawing.dll で発生しました >追加情報:オブジェクトは現在他の場所で使用されています。
回答: UIスレッド以外からコントロールに触んなボケェ
delegateで描画させた方がいいね 後はとりあえずPallarel.forでコントロール別に分けた方がマルチスレッドになって タスクマネージャでCPU利用率見た時にとりあえず嬉しいw
45 :
41 :2014/04/14(月) 13:39:40.86 ID:7M5WCkF4
ありがとう、デリゲートとinvokeってここで使うのか。 ついでに、サンプルプログラムを見ているとthisが何を指しているかよくわからないことがあるんだけど thisが何を指すか調べる方法ってあります?
thisはその関数が走っている時の関数自身じゃないの? classへの参照のようにも見えるけど、スレッド動いてるとスレッド自身になるよね
例えばボタンの文字列をスレッドから書き換える private void button1_Click(object sender, EventArgs e) { Thread t = new Thread(new ThreadStart(loop)); t.Start(); } void loop() { //for (int i = 0; i < 1000; i++) //{ // button1.Text = "new text"; // Thread.Sleep(50); //} SetText("New Text"); } private delegate void SetTextCallback(string msg); private void SetText(string msg) { if (button1.InvokeRequired) { Invoke((MethodInvoker)(()=> { button1.Text = msg; // "Hello, world"; })); return; } // 以下本来の処理 button1.Text = msg; } }
あ、もちろん参照先のページにも書いてあったと思うけど、UIはスレッドセーフじゃないので マルチスレッドで動かしても、勝手にMutex掛かるよ
えーと、thisについてよくわからないのは・・・
例えば
>>47 のInvokeってthisが省略されてますよね?
この場合、thisはFormを指してるのでいいのかな・・・というのを確認する方法ってあるかなと。
慣れると自明に思えるのかもしれませんが、まだ戸惑うことが多いので確認方法があるとうれしいのです。
>>48 >thisはその関数が走っている時の関数自身じゃないの?
>classへの参照のようにも見えるけど、スレッド動いてるとスレッド自身になるよね
初心者は答えなくていいよ。マジで。
>>49 クラスメソッド内のthisはそのクラスのインスタンスを指してるんだよ。
初心者が間違った答えをしてもいいじゃん お前みたいなでかいツラされて不快になるよりマシ
53 :
41 :2014/04/14(月) 17:31:10.51 ID:7M5WCkF4
ありがとう、重ねて質問失礼します。
Invokeを利用することでエラーは回避できました。
ですが、スレッド実行中にフォームを閉じるとエラーが起こるようになりました。
this.IsHandleCreatedやthis.IsDisposedでフォームの存在を確かめてからInvokeを実行させようとしてみたのですがうまくいきません。
どのように回避したらいいのでしょうか。
下は、
>>41 のloop()内にInvokeを反映させたものです。
ループ実行中にフォームを閉じると、
>追加情報:破棄されたオブジェクトにアクセスできません。
のエラーが出ます。
for (int i = 0; i < 1000; i++)
{
if(this.IsDisposed)break;
this.Invoke((MethodInvoker)delegate()
{
pictureBox1.Image = mybmp[i % 3];
pictureBox2.Image = mybmp[(i + 1) % 3];
pictureBox3.Image = mybmp[(i + 2) % 3];
});
Thread.Sleep(50);
}
54 :
41 :2014/04/14(月) 17:40:58.42 ID:7M5WCkF4
むしろ、スレッド実行中にフォームを閉じさせない、 あるいはフォームのデコンストラクタでスレッド実行を停止するのが正しい方向性なのかな?
>>54 スレッド実行を停止させるとデッドロックするな
スレッドは理解があやふやな奴が使うとバグ発生機になるな
>>56 ガチで1次元(時間軸)上のスパゲッティコードが出来上がるw
今回の例でもInvokeの仕組み、WindowsのGUIモデル(少々)、volatile、ロックあたり押さえといて欲しい
Windows7 api codepack使って音楽ファイルのタグ拾っていたんだが、 謎のAccess Violationが発生して3日悩んだが なんとなく32bitでコンパイルしたら治りやがった
x86にしてみるとか最適化を外してみると、謎の不具合が解消されることが稀に良くある
60 :
デフォルトの名無しさん :2014/04/15(火) 09:14:04.10 ID:iSGwDvUA
>初心者が間違った答えをしてもいいじゃん >お前みたいなでかいツラされて不快になるよりマシ これは酷い
モヒカンが聞いたら大変なことになるな
クリップボード経由とか docxならOpen XML SDK使うとかで埋め込めるだろうけどまずフォーマット理解するところからになるな
Word文書じゃないけど using( Bitmap bmp = new Bitmap( this.Width, this.Height ) ) { this.DrawToBitmap( bmp, new Rectangle( Point.Empty, this.Size ) ); Clipboard.SetDataObject( bmp ); RichTextBox rb = new RichTextBox(); rb.Paste(); rb.SaveFile( @"C:\Users\hoge\Desktop\test.doc" ); } とか。位置指定とか考えだすと面倒くさくて死ぬるな
>>59 「良く」なのか「稀」なのかはっきりせい!
と、突っ込むところまでが遠足
>>63-65 クリップボード経由で出来ました、ありがとうございます。
VisualC#2010ですが Form1.cs[デザイン]でフォームのサイズを設定してその数値を プロパティのSystem.Drawing.Sizeに入れても数値がズレるのは何故なのでしょうか。 ClientSizeをSystem.Drawing.Sizeにバインドしています。
ListBoxにマイコンピュータの一覧を表示させる方法ありませんか?
あります
>>69 フォームデザインの画面でフォームのサイズを調節してそのサイズの数値を
アプリケーション設定項目に入力してもフォームのサイズが同じにならないのです
アプリケーション設定項目のサイズの数値とフォームデザイン画面のプロパティのサイズの数値が一致せず、
片方をいじると片方の数値が変化してしまいます
言わんとしてることは分かるが ClientSizeってミソなんだろ デザイナに表示されてるのは非クライアント領域も含んでると
それもあるが
>>72 はそもそもアプリケーション設定が何なのか分かってないとしか
>>72 Form.SizeとClient.Sizeの違いとか
既出だったなごめんなさい
マイコンピュータの一覧って事はマイコンピュータが複数あると いう謎環境なのか
分かる人いなさそうだね残念
ドライブの一覧とは違う情報を取りたいの? それならたぶん、API叩かないといけない
>>79 散々ググった結果ShellAPIを使えば出来るんじゃないかなというのは分かったんだけど
難しくて何かいい方法あったりしないかなと思って質問したんだよね
自分で試行錯誤してみますありがとう
WMIでいけないか?
NumericUpDownでHexaDecimal=trueにして 小文字のアルファベットを入力中にタイマーなどでその値を取得すると 小文字が大文字に変換されます。 そこまでは良いのですが、同時にカーソルがいちばん左に移動してしまいます。 するとabcdと打ったつもりが、DCBAとなってしまいます。 小文字が大文字に変換されたときにカーソルを移動しないようにするには どうすれば良いですか? 何かをオーバーライドすれば良いのでしょうか?
助けてください。 弥○なんかの販売管理ソフトで、伝票入力画面の下部にあるリスト部分って 入力すると自動的に(しかも複数テキストボックス&複数行)追加されますが、 ああいう動作を実現するにはどのコントロールを使えばいいんですか?
標準コントロールには存在しない
FlowLayoutPanelとかTableLayoutPanelを駆使して、 その中にTextBox配置して、みたいな感じで方向性はあってますかね? この方法をやろうとして数時間躓いてます。
>>86 自己解決というか、レスをもらったことで少し理解しました。
こういうのを実現するライブラリが販売されてたんですね。
導入を検討しようと思います。
ありがとうございました。
>>87 複数テキストボックスをユーザーコントロールにまとめてやればFlowLayout案でも簡単だと思う
>>84 Visual Basic Power PacksのDataRepeater コントロールはどうだろう
Windows2000以降のコマンドプロンプトの話なら関係ないだろ 他の部分にバグがあるんだろ ミニマムコードで試してみそ
http://www.nicovideo.jp/watch/nm6049209 この動画を落としたswfファイルをフォームに貼り付けた
Shockwave Flash Objectで再生できないのはなぜなのでしょうか?
コードはこんな感じです。
axShockwaveFlash1.LoadMovie(0, @"f:\test.swf");
axShockwaveFlash1.Play();
>>93 ありがとう。
System.IO.Path.GetDirectoryName(strCmd[0]);
で、コマンドプロンプトだとフォルダ名が取得出来無かったから、C:\に書き込もうとしてエラーになってた。
それがなぜメモリ不足になるんだ?
最初に中の処理だけ外したらメモリ不足ってエラーが出たから、これだと思い込んでた・・・。 あとはコントロール配列にしてたくらいだけど、 イベントの追加とかはコマンドプロンプトでは関係ないからメモリ不足の表示って出る物かな?
まず、エラーってなんのこと? 例外がでるんなら、どの位置ででてるかわかるだろ
それはGDI+がE_OUTOFMEMORY返してくるから
誤解させてすまん 根っこが意味不明なだけでそれは知ってる
102 :
デフォルトの名無しさん :2014/04/18(金) 08:18:16.94 ID:5ZSBe340
そりゃメッセージの通りでGDI+で読み込めない形式のファイルを読もうとしたんだろ WPFのImaging APIを試してみては
>>90 ありがとうございます。
実は、なんとかFlowLayoutで実現できちゃいました。かなりめんどくさかったですが。
でもユーザーコントロールって知らなかったので、一つ賢くなりました。
たしかにこれを使った方が簡単そうな気がします。
試してみますね。
>>99 イメージサイズの算出に関わる部分のヘッダが壊れてて異常値を返すんじゃね
モニタの最大解像度が変わると、フォームのサイズはそのままでコントロールのサイズだけ変わってしまいます。 AutoScaleはFalse、AnchorはTop,Leftになっているのですが、 他に止める為に確認するところはありますでしょうか?
>>105 言ってる事がよくわからんがAnchorをTop left Right Bottomにしてみ
今のモニタって最大解像度を変更できるのか なにそれECOモード?w 冗談はさておき、何言ってるか分からないからコード晒してくれ
DPIのことかな
DPIの話かな?
なんで未だにUI単位系mmにしないんだろう?
そりゃ物理的なDPIが違っても同じ表示にするためだろ 40型FHDと24型FHDとかな
DPmmって言いにくいから。 はい、次の方~
113 :
デフォルトの名無しさん :2014/04/19(土) 14:45:37.73 ID:FZlACFeu
下のような配列とListを用意して var sourceList = new string[] { "a", "a", "b", "c", "a", "b", "c" }; var outList = new List<string[]>(); sourceList の文字列"a"と"b"だけを 下のような感じでoutList に格納したいです。 { "a", "a", "b", "a", "b" } for文で地道に検索すれば実現できるのですが、 配列のデータが大きくなると、 配列のインデックスを0から全て突き合わせるので、 結構遅くなっていきます。 何かスマートなやり方はあるでしょうか?
for文使って要素の方がstring[]? どうせArray.Resizeとか乱射してるんじゃないの?
パフォーマンス問題でサンプルコード貼らないのはなんなの? 一度たりともコーディングでミスしたことがない人なの?
今時のPCで速度が問題になるような処理だと思いにくいし、ベタにやる以上に効率的な 処理があるとも思えんよな。 強いて言えば、(ほとんどありえないシナリオだけど)文字列の比較を参照の比較で 代替して問題がなければかなり効率があがるような気が
>>116 string.Intern使ってやってみたよ
aからzの繰り返し、5000万件のstring[]から、aとbをList<string>へ抽出
配列からリストを作る部分で、Intern250ms、ベタなのは800ms
Internは配列作るのが遅く全体ではベタの方が速かった
ちなみにインターンプールの解放タイミングよく分からないから勧められない
パラレルも試したが(Listの同期のせいで?)2000ms
118 :
デフォルトの名無しさん :2014/04/19(土) 16:45:21.85 ID:eQm7EaOg
並列化処理の手段がいくつもあって理解が追いつきません。 A new Thread( new ThreadStart()):基本的な並列化 B ThreadPool.QueueUserWorkItem():スレッドプールを利用した並列化 C Task.Factory.StartNew():スレッドプールを利用した並列化 D Parallel.Invoke():スレッドプールを利用した並列化。引数としてメソッドを複数入れられる A以外は常にバックグラウンドスレッド? どの方法でもAutoResetEventでの待機・再開は利用できるが、A以外ではabort()での強制停止ができず、CancellationTokeを使う必要がある。 以上の理解で合っていますか? 他にも気を付けるべき特徴があれば教えてください。
タスクはUIスレッドでも動かせる
>>118 その中ではっきり並列化を目的としてるのはInvokeだけだ
他は並列化にも使えるというだけ
特にTaskはParallelの対極に位置するもので、並列化というより非同期処理に使う
Parallelは呼び出し元をブロックして枝分かれして全部終わったら合流して再開するという 典型的な並列処理のパターン(いわゆるfork-join)に特化してる。 Taskはタスクベースプログラミングといって、ひとまとまりの手続きを纏めて非同期に実行していくパターンで、スレッドを使うとは限らない。 あとの2つは低レベルな制御を必要とする場合以外は必要ない(自分でこういう枠組みを作るときとか)
abortを忘れろ 使うなと書いてあるだろ
誰に言ってるんだよこの命令口調バカw 頭おかしいんじゃねえの本当
124 :
デフォルトの名無しさん :2014/04/19(土) 18:29:26.35 ID:2PY1bkDd
>>113 これまさに、LINQの出番じゃね?望むパフォーマンスが出るかわからないけど。
基本はTaskとParallelでいいんですね。
>>122 MSDNでSuspendやResumeは非推奨でしたが、abortもそうなのですか?
あくまで非常停止として使うべきで、基本はスレッド内で終了させた方がいいというようなことは見かけましたが。
普通に考えて強制終了にリスクがないはずがないし、外部から終了させることが可能なスレッドを あえて強制終了する意味があるはずがないと思うんだけど... abortなんて、稀にデッドロックするバグがあるアンマネージドなライブラリの関数を 呼び出す時以外に使ったことないよ俺は。
127 :
デフォルトの名無しさん :2014/04/19(土) 19:35:06.62 ID:GVfgk0hH
パフォーマンス求めてLINQを使うわけじゃないっしょ
もしサンプル通り一文字だけなんだったらcharにすれば爆速よ 一文字でなく最大でも数文字程度なら固定長で一つのchar配列に全部並べてもいい メモリアクセスの効率が大幅に改善される ビチクソ汚いから本当に本当に速度が必要な場合の最終手段な
>>116 ,117,124,128,132
おいみんな
>>113 をよく見ろ
>>114 は気付いていたみたいだが、outListの型はList<string[]>だぞ
どうやら、みんなの考えた方法では113の要求している仕様に合っていないみたいだw
何をどうよく見ろなのかさっぱり分かりませんがw
>>118 なんですが、
Threadを利用した場合は、スレッドの状態の確認としてThreadStateが利用できました。
Taskを利用した場合は、独自に変数を設定してスレッドの状態を確認するのでしょうか?
スレッドが起動中かどうかを示す変数、スレッドが終了したかどうかを示す変数など。
Threadなんか気にせずにTaskのプロパティを確認するべきだし、 どうしてもThreadの状態を知りたいならThread.CurrentThreadを見ればいい
ThreadStatusと同じようにTaskStatusがあるんですね。 どうもありがとうございました。
opencvのdllがみつからないんだろ
>2013/12/15にOpenCvSharpにも使いやすいNuGetパッケージが公開された.この記事で紹介するOpenCV.NetよりもOpenCvSharpのほうがおすすめ 冒頭でOpenCvSharpを勧めてるのに、なんでOpenCV.Netを使ってるのか
NuGetとかいうケッタイなものは使いたくないのです
エビナゲットって最近見ないな
プロジェクトやソリューションを管理するためのライブラリってありますか? ExcelみたいにVSのプログラムを作りたいんですが
今のVSはCOMインターフェイスが廃止されたからExcelのオートメーションと同じことはできない VSの拡張機能として作れば同じようなことはできるが、VSのプロジェクトってMSBuildに入力するための単なるXMLファイルなのでわざわざVSを動かすまでもない MSBuildのスキーマだけ持ってきてそれに従ってXMLを吐くのは簡単だし 必要ならMSBuildのAPIも使える
念のため言っておくがcsprojはxlsxみたいな複雑怪奇なフォーマットとは訳が違うぞ 自分でテキストエディタで開いて見てみるのが早いが、ごくシンプルで普通なファイルだ テンプレートを用意しといて必要なものだけ動的に突っ込む形にすれば簡単に作れる
コンボボックスに似たコントロールで右の部分が▼でなく □で中に...と書いてあるコントロールの名前は何でしょうか?
単にテキストボックスとボタン組み合わせてるだけじゃないの?
単にテキストボックスとボタン組み合わせてるだけだな
決め付けはよくない
>>146 どんなやつよ。
ちょっと想像がつかないからコモンコントロールじゃないっぽいが
具体例がほしいな
>>150 わからないとか冗談だろ
ファイル名テキストボックスとファイルダイアログ表示ボタンをくっ付けたやつだろjk
いまVB.netでプログラミングしてるのですが C#に移行するとどんなメリットがありますか?
アンセーフなコードが書ける どんどん差がなくなってきてる 最近は真面目にそれぐらいしか差がない
Roslynの登場でさらに差は縮まる C#,VB.NETの両方読めるようにしとくと情報が見つけやすい
>>152 C#でプログラミングする必要はないが、C#が読めるようになると世界が広がる
C#が読めれば数々のオープンソースプロジェクトのソースが読めるしJavaも読める
また、一般にWebに転がってるC#の情報はVBより品質が高い
C#に無い機能は即ちVBでも使ってはいけない機能なので、それが分かっていれば実際使うのがVBだとしても高品質なコードが書けるようになる
VB.NetはデフォだとVB6時代の悪しき慣習を引き継いでいるからなぁ フォームのシングルトンインスタンスにクラス名でアクセス出来るのとかまだあるんだっけ?
ありがとん
大事なことを忘れていた 情報検索がしやすいメリットは大きいね 下手くそなコード書く人が少ないのも助かる
とりあえずVBと併せてC#もやってみます
>>152 結局出来ることはほとんど違わないけど、VBのラムダ式とかジェネリックとか
AddressOf...とかの冗長さにイラっとしてるならそれから解放される。
あと、このスレでもそうだけどVBに偏見持ってる人は少なくないから、
メンタル的にはその辺も大きいねw
っていうか、コード書いてみて初めて分かる細かい違いは実は結構あるけど、 移行っていうほど大げさなもんじゃない。 VBが普通に書けるなら1週間でC#もスラスラ書けるようになるはず。
>>160 偏見じゃなくて公式だ
MS自身がが先陣切ってVBerを馬鹿にしてるからなあ
>>162 公式だから偏見じゃないとはちょっと…
自分もVBからC#に移ったが、情報やサンプルの多さは本当に助かってる
職場ではVBA使うからたまに混乱するが
>>164 MS自身がが先陣切ってVBerを馬鹿にしてる とか
VB.NETは数値計算とか例外処理で旧VBの仕様を引きずっているのでILが汚い 機能が同等だとしてもあえて選ぶ意味は無い
決裁権持ってる奴はいまだにBASIC(とPHP)は学習コストが低いと思ってるから あるいは元VBerで信仰心があったり 公平な選択なんて有り得ないんですよ 例えそれが自分の首を締めても
別にできることはたいして変わらないんだから、好きな方使えばええやんか
VB使ってると自分の将来が不安になる
VBはStrConv使える
偏見持ってるのは一般人も同じじゃね? VBで作るって言うと遅くなるとかバカにされるけど、C#で作るって言うと安心するとか尊敬される 知らない人ほど「Basicって名前は遅くてCって名前は速い」と思ってるから性質が悪い
VC#で新しくプロジェクト作ったりしたら static void Main(string[] args) { } 見たいになってるけど、デフォルトで static void Main(string[] args) { } こうするように出来ますか?
VSのメニューの「ツール」→「オプション」→「テキストエディター」→「C#」→「書式設定」→「改行」 少なくともうちのExpressちゃんだと
C#でつくられたDLLを使うときにVBだと outのやつとかうまく行かない時ある
VBで作られたDLLをC#から呼ぶとき インデックスつきプロパティとかどうすんだろ
VB.NetがC#より打鍵量が多いのも、コンパイル後のサイズが大きいのも、 パフォーマンスがC#より悪いのも、ヘルパーメソッド由来の妙なバグがあるのも全部事実であって偏見ではない
VB の癌は Module
MS にはとっとと切り捨てて欲しい
>>176 get_プロパティ名(インデックス)、set_プロパティ名(インデックス, セット値) でいける
>>170 VBのメリット、これしか見つからないな。
まあStrings.StrConvメソッドはC#からでも使えるんだけどな
Microsoft.VisualBasic.dllだとFileLogTraceListenerを一番よく使う
>>179 そんなことはないと思うが、2008の頃からは何を書くにもとにかく冗長という
欠点ばかりが目立つようになってしまった。
昔からReadOnly PropertyとかAddHandler, AddressOfとかDirectCastとかそんな感じだったでしょ リフレクション多用するライブラリが増えてきて表面化しただけじゃないの 自動実装プロパティもC#にしかない時期だし
allocconsole だな
>>182 2008からはVBチームがVB嫌いのヘジたんの傘下に入ったからね
>>186 すまん軽率だった
これ見て使ってしまう奴が居ないとも限らんしな
MessageBoxIconに自分の用意したbitmapを表示させるにはどうしたらいいですか?
無理 それっぽいフォームを自分で作る 文字列を描画したときのサイズを計算してフォームの大きさ変えたりとか楽しいぞ さあ作れ
無理ってことはないと思うけど自作した方が早いね。 そうでなくてもOS標準のはモーダルにしか出来ないしいろいろ使いづらい。
カーソルがピタット止まって気持ち悪い
誤爆った public struct A{ public static string str; public struct B{ public static string str_b1; public static string str_b2; } public class Class{ public string c_str; } public static Class C = new C(); public static Class[] D = new D[2]{ new D(), new D() }; } こんな構造体があるとして A.B.str_b1; A.B.str_b2; A.C.c.str; A.D[0].c_str; A.D[1].c_str; foreach的な感じで値取得ってできない?
>>190 無理ってことはないと思うならやってみろよハゲ
ちなみにあれMessageBox APIを呼んでるだけなんすよヅルムケが
>>192 それらの静的フィールドをyield return で返すIEnumerable<strign>なプロパティを書けばできるけど
意味があるかどうかはおいといて
つかそれ構造体の意味なくね?
>>194 すこしは自分でコード書いてみたら?
同じ手法でいけるって……全然試してないでしょあなた
197 :
デフォルトの名無しさん :2014/04/24(木) 21:43:57.76 ID:vQpzgEp0
>>192 foreach使うための、インターフェースの実装はわかりますよね?
あとは、イテレータ使えばできるはずです。
>>196 馬鹿だろお前。
だったらてめえでやれ馬鹿。
メッセージボックスもウインドウだから、フックかければ改造はできる。 ただ、意味はないからやらないだけだ
昔はC#からEXCEL呼ぶのがとてつもなく面倒だったから、VB使う余地があったんだけどね
>>200 オートメーションは今でもVBの方が向いてるよ。
Option Strict Offの唯一の見せ場といってもいいぐらい
dynamicとオプション引数でもう完全に遜色なくなったねー
あとrefパラメータへの値渡しな
205 :
デフォルトの名無しさん :2014/04/25(金) 21:18:49.00 ID:E6t4nrBH
>>202-203 いや、例えばRange.Valueをdoube[,]として出し入れする、なんて芸当はVBしかできない。
それエラーチェックをサボってるだけでは
激しくどうでも良いことだけど、Excel形式で出力するライブラリは沢山あるのに Word形式で出力できるライブラリが殆ど無いのが納得いかない。
2とか知らないけど発売してるの
そろそろ初心者から脱出したいんですけど、どういうアプリを作ればいいでしょうか? 連番画像ダウンローダー、目覚ましなどは作りましたが、次に作るものが思い浮かばないです・・・
IQueryable
211 :
デフォルトの名無しさん :2014/04/26(土) 01:10:31.85 ID:L7zgrAvH
C#って何が出来れば上級者なの?
作りたい物をきちんと作れるなら
213 :
デフォルトの名無しさん :2014/04/26(土) 01:41:03.89 ID:fIjhv7f7
足し算する計算機を作った 俺はもうC#上級者
>>209 マクロにC#を使える軽量高機能テキストエディタ
217 :
デフォルトの名無しさん :2014/04/26(土) 12:39:09.88 ID:4Y2pKqPs
/// <summary> /// 指定したmdbファイルに対してSQLを実行します。 /// </summary> /// <param name="sql">実行するSQL文です</param> /// <param name="dataSource">mdbファイルの絶対パス</param> /// <returns>0:正常終了 1:dataSource未設定 2:SQL文がない -1:システムエラー</returns> こういうコメントを、関数仕様書のようにまとめる事ができる お勧めツールはありますでしょうか?
以下、たかがサンプルに対する本筋から逸れたどうでもいい突っ込みをどうぞ↓
>>218 1つの関数にopenからsql実行まで全部いれないでもうちょっと別けろよ
Sandcastle
returnsの書き方に違和感
222 :
デフォルトの名無しさん :2014/04/26(土) 13:49:19.87 ID:4Y2pKqPs
>>219 openからsql実行まで一連の処理を一つの関数にまとめていると
何か不都合が出てくるのでしょうか?
なるほど、という不都合が。
エラーなら例外使うべきだな
どうですか? 笑えないほど予告通りですね
むしろチミが召喚したという
>>220 で答え出てた
>>222 File.ReadXXXなんかもあるし、これで全部賄おうって話じゃなけりゃ問題ないでしょう
それより処理結果をintで返すのは誰に教わったの?そいつぶん殴ったらいいよ
処理結果なんて誰も見ない
SQLがnullだった場合?呼び出す側はこれnullかも・・・って思いつつ呼び出さないよな、だったら事前チェックするから
想定してないのにnullって言われてもどうしようもない
だから対処できるメソッドまで例外を投げるんだよ、回復とか通知とか出来るところまで
ArgumentNullExceptionを投げるようにして、例外説明用のタグもあるからそれ使おうか
SQL実行しといて行数すら返さないってINSERT専用なの?
おしっこも出るよ(´・_・`)
>>226 >処理結果なんて誰も見ない
それを言うなら、呼び出したメソッドが例外投げるなんて「誰も想定しない」
とも言えるわけでどっちもどっちだと思うよ。
むしろエラーコード方式の方が、そのメソッドではエラーが発生しうることをコード上で
明示できる分優れているとすら言える。
ただ
>>217 はエラーコードに今時マジックナンバーを使ってる点は問題。
そこはenumか例外オブジェクトを返すようにした方がいいと思う。
230 :
デフォルトの名無しさん :2014/04/26(土) 17:36:23.19 ID:19vcZYji
C#に限った話ではないのかもしれないけど 静的ではないクラスの中に定義したメソッドは そのクラスのインスタンスを作成するたびに メモリ上に展開されるの? だとしたら 主にデータを保持するために使うクラスには出来る限りメソッドを定義しないようにして メソッドはそれを提供する専用のクラスに分割して書いたほうが良いの? インスタンスの量が増えてくるとメモリの使用量が気にならないかなぁ・・・と まぁC#でメモリの使用量なんて気にしても仕方ないのかもしれませんがよろしくお願いします.
ポインタしかもたんだろ
んなわけないだろ
OOP言語(というか実行環境か)でインスタンスごとに独立した実行コードが 割り当てられるような間抜けな実装してるものなんてあるのか? 誰が考えてもありえない話としか思えないが
vtableでくぐれ
CLRではメソッドテーブルだ
C#でTwitterクライアントを作りたくて検索したんですが情報が古かったりして出来ません オススメや参考にしたサイト等あれば教えてください、お願いします
そのライブラリーはIDが64ビット化したのに対応してないんじゃない?
>>237 例外オブジェクトの存在価値が投げられること、ただそれだけだ思ってるのならただの固定観念。
投げないならExceptionより軽量高速で誤解を招かない選択肢が一杯ある
中学生か。 そういう批判のための批判なら要らない。 軽量かどうか、誤解を招くかどうか、どちらもそれが例外オブジェクトかどうかとは無関係。
あえて使う理由は何?と聞いてるんだけど
あえて例外オブジェクトを使えなんてどこに書いてある。 俺はマジックナンバーではなくenumか例外オブジェクトを返せと書いた。 要するにただ「使える」と言ってるだけだ。 2chで言ってもしょうがないが本当中学生じみた幼稚な奴だな。
例外オブジェクトを戻値にする場合って呼び出し側でどうやってハンドリングするの? Go言語みたいにするの?
>>244 じゃあ聞くけどマジックナンバーと比較して例外を使うのの何が優れてると思ってるの?
型検査になるから列挙型のように選択肢も絞れないし、動作もマジックナンバーより遅いし
基本エラーを表す型しかないから成功のステータスを細分化できないんだけど
エラーメッセージが付加できる点ぐらいしかメリットがないと思うよ
おとなしく例外を投げろよ SQLの実行が100%成功するわけないことぐらい誰でもわかるだろ
ここまで燃えるとは予想外ワロタ
>>248 よくある議論だけど、最初から言ってるように、戻り値(エラーコード)ではなく
例外機構を使ったからって、呼び出し側がエラーを想定しなかった場合のリスクに違いはない。
上位まで戻るって、意図的にそうした場合は別として、そうでない場合に
想定されてない例外に対して適切な回復処理なんか出来るわけないでしょ。
突っ込まれる前に言っとくけど、例外を投げることの利点はプログラムを 強制終了させるパワーを持っていることで、だから回復不可能なエラー発生時には 積極的に例外を投げる意味があるけど、それ以外の場合は本来別に例外を投げることに 固執する意味なんてたいしてないんだよね。 むしろエラーコード方式だと他の値が返せなくなるからという程度の理由しかない。
詳しいエラーメッセージをのせられない 追加情報をのせられない おきた場所のスタックトレースが取得できない InnerExceptionみたいのができない エラーの発生しうるメソッドを実行するたびに戻り値を確認する必要がある 回復可能なエラーで失敗を想定しないと停止されないので、そのまま適切でない処理が続行される危険がある とか
実行エンジンや他人のライブラリが例外を投げてくる可能性は消えないので例外処理をしないという選択肢がありえない 両方やりたいならお好きにどうぞ
>>251 その理屈から引数nullとシステムエラー(なんだよそれ)をエラーコードで良いと判断したの?
システムエラーが返された時どうしたらいいの?
俺なら無視しちゃうな
共通関数って、最初に引数チェックしてダメだったら例外投げるよな 引数例外もしくはContractsとか使って
どうでもいいけどHttpWebRequestで404の時とかにWebException投げるのやめて欲しい もともとネットにつながらないとかホストが見つからないという時だけ投げて欲しい
>>250 想定しないエラーについては上位に投げる(キャッチしない)のがC#の基本的なエラー処理の考え方だぞ
例外投げるのは意図的に捕捉しない限り勝手に上位に伝播する
自分で処理できるエラーだけ捕捉するのはエラーコードでもいいが、それ以外を上位に投げるのにエラーコードは不向きだ
258 :
デフォルトの名無しさん :2014/04/27(日) 10:37:42.14 ID:/A+wJ+qi
★質問したいこと 「default(T)」は値なの?型なの? (下記のコードがうまくいかない理由は?) ★状況 public class Range<T> where T : IComparable<T> { public T Begin { get; set; } public T End { get; set; } public bool Contains(T t) { return (Begin == default(T) || Begin.CompareTo(t) <= 0) && (End == default(T) || 0 < t.CompareTo(End)); } } Begin == defualt(T)のとこで「演算子 '==' を 'T' と 'T' 型のオペランドに適用することはできません。」 とか、表示されます。 T d = default(T);とか書いてみて、もちろんエラーは出ない。 さらに、if( Begin == d ) {...}とか書いてみると、 上記のエラー。
259 :
258 :2014/04/27(日) 10:39:06.66 ID:/A+wJ+qi
>>258 あれっ!HTMLエンコードしすぎちゃった!
>>258 IComparableでも==は使えない
Equals使えばいいんじゃねえの
default(T)がnullだった時に落ちないようにしなきゃいけないとすると 静的メソッドの object.Equals(object, object) っていうのが使えるのかな でもdefault(T)との比較は値型のときの動作が怪しいよな
EqualityComparer<T>.Defaultとかそういうのがあって
265 :
258 :2014/04/27(日) 12:48:31.67 ID:/A+wJ+qi
>>261-264 とりあえずこうしてみます。
>>263 案で。
みんなありがとう。
public class Range<T> where T : IComparable<T>
{
public T Begin { get; set; }
public T End { get; set; }
public bool Contains(T t)
{
return (object.Equals(Begin, default(T)) || Begin.CompareTo(t) <= 0)
&& (object.Equals(End, default(T)) || 0 < t.CompareTo(End));
}
}
Contains の実装間違ってるっぽいが大丈夫? 後、default(値型)は、値型の初期値(≒0)になるよ
Tでもnullとの==比較だけはできるんだけど Tが値型の場合は常にfalseになる
268 :
デフォルトの名無しさん :2014/04/27(日) 21:44:11.91 ID:LKRXtHDC
マジで?! 初めて知った・・・
Actionめちゃくちゃ便利じゃないか 古い情報のデリゲートを使ったり、イベント使ったりして 途中でわけがわからなくなってたがこれ使ってすんげーシンプルにかけるようになった
ActionとかFuncとかは単なる作り付けのデリゲート 便利なのはラムダ式
今気づいたけどID出るようになってるね これでキチガイが暴れなくなったね
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
273 :
デフォルトの名無しさん :2014/05/01(木) 16:53:11.58 ID:BD8IvZOZ
C#のLinqでは、Like句は使えないのでしょうか? 下のようなVB.NETプログラムをC#で書きたいのですが、 Likeは無いと怒られます。 Dim filter As String = "*マ*" 'データソースの作成 Dim animals = New String() {"ライオン", "ウマ", "ポチ"} 'LINQで処理を定義 Dim results = From animal In animals Where animal Like filter
うん、使えない
あ、Like演算自体はMicrosoft.VisualBasic.CompilerServices.LikeOperator.LikeStringメソッドで実現できるよ クエリの句として使えないだけで
276 :
デフォルトの名無しさん :2014/05/01(木) 17:12:26.68 ID:BD8IvZOZ
そうなんですか 残念 クエリ式は、VB.NETの方が優れてる気がしますね
よく考えたらLikeはクエリ式とは関係ないただのVBの演算子だった まあクエリ式なんてついでに乗っけてみた程度だからどうでもいいよ
278 :
デフォルトの名無しさん :2014/05/01(木) 17:19:01.49 ID:Hl+E0h9B
クエリ式見るだけで吐き気がする どうしてドットで繋がないんだ 可読性下がるだけだろ
279 :
デフォルトの名無しさん :2014/05/01(木) 17:27:43.28 ID:BD8IvZOZ
ちなみに、
>>273 と同等のコードは、
C#だと、どのように書けるでしょうか?
書くことが出来ないとは
思えないのですが。。。
VBやってろよ 気を揉まなくて済むぞ
var results = animals.Where(animal => LikeOperator.LikeString(animal, filter)); var results = from animal in animals where LikeOperator.LikeString(animal, filter); どっちでも好きに
ってそういえばselect必須だったっけ var results = from animal in animals where LikeOperator.LikeString(animal, filter) select animal;
283 :
デフォルトの名無しさん :2014/05/01(木) 17:34:59.06 ID:Hl+E0h9B
>>279 var results = animals.Where(animal => Regex.IsMatch(animal, ".*マ.*"));
こんな感じ?
これだと正規表現がすごく遅そうでやばそうかな
284 :
デフォルトの名無しさん :2014/05/01(木) 18:01:32.04 ID:BD8IvZOZ
>>282 ご回答ありがとうございます。
ただ、下記のようなコードを書いたのですが、
「動的な式のコンパイルに必要な1つ以上の型が見つかりません。」
と怒られてしまいます。
using Microsoft.VisualBasic.CompilerServices;
string filter = "*マ*";
dynamic animals = new string[] {"ライオン","ウマ","ポチ"};
var results = from animal in animals where LikeOperator.LikeString(animal, filter) select animal;
素人質問で恐縮ですが、
どの辺がいけないのでしょうか?
よろしくお願いします。
なんでdynamicなんだよ
だから言ったのに
287 :
デフォルトの名無しさん :2014/05/01(木) 18:06:08.51 ID:Hl+E0h9B
ダイナミック ダイクマー
288 :
デフォルトの名無しさん :2014/05/01(木) 18:49:10.15 ID:BD8IvZOZ
>なんでdynamicなんだよ あっ、本当だ。 失礼しました。 ただ、下記のようなコードを書くと、 全ての要素がヒットしてしまいました。 var filter = "*マ*"; var animals = new string[] {"ライオン","ウマ","ポチ"}; var results = from animal in animals where LikeOperator.LikeString(animal, filter, Microsoft.VisualBasic.CompareMethod.Binary) select animal; なかなか難しいなと思いました。
死ねと思いました
コードままでウマしかヒットしなかったけど釣りか?
291 :
デフォルトの名無しさん :2014/05/02(金) 00:24:04.56 ID:Z8O9F4B6
すみません、クイックウォッチのソースを見ていました 結果ビューを見たら、ちゃんとウマだけヒットしていました C#を始めて3日目の超初心者なので、 初歩的な間違いをしておりました このデータを、どう配列に取り込もうか考え中ですが、 それくらいなら自力解決できると思います ご教授ありがとうございました
292 :
デフォルトの名無しさん :2014/05/02(金) 00:35:51.86 ID:Z8O9F4B6
クエリ式って、エクセルからオブジェクトを一気に取り込んで あいまい検索する時とか、凄く便利そうですが、 メジャーじゃないんでしょうか? エクセルVBAの構文が見難かったので、 C#でやる方法を色々調べている時に、 便利そうだと思ったのですが、 情報がほとんど無かったので。。。
メジャーじゃないですね
今時エクセル絡ませるのはマイナーの部類ですね
データベースに桐を使ってるレベルです
マイナーかどうかはおいといて、結局 C# 経由で VBA のメソッドを使うことにならん? それ。
Like相当なら StartsWith()、EndsWith()、Contains() でいいべ
Visual C# 2013
.NET Framework 4.5
数値と文字列の組を、数値の降順で表示したいのですが
↓より簡単な方法はないでしょうか
https://ideone.com/OmRl1j 数値の重複はあり、重複した数値のソート順は問いません
組なんだったら一つのクラスにまとめればいいじゃん
var DayMon =new List<Tuple<int,string>>{Tuple.Create(31,"Jan"),Tuple.Create(28,"Feb"),.....}.OrderBy(t=>t.Item1); foreach(var dm in DayMon) { Console.WriteLine("{0} {1}", dm.Item1,dm.Item2); }
>>300 ideoneではコンパイルできませんでしたが、VC#2013では結果が正しく表示されました
https://ideone.com/qen38H OrderByは使えなかったのでSortで代用しています
タプルもKeyValuePairも似たような感じですが、若干ソースが見やすくなったかと
ありがとうございました
OrderByは拡張メソッドでUsing System.Linqが無いと使えない private void Form1_Load(object sender, EventArgs e) { var lst = CreateList(new { Id = 0, Name = "" }); lst.Add(new { Id = 31, Name = "Jan" }); lst.Add(new { Id = 28, Name = "Feb" }); lst.Add(new { Id = 31, Name = "Mar" }); lst.Add(new { Id = 30, Name = "Apr" }); foreach (var item in lst.OrderBy(t => t.Id)) { Console.WriteLine("{0}{1}", item.Id, item.Name); } } private List<T> CreateList<T>(T val) { return new List<T>(); }
多少工夫が必要だがDictionaryの初期化子って手も
>>302 コードが短ければいいってものじゃないと思うけど
>>300 みたいなのってパッと見てわかりやすいとは思わないわ
あまりにも抽象的過ぎて
これもさ、例えばlistを別のクラス、プロジェクトで利用したいってなったとき
t.Item1の見た目でどんな意味の値が入っているかわからないじゃない?
一つのメソッド内でしか使わない使い捨てならいいけどさ
public class Month
{
public int Name{get;set;}
public int Days{get;set;}
}
foreach (var mon in months)
{
Console.WriteLine("日数:{0} 月:{1}", mon.Days, mon.Name);
}
コードは長くなるけど、このほうがわかりやすいでしょ?
>>303 これもさ、例えば曜日などのメンバーを追加したり、メソッドを追加したくなったらどうすんのって話
全部書き換えなきゃいけなくなる
308 :
デフォルトの名無しさん :2014/05/03(土) 00:20:14.92 ID:JUyABsGs
自然に実装するのが一番だね
暦なんて普遍的なものなんだから十分クラスとしてあってもよいもの 年によって月の日数も変化するし、曜日もほしくなる カレンダークラスというのがほしくなるかもしれない 容易に拡張すると予測されるようなものを、 その場しのぎで柔軟性のないコードで実現したとしても わかりやすい、使いやすいにはならないと思う
何か講釈してるけどDateTimeFormatInfoとかCalendarとか知らないのかな
こういう人には関わらない方が良い
312 :
デフォルトの名無しさん :2014/05/03(土) 02:25:42.67 ID:/0tPcitL
pngをicoに変換するソフト作ってみたくて調べてたら ToIcon名前空間ってのを見つけたんだけど、こいつのマニュアルがいくら探しても出てきません どこかに載ってるページとかありませんか?
どこでToIconてのを見つけたんだ?
314 :
デフォルトの名無しさん :2014/05/03(土) 02:55:54.29 ID:/0tPcitL
VisualStudioの候補で出てきた
ぐぐる様で出てこないということは存在しないということ 画像ファイルを読み込んでIconオブジェクト作成して Icon.Saveで作れないこともないけど、単一サイズしか作れないし色数も変になるから 実質的には自分で書かないと
316 :
298 :2014/05/03(土) 12:32:42.87 ID:0tTnhsBI
319 :
デフォルトの名無しさん :2014/05/03(土) 23:11:16.87 ID:RQXoEmML
パラメータ化クエリをトランザクション処理したいのですが、上手く動きません。 何が悪いのか、超が付く初心者なので、とんと見当がつかず。。。 ご指摘のほど、よろしくお願いします。 var cmdList = new List<OleDbCommand>(); OleDbCommand command = new OleDbCommand(); var plam1 = new System.Data.OleDb.OleDbParameter("@param", System.Data.OleDb.OleDbType.Integer); plam1.Value = "2535"; command.Parameters.Add(plam1); cmdList.Add(command); command = new OleDbCommand(); var plam2 = new System.Data.OleDb.OleDbParameter("@param", System.Data.OleDb.OleDbType.Integer); plam2.Value = "2539"; command.Parameters.Add(plam2); cmdList.Add(command); using (var cn = new OleDbConnection()) { cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\test.accdb"; cn.Open(); OleDbTransaction transaction = cn.BeginTransaction(IsolationLevel.ReadCommitted); try { foreach (OleDbCommand cmdSet in cmdList) { cmdSet.Connection = cn; cmdSet.CommandText = "DELETE FROM t_家計簿 WHERE [No] = ?"; cmdSet.ExecuteNonQuery(); } transaction.Commit(); } }
とりあえずコマンドのTransactionが未設定じゃないかな
まず普通にSQL通すとこからやって、パラメタとトランザクションは 別々に試して両方できてから合わせては?
322 :
デフォルトの名無しさん :2014/05/04(日) 00:52:37.14 ID:WZQbe0KN
>とりあえずコマンドのTransactionが未設定じゃないかな 調べてみたら、まさにその通りでした。 初心者らしい、初歩的なミスでお恥ずかしい。 ありがとうございました。
Stream使って読み書きするんだからそこで適当に通知すればいいだろ
ありがとうございます。 FileStreamクラスで似たような事をした事があったので もしかしたら可能かとは思ったのですが なにぶん初心者サンデープログラマなもので うまい事できずにいました。 可能だというお墨付きを頂けたので もうちょい頑張ってみます。助かりました。
元ストリームのLengthプロパティを取得して、それに対してReadByte・WriteByteメソッド で書き込む度に進捗を報告するようにできました。助言いただけたおかげです。 ありがとうございます。またよろしくお願いします。
どういたまして
ローカル変数に属性ってつけられない感じ?
うん というか付けてどうするんだ
闇属性 外部から不可視になる
水属性 参照型は値型に、値型は参照型になる
ヘンタイ属性 お前ら
なんかキモい流れ
中ニ病でも.NETがしたい
>>207 Excelはやたらとあるのに、Word関係の情報少ないよな・・・
同じ感覚で文章出力出来るかと思って安易に受けたら、ちょっとしたことでもえらく苦労した記憶が
まともな文書になると普通はお好みのスクリプトとTeX使うからね オフィスなんか使うバカに情報発信はできないからドキュメントが少ないのは仕方が無いよ
(´・∀・`)ヘー それでそれで?
エクセラとかワールドとかコンマネッツとか ここは難しいインターネッツですね
c#Nativeのデスクトップアプリ作れるやつは いつ頃出るんでしょうか?
我々が生きているうちに拝むことはないでしょう
>>340 それは確かですか?
c#Native出たら使いづらいc++やめてc#一本で
行きたいんですが。
>>335 まあ、文章の処理ならテキストでやるし、出力の一部変えたいだけなら差し込み印刷あるし、ちゃんとした組版やるには力不足で色々面倒だし...
昔、Word に入力されてる表を Excel に転記したいと言う依頼で一寸触ったきりだな ⇒ Word VBA
.NETの入ってないWindowsはもう無いしWin8ストアアプリなら.NETはネイティブ扱い もう完全にネイティブだよ
> .NETの入ってないWindowsはもう無いしWin8ストアアプリなら.NETはネイティブ扱い > もう完全にネイティブだよ 何言ってんのか全然わからん 誰か訳してくれ
ランタイムが不要なバイナリはネイティブだ! って言いたいんだろ。何言ってるのか全然分からんなw
ネイティブの定義が曖昧
OSがサポートしてればネイティブ ランタイムが必要ならネイティブじゃない
msvcrが動的リンクだとネイティブじゃないと
その通り
マジにそう思ってそうだな
IEでサポートされてるからJSもネイティブ
ネイティブインディアン
世界一周してインドに着いたぞ 土人が居るぜ?きっとインド人だ 残念アメリカ大陸でした じゃぁネイティブインディアンだね インド人もびっくり
ネイティブと否ネイティブの違いなんかないよ 突き詰めれば全てネイティブな命令で動いてるからね
>>347 OSがサポートするってのとランタイムが必要ってのは排他的な概念なのか?
ターゲットをWindows7以降と考えると 標準インストールの3.5はもはやOSの一部 システムDLLに依存するかGACのDLLに依存するかの違いでしかない
二進数の事だよ
ああ、Vistaってまだサポート残ってたんだな
ngenサービス起動で実質ネイテイブってことでOK?
>>347 VCのってmsvcrtに依存してるやつ多くね?
あと2008 Redestribute入れろってよく怒られる
ネィテイブ信奉者には
CDとかUSBに書き込んで起動でOS介さずに
動くプログラムを作ってもらいたい。
USB売ってファミコンみたいなビジネスできないかな
Microsoft .NET Nativeとか出てくるんだから、今の .NET はネイティブじゃないんじゃないの。
OSがサポートしてればネイティブ論法なら.batはどうなるの
ネイティブってことだろうな VCでビルドしたもんはほとんどが非ネイティブw
364 :
デフォルトの名無しさん :2014/05/09(金) 07:17:50.07 ID:cCUVEC+A
ランタイムを介さないで、CPUのインストラクションコードで、OSのAPI直接呼び出して実行されるプログラムをネイティブと呼ぶなら、そんなカテゴリは無意味になりつつある。 まず、CPUの速度向上で、ランタイムのオーパーヘッドが問題になることが、無くなった。 ガベージコレクションのように、ライブラリのリンクより、ランタイムで実行した方が効率のいいサービスが一般化している。 OSの低レベルなAPIはランタイムでラップしないと、セキュリティホールが発生しやすいし対応しにくい。 近年は、ブログラムやシステムの複雑化や肥大化が進んでいるから、実行効率より保守性や移植性を優先すべきになった。 つまり、デスクトップ環境においては、ネイティブなコードに拘る意味が無い時代になったんじゃないかな。少しさみしいけど。
>>364 .NETのことも.NET nativeのことも、なんもわかってないなw
スマホアプリ作りの世界だと ネイティブ=プラットフォーム依存 非ネイティブ=プラットフォーム非依存 で括られることが多いみたいだね だからAndroidのJavaモドキはネイティブでUnityのC#は非ネイティブ
変な希望を捨ててC++使ってればいいんだよ
C++11や14の機能みておもしろくなったなーとは思う けど、どうせ使うのはC#かと思って手が出せないな
そこでまさかのC++/CLI
それだけはないわ
nativeを土着と訳せば
>>366 で問題ない
つまりC#はエイリアンか
>>366 darvik(VM)上で動くコードをネイティブって言う人見たことないぞ。
>非ネイティブ=プラットフォーム非依存
こんなこと言う人はもっと見たことない。
374 :
デフォルトの名無しさん :2014/05/09(金) 20:18:57.37 ID:v/oaYztB
C#マシンみたいなの作ればええんか?
AndroidででネイティブっていうとNDKだね
仮に.NETがネイティブだったとしてなんかいいことあるのか 主張自体の意味が分からん
377 :
デフォルトの名無しさん :2014/05/09(金) 21:05:29.92 ID:E9SfM4pV
ネイティブだと時間かけてコンパイルできるから 最適化がカリカリに効いて超早くなるらしいね
難読化が不要になるかもしれない anycpu向けにネイティブも含むって形のビルドだと不要にならないが
ネイティブっていうのはもともとのとか生まれたところのとかいう意味だったはず つまりWindows上でビルドされたアプリケーションはすべてネイティブなのだ!!!
ΩΩΩ<な、なんだってー!!
まあ、JIT でコンパイルされたコードとか悩ましいものもあるからなぁ
>>377 ngenは起動時間短縮も含めてかなり高度なAOT最適化がかかるよ
経験があれば感覚的に分かってるもんだが、
ネイティブのコンパイルって時間かけたからってそんなに速くなるもんじゃない
コンパイル時間ってほとんどIOだしな
実際はおそらくいまだに実現してないと思うけど、.NETが出たときネイティブコンパイルに対する JITの利点として挙げられたのが「実行環境のCPUの命令セットに対応した最適化が可能になる」 だったのを知らない奴がいるねw
いきなりそんなちんけな知識披露してどうしたいんだ? (w
その調子で UCSD p-System を褒め称えてんくれたまえ
C++14なんて出来たのか 学生で暇だったから11まではなんとか着いて行ったが 仕事で.NETに毒されてもう勉強する気にはなれんなぁ
>>383 そのx86系向け以外の実装がなかなか出てきてくれないのがなー
Xamarinくらいだっけ?実用的なの
IA64とかARM(CF、WP、RT)とかあるだろ
>>387 いや元々は必ずしもそんな大風呂敷な話じゃないよ。
というのはx86って一口に言っても最大公約数的な部分以外の命令は共通じゃない。
390 :
デフォルトの名無しさん :2014/05/14(水) 00:47:16.22 ID:K0yI8GQ1
C#でブラウザを操作しようとしていますがエラーが出てしまいます。 WebBrowserコントロールではなくIEを直接操作したいです。 以下コードを実行したところエラーが出てしまいました。 IEを直接操作する場合には、 getElementById("***"); の コードを使う事は出来ないのでしょうか? ≪コード≫ SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer(); mshtml.IHTMLElementCollection mshtml_ec; mshtml_ec = ie.Document.getElementById("id_test"); ←ここでエラー ≪エラー ≫ 型 'mshtml.HTMLDivElementClass' の COM オブジェクトを インターフェイス型 'mshtml.IHTMLElementCollection' にキャストできません。 IID '{3050F21F-98B5-11CF-BB82-00AA00BDCE0B}' が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生したため、 この操作に失敗しました: インターフェイスがサポートされていません (HRESULT からの例外:0x80004002 (E_NOINTERFACE))。
mshtml.HTMLDivElementClass div = ie.Document.getElementById("id_test");
イメージ的にはこれしてるからエラーになる int element; int[] collection; collection = element; ←エラー collection[0] = element; ←エラーではない(初期化されてないのは気にするな
393 :
デフォルトの名無しさん :2014/05/14(水) 03:12:41.94 ID:bi1kolXx
>>391 >>392 mshtml.HTMLDivElementClass div = ie.Document.getElementById("id_test");
~~~~~~~~~~~~~~~~~~~~~~
このコードに置き換えたところ
Interop type 'mshtml.HTMLDivElementClass' cannot be embedded.
Use the applicable interface instead.
というエラーが出てしまいます。どうやら HTMLDivElementClass 自体が
認識されていない様ですが皆さんの環境では普通にビルド通るのでしょうか?
>>393 id_testは<div>なのか?
getElementByIdが返してるもの良く確認してみろよ
IHTMLDivElement辺りのインターフェイス使えば
TからSomeClass<T>に変換するジェネリックなimplicit operatorを作るには どのように書けば良いですか?
SomeClass<T>にそのまま書けば良いんじゃない? とりあえず4.5なら通った
398 :
デフォルトの名無しさん :2014/05/14(水) 12:18:55.70 ID:0F7NlhK7
>>394 >>395 mshtml.HTMLDivElementClass div;
//Interop type 'mshtml.HTMLDivElementClass' cannot be embedded. Use the applicable interface instead
そもそもこの定義をするだけでエラーが出てしまいます。
すいません、ミニマムコードを簡略化しすぎました。 SomeClass1を継承したSomeClass2<T>があって、 Tから変換されたSomeClass2<T>をSomeClass1として返すoperatorが ほしいです。
400 :
393 :2014/05/14(水) 13:05:07.85 ID:0F7NlhK7
どなたか
>>398 のエラーを解決してくださいm(-_-)m
402 :
393 :2014/05/14(水) 15:53:27.07 ID:0F7NlhK7
>>401 結局、InternetExploreを直接操作する場合には
ie.Document.Getelementbyid();
使えないってことですか?
使えるって。エラー原因も書いてあるじゃん
405 :
デフォルトの名無しさん :2014/05/14(水) 22:19:20.87 ID:hc7I7FLC
406 :
デフォルトの名無しさん :2014/05/15(木) 08:23:27.55 ID:yeWrapbB
横からだけど、あれってどういうときに埋め込みCOMを使えないの? なんとなくクラスじゃなくてインターフェイスにしたら行けたような記憶はあるんだけど 具体的にはどういう仕組なんですか
407 :
デフォルトの名無しさん :2014/05/16(金) 01:13:32.52 ID:i/xGMuQU
指定したIDの取得が出来たかどうかを判定する為に 以下コードを記述したのですがエラーになってしまいます。 この場合、どういう風に記述すれば良いのでしょうか? 【コード】 SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer(); if (ie.Document.getElementById("WS2m") != System.DBNull) ← エラー 【エラー】 'System.DBNull' is a 'type', which is not valid in the given context
is
なぜでこれで大丈夫だと思ったのか逆に聞きたい
if (ie.Document.getElementById("WS2m") != null) じゃないの?
>>407 DBNullと比較したいならDBNull.Valueだろ
なんでDBNullが出てきたか知らないけど。
キミが書いたコードは値と型を比較してるからコンパイルできないのね
412 :
デフォルトの名無しさん :2014/05/16(金) 11:11:03.95 ID:qpQIOLBV
IEを自動巡回するプログラムでメモリリークする場合の対処法ありますか? MSが配布している「Windows Server 2003 Resource Kit Tools」というツールの中に含まれている「empty.exe」を実行するように組み込んだのですが、 2~3時間起動させておくとメモリがとんでもないことになっています。 何か対策あれば教えてください。
empty.exeでぐぐると頭悪そうなブログが大量に引っかかるな あなたIEのオートメーションで質問してる人でしょ? COMオブジェクトを適切にMarshal.ReleaseComObjectしてないとそうなると思うよ
定期的にプログラム再起動させたらいいw
ほう、こんなツールがあったのか しかしこれをメモリ開放ツールと宣伝するのはいかがなものか
416 :
デフォルトの名無しさん :2014/05/16(金) 14:36:51.56 ID:dX1r0FTl
>>410 >>411 if (ie.Document.getElementById("hoge") != DBNull.Value) ・・・(X)
{
// ie.Document.getElementById("hoge") 指定IDの取得が出来た場合の処理
ブロック:A
}
else
{
// ie.Document.getElementById("hoge") 指定IDの取得が出来なかった場合の処理
ブロック:B
}
上記の様にコードを修正しました。
すると、指定したIDの取得が出来た場合には(X)の部分で次のエラー
メッセージが表示されます。
演算子 '!=' を 'mshtml.HTMLDivElementClass' と
'System.DBNull' 型のオペランドに適用することはできません
出来なかった場合には、エラーはDBNull.Valueで正常に判定され
ブロック:Bに入ります。
以上を踏まえどういうコードを書けばIDが取得出来た場合、出来なかった場合とを
きっちりと判定する事が出来ますでしょうか?
417 :
416 :2014/05/16(金) 15:21:57.53 ID:dX1r0FTl
どうしても解決出来ません。 何とかお教えください。
DBNullなんてどこから出てきたの?
nullと比較しろって
>>410 が書いてるけどそれは確かめたの?
きちんと基本から勉強したほうがいいよ
IEとかじゃなくてC#の文法からさ
一度変数に受けたらどうよ。。 var element = ie.Document.getElementById("hoge"); if( element != null ) { ... } else { ... }
! DBNull.Value.Equals(...)
422 :
デフォルトの名無しさん :2014/05/16(金) 17:56:19.30 ID:ymohds+z
>>418 >>419 >>420 ありがとうございます。
>>419 で解決しました!
因みにですが、
var element C#なのに型の宣言をせずに変数を定義する事が出来るのですね。
>>421 スクレイピングでぐぐってヒットするブログですが作者の
オナニーコードだらけで参考になるページがありませんでした。
隣のスレからvar厨とアンチvarを動員すべき?
424 :
デフォルトの名無しさん :2014/05/16(金) 18:19:25.77 ID:ymohds+z
>>424 型定義が要らないんじゃなくて、型を指定しなくてよい
コンパイラ様が型を推測して決定してくれる
426 :
デフォルトの名無しさん :2014/05/16(金) 18:54:07.73 ID:oTvEFO9A
>>425 >コンパイラ様が型を推測して決定してくれる
凄く心配です。大丈夫なんですかね。コードの記述方法として
相談室の方で侃々諤々やってたから見てくると良いよ
>>426 DBNullとNullの違いも分からないレベルなら
全く心配する必要ないから安心してください
varのおかげで彼女が出来ました
かなり初歩的な事だと思いますが教えて下さい<m(__)m> C#です。 private void button1_Click(object sender, EventArgs e) { textBox1.Text = ((Button)sender).Text; ボタンをクリックすると、そこに入力されている文字が 『textBox1』に表示される文だと思うのですが、 ((Button)sender).Text; ここの部分はなぜこのようになるのでしょうか? (Button)sender => これはsenderをButton型にキャストしている? ((Button)sender).Text; => なぜ().Text このTextの前の括弧も必要なのですか? 長文すいません<m(__)m>
ずぶの初心者がIEオートメーションとかやりだして dynamicだらけになると教育上よろしくないとは思う
>>430 >(Button)sender => これはsenderをButton型にキャストしている?
はい。
>((Button)sender).Text; => なぜ().Text このTextの前の括弧も必要なのですか?
メンバーアクセス演算子(.)のほうが演算子の優先順位が上なので
(Button)sender.Text
と書くと
(Button)(sender.Text)
の意味になっちゃうからね。sender(object型)にはTextなんてメンバーはないからこの場合コンパイルエラー。
括弧が増えるのが嫌で、キャスト失敗可能性がないところでもつい (sender as Button).Text ってas演算子を使ってしまう
434 :
430 :2014/05/16(金) 21:11:50.84 ID:T9bJjjvZ
>>432 早速の回答ありがとうございます!
なるほど、そういう事だったんですね!
ここがなぜそうなるのかずっと分らなくて困ってましたw
ありがとうございました<m(__)m>
436 :
デフォルトの名無しさん :2014/05/17(土) 14:00:31.48 ID:QUUNT5cx
>>428 回答するだけの知識が無いのですね。
正直にそうおっしゃっていただければ良いものを。
>>436 そういうパターンもあるが流石にコレは違うだろ
DBNull知っててもなんの自慢にもならんしな
質問させてください。 C#でTreeViewとTextBoxを使ったアウトラインプロセッサを作ろうと思っています。 以下の様な設計になると思うのです。 //ノードの内容を保持するクラス public class myClass { public string Title { get; set; } //ノードのタイトル public string Contents { get; set; } //ノードの内容 } 1 myClassのインスタンスをTreeNode.Tagに代入する。 2 TextBoxを使ってmyClass.Titleが変更されたらTreeViewに表示されている該当ノードのテキストを更新する。 この場合、((myClass)TreeView.SelectedNode.Tag).Titleが変更されるたびに TreeView.SelectedNode.Text = ((myClass)SelectedNode.Tag).Title; とする必要がありますよね。 TreeView内ノードのTagのプロパティが変更された通知をTreeViewで受け取ってイベントを起こす、というのは、どういう実装になるのでしょう。 TreeViewかTreeNodeをオーバーライドする必要があるのか? それぞれを継承したコントロールを作るべきなのか? あるいは設計が間違っているのか? ご意見をうかがいたいです。どうぞよろしくお願いします。
TreeNodeを継承したクラスを作るかな ちなみに質問なんだけど ノードは子ノードを持たないのかな?
イベント通知は public event EventHandler TitleChanged; private string _Title; public string Title{ get{return _Title;} set{ if(value!=_Title){ _Title=value; if(TitleChanged!=null) TitleChanged(this,EventArgs.Empty); } } } が基本 イベントはINotifyPropertyChangedを使うのが普通だけど
>>439 ええっ、持ちます。何か問題があるんですか……?
>>440 どうもありがとうございます。やってみます。
442 :
デフォルトの名無しさん :2014/05/17(土) 23:10:58.28 ID:wL9K2nHt
ゆうちゃん事件で.NETアプリにはコンパイルした環境の情報が知らぬ前に埋め込まれてるって言ってたな
>>442 それなら、回りくどい立証など必要ないはずだが、コンパイルだってリモートでできるから無意味だよなw
試しに空exeをコンパイルしてみたら16バイト違う箇所があったからGUID埋めてるんだろうな
445 :
デフォルトの名無しさん :2014/05/17(土) 23:58:33.92 ID:QUUNT5cx
ゆうちゃんかわいそう
>>443 署名してなきゃいくらでも弄れそうだが証拠になんのかな
GUIDから環境の情報を取り出すのは不可能 今のコンパイラが埋め込むGUIDは完全ランダム
gui部分だけqtを使いたいのですが一番シンプルなスレットセーフの 作り方を教えてください。 qtイベント周りが馴染めない・・・
スレチ
>>447 このPCでビルドしたらこのGUIDが埋め込まれる。だからこのGUIDと同じGUIDが埋め込まれてたらそのPCだ
って判断してたと思うんだけど、毎回GUIDが変わったりしてそれができなくなったのか?
そもそも埋め込まれるGUIDって属性とかで指定できるんじゃないのか?
GUIDなんて自分で簡単に書き換えられるじゃんバカなの?
そりゃ変更できるよ。変更したもしくはそのまま変更しなかったGUIDが 比較対象のソフトもしくは開発環境と一致する可能性がどんだけあるんだって話だよ。バカなの?
変更しなかった、ランダムな値が一致する率は低いだろうけど 指定した値に変更出来るんじゃって話だぞ 一致するように変更して偽装出来るんじゃないかって話だろ、バカなの?
素人探偵様は晩ご飯の推理でもしてろ
これで有罪確定だな。 以前片山の質問に答えたかもしれないから罪悪感あんだよね。
457 :
デフォルトの名無しさん :2014/05/19(月) 22:45:34.31 ID:FLEQJh3I
簡単な画像処理プログラムを作っています。 openFileDialog1.ShowDialog()でファイルから画像を読み込む際、ダイアログ上で画像のサムネイルをダブルクリックして決定すると、 たまたまダイアログの背後に隠れていたpictureBox1のMouseUpイベントが反応してしまいました。 これを回避する方法はありますか?
マジだ知らんかったわ
MouseDown後のMouseUpのみ処理するようにすれば済むけど、 泥臭いし後から意図をくみ取りにくいな。
C++使えるのにわざわざC#でウィルス作成する理由なんてあるの? 身分証明書付きで犯行予告送るようなもんじゃんw
コピペだらけでC#を碌に使えない奴がC++でウイルスを作れるわけないだろ。
ウイルス作り慣れてるならC++なんだろうけど 初めてやるようなもんは、C#の方が開発時間短くすむ
ここで話さないと死ぬのかてめーは 死ぬか?今
馬鹿っぽいけどbuttonup受信用のダミーフォームを下に開いとけば簡単に解決しそう
透明フォームはマウスイベント拾わないからダメかと
ダイアログを表示する前にフラグたてておく ↓ 最初のMouseDownでフラグを下げるようにして フラグがたってるときのMosueUpは破棄 で解決やん
増江アップ……
じゃあ継承だな
Rx…
ステートフルな操作になるのでRxでやることではないだろ それを言うならasync
俺もC#でウイルス作っちゃうぞ はい System.IO.File.Delete("C:\")
475 :
デフォルトの名無しさん :2014/05/20(火) 23:09:16.22 ID:eq9LTubx
最近、C#の継承の仕方が分かったのですが、 ハッカーとして警察に捕まるレベルになったでしょうか?
冤罪のリスクがあるから今すぐVBエンジニアに転職した方がいい
もしVB製ウィルス被害が問題になったら 世の中のVBドカタは本気でそういうこと言い出しそう
478 :
デフォルトの名無しさん :2014/05/22(木) 03:08:29.96 ID:QIcUg8Dq
Debug.WriteLineですがあくまでもデバッグ時に使うコードですよね? 別にビルドが完了して実行モジュールにする際には 消した方が良いのでしょうか? 動作には関係が無いのでそのままデバッグコードを 残していても問題が無いのかなぁーと思いまして
479 :
デフォルトの名無しさん :2014/05/22(木) 03:12:23.80 ID:6uPwquR0
ほっとくと際限なく増えるから俺は消す
メディカルサイト歯科相模原.日吉サンテラス歯科.藤沢なのはな内科 スマイル歯科.亀有 リリオ歯科.八王子 アクロスみなみの歯科.足立 ハート歯科新宿くろさか歯科熊本ファミリー歯科伊勢原桜台歯科森林公園滑川モール歯科横浜いちょう歯科.小田原めぐみ歯科ホワイトスタイ
>>478 リリースビルドならコンパイルされないから見づらくならない程度にのこしとけ
残す理由が無ければ消す コメントと同じくきちんとメンテされなければ有害
VS2012で作ったプロジェクトをVS2010で開く方法ってあります?
slnファイルのバージョン書き換えで
C++のテンプレートパラメータのように ジェネリック引数に数値を使うことはできないのかな?
無理 今時そんなことで速くはならんよ
プロジェクト構成ファイルを操作するためのライブラリはありますか? 地道にMSBuildの仕様を調べてXML操作するしかないのでしょうか?
いやMSBuildというのはそのライブラリそのものだよ .NETに入ってるMicrosoft.Build.~のDLLと名前空間を使う まあVSに生成されたXMLをベースにしてXML操作するほうが簡単だと思うけどね
JaneStyleのスレ欄やスレ一覧はフォーカスがなくてもホイールでスクロールできますが、 このときフォーカスが移動していません (タブ部分をスクロールした場合はフォーカスが移動するようですが) これと同様に、任意のControlにあるフォーカスを移動することなく、 別のControlをホイールでスクロールする方法はありませんか? スクロール対象は今のところ以下のクラス(を継承したクラス)ですが今後増えるかもしれません (Rich)TextBox、WebBrowser、TreeView、DataGridView、 TabControlのタブ及び中身、ComboBox、NumericUpDown、 ※ちなみにテキストエディタと専ブラを足して2で割ったようなものを作るのが目的で、 UIをできるだけJaneに近づけようとしてます
ある
即答ありがとうございました 質問する時は時間帯を考えたほうがいいことが分かりました
>>490 ホイールの移動量をフォームで取得して
コードで直接任意のコントロールのスクロールバーを移動させればいいよ
IMessageFilter実装してWM_MOUSEWHEELでマウス位置のコントロール探してSendMessage
>>490 やったことないのでただの言いっぱなしだけど、SPY+で見る限りコントロールの親のフォームは
入力フォーカスがあるコントロールより先にWM_MOUSEWHEELを受け取るようだから、
WndProcでこれを横取りしてマウスポインタの下のコントロールに投げてやればいいんじゃないの?
もちろんこの場合、少なくとも単純な実装では、逆に別のコントロールで入力フォーカスがあるときでも
ホイールのイベントを受け取れなくなってもしまうと思うが。
>>493 以下の方法で軽く試したら期待通りの動きをしてくれそうです
ありがとうございました
フォームのMouseWheelイベントに次のイベントハンドラを設定
private void Form_MouseWheel(object sender,MouseEventArgs e){
if( targetControl.ClientRectangle.Contains(targetControl.PointToClient(Cursor.Position)) ) {
// targetControlのスクロール処理
}
}
また、他のすべてのフォーカスを取りうるControlには次を設定
private void Control_MouseWheel(object sender,MouseEventArgs e) {
Form_MouseWheel(sender,e);
}
>>494-495 回答ありがとうございます
上記の方法では「すべてのControlに~」の作業が面倒なので、その方法も調べてみます
フォームとコントロールをそれぞれ継承して処理したほうがスッキリすると思う
スレッドにフックかけちゃったほうが楽だろ
こういうお節介な処理を組み込んだGUIって使いにくいし保守も面倒だよね GUIは可能な限りシンプルで余計なことをしないものが良いよ
それで済んだら世の中のSEPGはほとんど失業するんだけどな 客がクソ細かいことに拘ってSEが無駄に複雑な要件を作り上げることで成り立つ業界だ
一理はあるけどそれは言い過ぎだな。
それ以前に、
>>490 のいうような要件は今時のUIとしてはそんなに変則的なものじゃないように思う。
今時とかそんなものはどうでもいい 俺の知らない物は全て「普通」ではないのだ 分かるかいこの意味
松鶴家千とせ、ですね
504 :
490 :2014/05/26(月) 00:51:42.84 ID:jkQwR0J8
>>499 ワンボタンマウスのMacでも使ってろ。
506 :
デフォルトの名無しさん :2014/05/26(月) 09:39:10.38 ID:C5RAjArj
Internet Explorerを自動操作していて特定の条件の際に ie.Quit(); を実行してもブラウザが閉じない場合があります。 その際には、Internet Explorerのプロセスも生きたままです。 一体何が原因なのでしょうか? どうしても原因を突き止めることが出来ません。
相談室の方で答えたネタなのだが
508 :
506 :2014/05/26(月) 09:51:23.52 ID:C5RAjArj
>>507 解決につながる回答を得られなかったのでここでも質問させてもらってます。
509 :
デフォルトの名無しさん :2014/05/26(月) 09:52:38.71 ID:C5RAjArj
>>507 396 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/18(日) 04:22:37.98 ID:gCeF58LB
アウトオブプロセスのCOMサーバプロセスのサーバの寿命が気になるなら
・途中で手に入ったCOMオブジェクトすべてにMarshal.ReleaseComObject
・COMオブジェクト入れてた変数は全部参照を切ってGC.Collect×2
のどっちかが必要
こちらですか?
見落としてました。すみません。
再度試してみます。
510 :
506 :2014/05/26(月) 09:57:49.91 ID:C5RAjArj
取り敢えず、GC.Collect(); を使う方法を試したのですがIEが閉じません。。。 ie = null; の実行で参照も切れていると思っているのですが如何でしょうか? ie.Quit(); ie = null; GC.Collect() ; GC.WaitForPendingFinalizers() ; GC.Collect();
また遠隔ウィルスでも作っているのか?
如何でしょう言われても知らんがな とりあえずインスタンス作ってすぐQuitするところから始めてみれば
513 :
デフォルトの名無しさん :2014/05/26(月) 10:31:42.35 ID:C5RAjArj
>>511 黙れ片山
>>512 >とりあえずインスタンス作ってすぐQuitす
画面遷移したり、ボタンをクリックしたりと一連のブラウジングを行った後でQuitすると
閉じない場合があります。
>>506 特定の条件で起こる現象なんだから、その特定の条件ってのが原因だろjk
まずその特定の条件ってのを説明しろよ
515 :
コード① :2014/05/26(月) 11:03:16.41 ID:C5RAjArj
以下のコードを実行すると、ブラウザが開き続けてしまいます。
ie.Quit(); をしているので本来は閉じないといけないのですが、、、
SHDocVw.InternetExplorer ie;
mshtml.IHTMLElementCollection mshtml_ec;
do
{
ie = new SHDocVw.InternetExplorer();
string url = "
http://yahoo.co.jp ";
ie.Navigate(url, null, null, null, null);
ie.Visible = true;
while (ie.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE || ie.Busy)
{
Application.DoEvents();
}
//検索ワードを入力
mshtml_ec = ie.Document.getElementsByTagName("input");
foreach (mshtml.IHTMLElement i_ele in mshtml_ec)
{
if (i_ele.getAttribute("id") != null)
{
string chk_id = i_ele.getAttribute("id");
if (chk_id == "srchtxt")
{
i_ele.setAttribute("value", "まんこ汁");
break;
}
}
}
516 :
コード② :2014/05/26(月) 11:04:09.70 ID:C5RAjArj
//検索ボタンを押下 foreach (mshtml.IHTMLElement i_ele in mshtml_ec) { if (i_ele.getAttribute("value") != null) { string chk_value = i_ele.getAttribute("value"); if (chk_value == "検索") { i_ele.click(); while (ie.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE || ie.Busy) { Application.DoEvents(); } break; } } } ie.Quit(); }while(true); 全くもって原因が不明です。他の方の環境でも再現できる筈です。
それWindows95のときからある不具合だから諦めろ
518 :
515 516 :2014/05/26(月) 11:15:12.13 ID:C5RAjArj
>>517 まじっすか、、、どうしようもないですか?
DoEventsやってるってことはUIスレッド? なのに無限ループ?
520 :
515 516 :2014/05/26(月) 14:40:56.05 ID:C5RAjArj
>>519 >>515 >>516 のコードは
こーいうコードを書いて実行するとブラウザが次々と閉じずに
開き続けてしまう、という事を再現する為のコードです。
なので、ループ処理は気におして頂かなくとも結構です。
Marshal.ReleaseComObjectは試したのか低能
522 :
デフォルトの名無しさん :2014/05/26(月) 16:33:04.93 ID:4133VdBN
>>522 そもそもこのコードビルドできないんだけど...
ついでに苦言。
サービス精神なのかどうか知らないが"まんこ汁"とか止めてくれ。
2ch見てる奴が全員こういう幼稚なノリが好きとか思ってるのならそれ勘違いだと思うけど。
死ななきゃ治らない馬鹿の相手をするより重要なことはないのか君は
525 :
デフォルトの名無しさん :2014/05/26(月) 17:58:49.66 ID:4133VdBN
>>523 検索ワードはプログラムには関係ありません。
ビルド通りますよ。
このコードで100%ブラウザが閉じない不具合を再現出来ます。
誰かこの不具合の対処方法を教えてください。
IEのプロセス削除は最終手段として考えています。
526 :
デフォルトの名無しさん :2014/05/26(月) 17:59:37.67 ID:4133VdBN
絵〇画像を自動でダウンロードするプログラムを速く完成させたいのでお願いします!!
とりあえず参照が面倒だったんでType.GetTypeFromProgIDとdynamicに差し替えたけど 無限ループだからそりゃいつまでもiexplore.exeは落ちないよね、としか
528 :
デフォルトの名無しさん :2014/05/26(月) 18:32:59.37 ID:pvygPOwn
>>527 ええと。あのコードを実行すると普通であればInternet Explorerは1つのみ
起動 > 閉じる を繰り返してプロセスは1つのみ
となる筈が永遠と増えて行くんです。
1つ起動していたブラウザが2・3・4・・・etc
これをしない様にしたいのです。
じゃあ再現しなかったわ
IEは問題だらけだから、ある程度抑えることはできても完全に防ぐことはできない。諦めるしかないってw
!=と||とどっちが優先度高いんだっけ?
GCとMarshal.ReleaseComObjectはなんの関係もないんだが まあいいっかIDであぼーんするわ
>>531 ||のが高かったらif(a != b || c != d)がコンパイル通らん
||って思ったより優先順位低いんだな
>>533 var a = true; var b = true; var c = true; var d = true;
if (a != (b || c) != d)
{
Console.WriteLine("TRUE");
}
else
{
Console.WriteLine("FALSE");
}
if (a != b || c != d)
{
Console.WriteLine("TRUE");
}
else
{
Console.WriteLine("FALSE");
}
コンパイルは通りそうだぞ
535 :
デフォルトの名無しさん :2014/05/26(月) 20:44:19.66 ID:mCxtmcL/
>>535 非標準のコンポーネントの詳細も書いてないし
環境もバージョンも書かんと何言ってるんだか
537 :
デフォルトの名無しさん :2014/05/26(月) 20:53:07.43 ID:mCxtmcL/
>>536 ビルドが通らないとか参照の仕方もしらないの?
そこまで説明しないといけないのかなぁ。
>>535 IEのバージョン、セキュリティ設定、実際にDLされるHTML(yahooIDのログイン状態)、BHOインストール状況など
によって変わるのに、
どうして100%再現するって言い切れるんだよ。全環境()で試したのか?
540 :
デフォルトの名無しさん :2014/05/26(月) 22:36:45.64 ID:UuEHX9kM
ie.Quit()の問題は仕事でやってかなり詳細に知っているけど 質問者の態度が気に入らないので教えないことにする
542 :
デフォルトの名無しさん :2014/05/26(月) 22:53:59.00 ID:4FQEHWVJ
>>540 ふぅーん。口だけならだれだって言えるから。
そうだね(笑)
うちでは再現率は100%ではなかった
口の悪いやつになんでわざわざ答えなきゃならんのか、 って思うよな。 後からきた経験者が答える機会も潰して損しかしてない質問者
546 :
デフォルトの名無しさん :2014/05/27(火) 11:29:39.78 ID:W5P1i6tp
あーあ、コミュニケーションで損するタイプだな… そんな言われ方して回答を寄せてくれる人がいるんだろうか…
半年くらいしてからキャラ変えて出てきたら?
そもそもなんで素直にWebBrowserコントロール使わないんだろうな
それ使っても同じだよ。原因そこじゃないから
551 :
デフォルトの名無しさん :2014/05/27(火) 17:02:57.30 ID:+tr3QBuS
552 :
デフォルトの名無しさん :2014/05/27(火) 21:51:09.60 ID:mRwKuMKj
WPFのUIが小奇麗なので、 ガントチャートを作ってみたいと思ったのですが、 D&Dでタスク管理の横棒?を伸縮させるには、 どのような方法が考えられるでしょうか?
ガントチャートなんかHTML5なら優秀なライブラリが沢山あるよ
WPFのD&Dは基本自力実装 一応Thumbとかあるけど
555 :
デフォルトの名無しさん :2014/05/27(火) 22:08:36.61 ID:mRwKuMKj
>>553 会社のパソコンがIE8なので、
HTML5は諦めてます。
ガントチャートなんて四角だけで表現できるからIE8なら余裕
質問に答えられないなら黙っとけよ
答えるもクソも「そういう風に作る」としか答えようがないからな Adornerでハンドル作るのが正攻法だけど、それはあくまでWPFの設計に則った方法ってだけで 低レベルな仕組みなのでやっぱり面倒だよ WPFのフレームワークはあまり気にしないで使い方を限定してゴリゴリ自力実装しちゃうのが結局一番簡単
559 :
デフォルトの名無しさん :2014/05/27(火) 23:31:39.53 ID:mRwKuMKj
WPFはXMLで動きのあるアプリが作れそうなので、 D&Dに対応したガントチャートも簡単に作れると思ったのですが、 やはり難易度は高いのですね。 せっかくなので、精進したいと思います。
精通してから来てね
ここは初心者用のスレです
WPFはオワコン。
pdfからテキストデータを抽出する方法を教えて下さい
>>563 PDF作成と違って、非常に難易度が高い。俺は自力の画像認識以外で読んだことない
PDFの権限設定、PDFのレイアウト、PDFのバージョン、実際のPDFの複雑さなんかによって
どの方法で実現できてどの方法が効率いいのかが決まる
・自力でPDFファイルからてごりごり読む
・PDFを扱うライブラリから読み出す
・adobeのSDK使って読みだす
・変換できるソフトや開けるソフト、変換サービス使う
・adobe reader画面から直接コピペ
・OCRソフトなどを使って読む
・自力の画像認識で読む
popplerで無理なら費用対効果に見合わないから諦める 誰かが開発費払ってくれるならともかく
567 :
デフォルトの名無しさん :2014/05/28(水) 20:27:28.04 ID:bRRFYvET
C#で現在起動しているエクスプローラーを全て閉じるには どういうコードをかけば良いでしょうか? 例えば、 c:\hoge_1 c:\hoge_1\hage_1 c:\hoge_2 c:\hoge_2\hage2 と4つのエクスプローラーが起動しいてる場合に4つともプログラムで終了させたいです。
EnumWindows APIでトップレベルウィンドウを列挙して ウィンドウクラス名が"CabinetWClass"なウィンドウにWM_CLOSEを投げるとか 昔はExploreWClassなんてクラス名もあったようだが 別の方法: IShellWindows::FindWindowSWでSWC_EXPLORERなウィンドウを見つけて閉じまくる
またウイルスでも作ってるのか。 外からエクスプローラ閉じるとか悪意あるプログラムしか思いつかんわ。
570 :
デフォルトの名無しさん :2014/05/28(水) 21:05:12.21 ID:bRRFYvET
571 :
デフォルトの名無しさん :2014/05/28(水) 22:08:52.10 ID:bRRFYvET
>>568 ありがとうございます!やりたい事が出来ました!!
C#でandroidアプリ作りたいんですけど 無料で作る方法はないですか?
Unity もしくはASP.NET MVCでWebベース
Xamarin使ってるけどC#で作るのはマゾいよ。ほぼすべてjavaと同じだけど資料が少ないから疲れる ほかのプラットフォームとソース共有したいのでなければ素直にjava使った方がいい
Xamarinセコいんだよ せめてUnityみたいなライセンス体系にすれば間違いなくスタンダードになれるのにな OSS文化から生まれた組織は今やすっかりプロプライエタリに傾倒して見る影もない
576 :
デフォルトの名無しさん :2014/05/28(水) 23:34:52.10 ID:9p7tg2Sa
Xamarin for VSって無料じゃないの?
10万円ぐらいだっけ?
578 :
デフォルトの名無しさん :2014/05/29(木) 06:27:28.72 ID:ZtWTRp16
ID:C5RAjArj ID:bRRFYvET 警察に通報しておこう。
エクスプローラの閉じ方を教えています、って通報すんの?
今回のは証拠隠滅のやりかた聞いてたのか
ウィンドウ閉じたら消える証拠って……
えろ画像フォルダってことか・・・
自分で試すと、閉じるのが面倒だから教えろってことでしょ
585 :
510 :2014/05/29(木) 14:37:24.44 ID:wSZPgil+
578 名前:デフォルトの名無しさん[] 投稿日:2014/05/29(木) 06:27:28.72 ID:ZtWTRp16 ID:C5RAjArj ID:bRRFYvET 警察に通報しておこう。 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ やましい事は、一つもねーから警察別に来ても良いからさっさとやれwwwwwwwwwwwww お前が悪戯通報でぱくられるリスクの方が高いと思うぞwwwwwwwwwwwwwwwwwwwwwww 早くやれwwwwwwwwww ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
586 :
デフォルトの名無しさん :2014/05/29(木) 14:52:44.67 ID:ZtWTRp16
ID:C5RAjArj ID:bRRFYvET こいつらマジヤバイと思う。安心してネットもできねーよ。
587 :
デフォルトの名無しさん :2014/05/29(木) 14:55:07.02 ID:ZtWTRp16
ID:ZtWTRp16 こいつサイコパスだよ。こいつには何も教えるなよ。
おまえは基地外w
589 :
デフォルトの名無しさん :2014/05/29(木) 15:19:01.07 ID:ZtWTRp16
いやおまえがキヂカイだよ。一体どういう用途でアプリがシェルを殺す必要があるんだ? そこまで言うなら ID:BtOWecue が教えればいいのに何で教えてあげないの? 低スキルの低脳初心者だから?w
>>589 >>568-571 って言ってんじゃん。つまり終わってるんだよ。頭も悪いな
しかもウインドウを閉じる処理であってシェル殺すんじゃないんだよ。どんだけ初心者?
592 :
デフォルトの名無しさん :2014/05/29(木) 16:43:55.67 ID:wSZPgil+
バカ同士仲よくしろよ
593 :
デフォルトの名無しさん :2014/05/29(木) 16:44:50.80 ID:sB+QOSLF
\ / /. : : : : : : : :ヽ-‐.: :_;. --- .._: : : : : : : :\ \ / _ 争 も _ /, -‐==ミ: : : : _,ィニ-‐……ー-: 、`ヽ、: : : : ヽ、 _ 争 _ _ え っ _ . .:´: : : : : : : ≠:7: : : : : : : : : : : : :ヽ、 ヽ| : i : : :, _ え _ _ : . と _ /.: : : : -‐: :7´: : /:,ハ : : : :ヽ : : : ゝ-- :\ | : :! : : : , _ : _ _ : _ /, -‐/.: : : : :i : : /ィ:爪: : :\ :\ : : :\: : :`ト : !: : : :′ _ : _ 〃 /. : : : : : : |.:イ :ハ:| \: .、\: : xィ¬ト、: :| : : ! : : : : :, / \ /.: :/.: : : : /l : |/Гト、 / |_,ノ0:::ヽ : : :i : : : : :′ / \ / | | \ | .:/.:/. : : :i: i : | |ノ0:::ト ::::::::::::: |: :∩::::::ト: : : !: : : : : : :, / | | \ ∨i: |: : : : |: :ヽ| |::∩::| :::::::::::::::: !.::∪::::::| |: : :i : : : : : : ′ ,ィ /〉 |: |: : i : :', : | |::∪::| :::::::::::::::: !: : : : : :||: : i : : : : : : : :, / レ厶イ ヽハ: : :、: :ヽ| l : : : |::::: , ::::└――┘ ! : : i : : : : : : : ′ / ⊂ニ、 い、: :\/  ̄ ̄ ', : : i : : : : : : : : , _, -‐' ⊂ニ,´ r 、 _ ヽ: :〈 <  ̄ フ |: : : ! : : : : : : : :′,.-‐T _,. -‐'´ ̄ くヾ; U| | : \ /| : : :i : : : : :_, -‐' | / r―' ヽ、 | : : : \ イ: : :| : : :i_,. -‐ |/ `つ _  ̄ ̄Τ`ー―-- L: : : : : `: : . . . __ .:〔: : :|: : :r┬' |
昼間から元気な奴ら…
∧_∧ ,-、< > さてと・・・ <ヽと 屑 ) お札を乾かすニダ・・・ `´ (__○_ノ
サイコパスだらけだな。
サイコパスって言ってみたかっただけだろ
599 :
デフォルトの名無しさん :2014/05/30(金) 16:47:31.26 ID:5UP+ewz2
C#で
http://2ch2ch222.com/ という風にURLを指定してプロセススタートを実行すると
Cromeで開かれてしまいます。本来はInternet Explorerが起動する事を想定しているのですが
何が原因なのでしょうか?
600 :
デフォルトの名無しさん :2014/05/30(金) 16:49:52.79 ID:wfWItD3D
デフォルトのブラウザ
601 :
デフォルトの名無しさん :2014/05/30(金) 17:26:50.98 ID:5UP+ewz2
>>600 それがデフォルトのブラウザをIEに設定済みです。
IE > ツール > インターネットオプション > プログラム > 規定に設定する(D) を押下 > OK
VSのデバッガ設定でターゲットの種類ごとに実行ファイルの設定があるはず
Winキー + R → ファイル名を指定して実行 でURL入れてエンター押してみろよ
どうせ「プログラムのアクセスと~」でIEへのアクセスを有効にしてないとかだろ
似たような2つの案件があって、別の顧客だからUIは別にする必要があるからプロジェクトも別々、 共通部分がかなり多いゆえその共通部分だけは別で開発したい dllにするのがいい方法だとは思ったが、出来ればdllの数はこれ以上増やしたくないのと、それぞれのプロジェクトで同じコードが使われている事をなるべく知られたくない 逆コンパイルされやすい言語なのはわかっていますが、そこは今回は無視して、なんとか一つのexeに纏める方向でいきたいと思っています いい方法はありませんか?
ILMergeでマージすりゃいいんじゃねぇの?
ソースコードを コ ピ ペ
共通だろうがちゃんとできてれば気にせんだろ
リソースにして動的読み込みとかいくらでも方法はあるが、.NETアプリでアセンブリが一個しか無かったら逆に怪しいだろ
クライアントのPCのGACにナイショでインストールしちゃう
ソースコードの共有管理ソフトで、2つのプロジェクトで共有しとけば?
VSにリンクファイルって機能があったはずだが
>>613 あんなもん手動で1つずつ管理してたら無茶苦茶になるぞ
開発時は普通にプロジェクト分けて、InternalsVisibleToとかで誤魔化しといた方が良いと思う
両方の顧客がお互いのバイナリを入手しないと比較は無理なんだから 気にする必要はないでしょ。 それとも契約上問題があるのか?
だよなぁ。 共通部分プロジェクト A社向け部分プロジェクト B社向け部分プロジェクト で作っといて、共通+A、共通+Bで実行ファイルを1つにして難読化でも掛けとけば問題ないと思うけど。
cのincludeがC#で使えれば一発解決なんだろうけどな 俺だったら共通部の開発テスト用プロジェクトと、 その共通部のプロジェクトからビルド前イベントか何かでソースをコピーしてきて使うA社B社用プロジェクト の3プロジェクト構成にするかなー
契約に逆コンパイルするなって書けばいいだけと思うが...
動機も「何となく」って感じで必要に迫られてそうに見えない
>>619 それは知的所有権を侵害している条項という説もある
逆コンパイル/リバースエンジニアリング禁止条項は近々違法認定される運命にある
質問者不在でよーやるわ
>>622 欧州ではすでに成立している.
SAS社 (あの有名な統計ソフトの販売元ね,最近 R 言語に負けつつあるあれ) vs World Programming 社の訴訟で EU 司法裁判所が 2012年5月2日に判断をくだしているよ.
>>624 その訴訟は逆コンパイル/リバースエンジニアリングに直接は関係ない
間接的には関係あるが本質的にはまったくの別件
>>626 >間接的には関係あるが
>本質的にはまったくの別
いっていることが矛盾しまくりなんだが‥‥
まあ説明してくれよ
何にしろ、リバースエンジニアリングの禁止が法的根拠を持つかどうかという話と、 契約でそれを禁じることが可能かどうかはそもそも全く別問題じゃないのかと。 リバースエンジニアリングの禁止に根拠法があろうがなかろうが、 契約で相手(ユーザーだったり発注側だったり)を縛ることは普通にできるでしょ。 出来なきゃ困るよ。
>>629 > 契約で相手(ユーザーだったり発注側だったり)を縛ることは普通にできるでしょ。
いや、その契約が有効かどうかの話。
契約すれば、なんでもできる訳じゃないよ。
例えば、大企業が中小企業からもの買う時に支払いを納入の3ヶ月後とする契約結んでも無効になる。
>>629 違法であれば後で裁判になったときに負けるっしょ
今のところリバースエンジニアリングの禁止も禁止すること禁止もどっちも根拠法なんてないだろうけど
納期に間に合わなかったらPの生首を3つ届けること みたいな契約してみようか
>>630-631 違法な契約ができないのは当たり前。
それ以外の契約は自由。
これを契約自由の原則というんだよ。
はぁ……そうですよね……
契約自由とか最近覚えたのかな (w
違法な内容でも契約できるよ。ただ無効になるだけ これは言い換えると「違法な契約はできない」と受け取れるけど、そうじゃなくて違法と判断されたら契約に有効性や効力がなくなるってだけ
質問者不在でよーやるわ
そもそも本件で想定されるバイナリエディタで比較する程度をリバースエンジニアリングというのもどうかしている プログラムのノウハウを盗む訳じゃないからね プログラムの朴李裁判とかで普通にやっていることだし、検査結果は正当な証拠として扱われているだろ
そういうのは専用スレ立ててそこで話し合ってくれや おれも色々勉強させてもらうんで
価値解析ですバリューアナリシスです断じてリバースエンジニアリングではありません(すっとぼけ
もうぜんぶオープンソースにしちゃえよ .NETなんてILSpyで丸見えなんだし
丸見えですが、難読化くらいさせて下さいよ。
ngenの結果ファイルのようなものを配布とかできんもんかねー 環境最適化ったって32/64とコア数くらいじゃないの?
お前ができるようにしたら? 別に誰も止めやしないと思うけど
644 :
デフォルトの名無しさん :2014/06/02(月) 00:50:37.45 ID:mxZHC2yK
警察に通報するとかいってたヤツまだか? さっさとしろw
ああ、そのネタまだ続いてたの?
よっぽど悔しかったんだろ なんの話題だったかも覚えてないけど (w
構造体に明示的なパラメーターのないコンストラクターを 含めることはできません。 と出るのですが、適当にダミーのパラメータ int i とか引数に 指定したコンストラクタ作ればエラー回避できるのですが、 そういう方法しかないでしょうか?
staticメソッドでCreateとか作っとけ
649 :
デフォルトの名無しさん :2014/06/02(月) 11:29:52.56 ID:/hVdfyU3
警察に通報するよぉおおおお(←涙目www)
>>650 構造体がnewで作成された時に、その中のList<string>型のメンバ変数
もついでにnewで作成しておきたいだけです。
デフォルト引数にしておけば見かけ上は引数なしにできるがw
>>651 なるほど。
じゃあ
>>648 の言うとおりするか、そもそも本当にstructである必要があるか
再考するかかね。
List<T>をフィールドに持つなんてクラスにした方がいいような気がするけど。
そういう誤った設計を除くために
>>647 のエラーが仕込まれている
655 :
デフォルトの名無しさん :2014/06/02(月) 15:05:11.92 ID:qcZBA5tM
C#の構造体は特殊な事情がない限り使わない方がいい
なぜ?
値型にしたい場合というのが限られるからじゃね? P/Invokeに渡す構造体のポインタもクラスで実は表現できるし
構造体が構造体であるために払ってる代償が小さくないからでしょ。
よくあるゲームのIDもようなもので AAA-ZZZまでの文字列をアルファベットで組み合わせて作ったとします AAAの次はAAB、AABの次はAACといったように順にアルファベットを繰り上げたい場合、 数字の++;のように簡単に記載する方法はありませんか? 事前に配列等に組み込んでおいて切り変えるか、細かいメソッドを自作するしかないでしょうか
単純に26進数のクラスを作れば?
>>660 26進数のクラスを作るとはどういう意味でしょう
とりあえず今、26進数の数字を変換しようかなと思ってメソッドを作り始めてはいました
class ID { private int id; private const int max = 26 * 26 * 26; public void Increment() { id++; if( id > max ) { throw new OverflowException(); } } public string ToString() { var c1 = id % 26 ; var c2 = ( ( id - c1 ) / 26 ) % 26; var c3 = ( ( id - c1 - ( c2 * 26 ) ) / 26 / 26 ) % 26; return ( (char)( c3 + 'A' ) ).ToString() + ( (char)( c2 + 'A' ) ).ToString() + ( (char)( c1 + 'A' ) ).ToString(); } }
>>663 ありがとうございます
参考にさせていただきます
いや、TryParseパターンのきもさが解決できるのはありがたいだろ
プライマリコンストラクタは、乗っけた理由や構文の理由は理解できるが気持ち悪いなぁw
プライマリコンストラクタ = 宣言部のキモいやつ + 自動プロパティ初期化子 ってこと? 少々のタイプ数削減のために最凶にキモい構文を導入するのか しかもフィールド初期化子としても使える?
宣言式もキモいけど合理的だから受け入れられそう
スレ違いぎみのネタを続けるほうがキモいわ あっちでやれ
Roslynの機能まんまだな
TypeScriptとJavaの上位互換って感じだな
静的 Using ステートメントってVBでできる奴だろ…いらねえ
674 :
デフォルトの名無しさん :2014/06/03(火) 01:34:57.80 ID:HZMoQlBX
[TestMethod] public void DictionaryIndexWithDotDollar() { Dictionary<string, string> builtInDataTypes = new Dictionary<string, string> { $Byte = "0 to 255", // Using indexed members in element initializers // ... $Boolean = "True or false.", $Object = "An Object.", $String = "A string of Unicode characters.", $Decimal = "±1.0 × 10e?28 to ±7.9 × 10e28" }; Assert.AreEqual("True or false.", builtInDataTypes.$Boolean); } やべえダサい
675 :
デフォルトの名無しさん :2014/06/03(火) 02:05:50.60 ID:HZMoQlBX
しかし俺はプライマリコンストラクタも宣言式もプロパティ初期化も静的usingも 待ち望んでいたよ
ほかはともかく静的usingは拡張メソッドと同時に導入されるべきだったレベルだな
コンストラクター初期化子について public Person(string str) { //strに対してある処理をする this(str,0); } こういう感じにしたいけどできない
staticメソッド併用で初期化子使うこったな
680 :
デフォルトの名無しさん :2014/06/03(火) 22:48:23.69 ID:UlLiQv6s
UIがカッコいいので、WPFをかじってみたのですが、 ListBoxの選択したItemのコンテンツを取りたくて 下記のようなコードを書きました。 ・WPF <ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="100" Width="100"> <ListBoxItem>test</ListBoxItem> </ListBox> ・C#コード string listStr = listbox1.SelectedItem.ToString().Replace("System.Windows.Controls.ListBoxItem: ", ""); 一応、コンテンツは取れるのですが、 Replace("System.Windows.Controls.ListBoxItem: ", "")の書き方が、 苦しいです。 普通は、どのように書くのでしょうか?
681 :
デフォルトの名無しさん :2014/06/03(火) 22:54:04.81 ID:YA7KJA+J
SelectedItem.Value とかなかったっけ?
682 :
デフォルトの名無しさん :2014/06/03(火) 23:02:08.84 ID:6eq/rVAo
var item = (ListBoxItem)listbox1.SelectedItem; var content = (string)item.Content;
>>680 びっくりするかもしれないが、WPFではそういうことはしないのが基本
ItemsSourceとSelectedItemをバインドする
扱うのは(たとえば名簿画面なら)あくまで名簿クラスや社員クラスのインスタンスであって、
リストの中のコントロールはWPFが勝手に作るもので直接触らない
684 :
デフォルトの名無しさん :2014/06/03(火) 23:04:22.53 ID:bLzh8t6O
var厨しね
685 :
デフォルトの名無しさん :2014/06/03(火) 23:20:59.75 ID:UlLiQv6s
>>681 Valueは出てきませんでした
>>682 非常に綺麗に値を取れました。
ありがとうございます。
>>683 バインディングというやつですね。
どのようなものか、良く理解出来ていないので、
色々調べてみようと思います。
>>684 なんでvarを使うと嫌われるのですか?
短くて良い気がするのですが?
ただの発作だから流していいよ
うーんvar積極的に使うべきだと思うけどな 最近は明示的にわかるやつ以外は使わないようにしてるが
俺は使わないが basic的に変数使えるから初心者スレ的には有りだと思う
var と Variant の区別が出来ていないバカがいるのか
したくないだけだから放置でいいよ
ペイントソフトを試作中です アルファチャンネルのような透明度情報は今回必要なく、マスクを利用した透過処理だけで十分です この場合に適当なメソッドはなんでしょうか? 検索した限りではwin32APIのBitblt関数くらいしか見つかりませんでした Bitbltを使わない場合、結局はピクセルごとの合成処理を書くことになりますか?
directdrawとかあるけど同じようなもんだから結局そうなるよ
っていうか、質問してるのが「適当なメソッドはないか?」なのに 実現したい目的に「マスクを利用した透過処理」なんて大雑把なことしか 書いてないのは突っ込んじゃだめだろうか。 俺にはチグハグなようにしか思えないが...
「Bitbltのような、マスク画像と対象画像のor演算やand演算ができるメソッドがC#にないか?」 という意味でした。不明瞭ですみません
GDI → APIでちまちま GDI+→ System.Drawings名前空間その他でお好きに WPF → ( ゚皿゚)ガォーッ!!
ガオー
面倒ならOpenCVSharpとか使えばいいんじゃね 自分でピクセルごとの演算やっとけば、後で色々と応用効くけども
最近Windows API Code Packというのを知りました MSの公式HPがなくなってるようですがもう公開終了してしまったのでしょうか? まだどこかでダウンロードできるところはありますか? (ExpressなのでNuGetは使えないです)
ExpressでもNuGet「は」使えますよ VS2008とか言われると手も足も出ませんが
Windows API Code PackのShellのやつで今遊んでるけど けっこういい加減なコードがあるな 書いてるヤツはプロだろうにちょっとそれ違うっしょみたいなところが多々
expressで使えるコードを自動ソートしてくれるようなのはないかな
「使える」がどっちにかかるのさ
自然言語って曖昧だよな
コードの自動ソートってなんぞ?
自動的にランダムにソートしてくれる機能
ランダムとソートって相反するんだが。
708 :
デフォルトの名無しさん :2014/06/06(金) 09:41:25.51 ID:pSAew24Y
ランダムにソート
ランダムがソート
ガンダムがソート
711 :
デフォルトの名無しさん :2014/06/06(金) 09:51:19.77 ID:b2MTGrQW
ガンダムがニート
俺がニートだ
俺は・・・ソートにはなれない・・・ もう一度、ソートになるチャンスを・・・
714 :
デフォルトの名無しさん :2014/06/06(金) 11:25:25.34 ID:QXIVHHdj
login.aspxから作成したパスワードってどこに保存されてましか? 検索してもみあたりません
誰かエスパーを頼む
とりあえずweb.configの中身全部張って
ApplicationDbContextインスタンスのなかに
718 :
デフォルトの名無しさん :2014/06/06(金) 21:33:17.12 ID:5aTUsUzW
ASP.NET MVC 3縛りの環境で使えるASP.NET Identityみたいなライブラリありませんか?
SPAテンプレートのプロジェクトがさっぱりわからないんだけど、どこを手掛かりにして読んでけば プログラム全体の流れ追えるのこれ。 てかみんなこれ普通に分かるの?
マネージドメモリってマニュアル管理出来んの? c++で言うところのplacement newをしたいのだが無理かな
無理無理無理よ
>>720 プールしたいだけならnewの代わりにstaticメソッドで勝手にやればいい
メモリの配置を制御するのは無理だし一般にGC任せのほうが効率いい
http://pastebin.com/qGsLgJvv nullや未定義的なことができたら、
最後のif(isValid)をif(null != type)みたいにしてisValidを無くしたいです。
型のある言語に慣れてないせいかもしれませんが、
変な書き方をしちゃってると思っています。
どう書くのがいいんでしょうか?
ちなみにUnity用のコードで、usingやクラス定義は省略してます。
default: じゃあかんの?
微妙に読み違えてた Nullableならこんなの PrimitiveType? type = null; if (type.HasValue) { GameObject.CreatePrimitive(type.Value); } でもisValidで良いと思うけど 初期値trueにしてdefault: isValid = false;にしておけば手間もない
>>725 あざます。
.HasValueと.Valueってのがあるんですね。
初期値をnullにできました。
isValidの初期trueでdefalut:でfalseにするのも、確かにそのほうがいいですね。
今回は、switchの中で決まるはずのtypeに、警告つぶすために2行目で
PrimitiveType type = PrimitiveType.Sphere;
しちゃってたのが気になるので、
PrimitiveType? type = null;
にしてisValidは消そうと思います。
いや、そんなことしなくてもdefaultだけでいいだろ 今回だと、defaultに入ったらなにもせずにreturnすればいい あとは、文字列から列挙体にしたいならEnum.TryParseの使用を検討するとか
728 :
デフォルトの名無しさん :2014/06/07(土) 19:18:05.15 ID:qwZo7tiL
C# でInternetExplorerを使ってPDFを開こうとしていますが
Adobe Readerが起動してしまいます。
Internet Explorerの中でPDFを開いて閲覧したいのですが
どうすればよいのでしょうか?
もしくは、こちらはC#というよりはPCの何か設定による問題なのでしょうか?
例)
http://get-lemon.com/funny-news.pdf にC#でIEを開きアクセスします。
この時にAdobe Reader上で開くのではなくIE上で開くようにしたいです。
>>727 2行目のPrimitiveType type = PrimitiveType.Sphere;はあまり気にしなくてもいいんですかね・・
まぁ確かに動きとしては問題ないんですけど。
C#のことぜんぜん分かってないんですが、そんなことをしなくてもってことは、
Nullableはあまり積極的に使わないほうがいい感じなんですか?
列挙体をググってみたんですが、valueが数値系に限定されたkey valueな何かという理解であってますか?
もしそうなら、PrimitiveType.Sphereなどの中身が数値なら、使えそうですね。
C#関係ねーじゃん
731 :
デフォルトの名無しさん :2014/06/07(土) 20:27:54.34 ID:Y4C/YAA7
728ですが自己解決しました。
>>730 ← この垢に質問しなくてもよかった×2
自慰の結果は報告しなくていいです よく飛びましたとか言わないでしょ
>>728 普通に.pdfをシェルに渡すとAdobe readerが開いちゃうから、IEのインスタンスを作って、file://~を開くようにしたらダメかなぁ
…と全くテストすらしてないが言ってみた
>>729 >Nullableはあまり積極的に使わないほうがいい感じなんですか?
べつに使っても問題ないけど
もともとはデータベース関係で使うことを想定した機能だわな
個人的には使う場所がないので使わない。
列挙体を自分で定義してるならInvalidとかNoneとか無効を意味する値を0で追加するかな
ビルトインな列挙体なら
>>723 みたいなフラグで管理しても問題ないと思う
>列挙体をググってみたんですが、valueが数値系に限定されたkey valueな何かという理解であってますか?
いや数値そのものに名前がついただけ
コンパイラ的にタイプセーフにしてくれるだけというのに近い
キャストすれば常に元の数値に戻せるし、列挙型として無効な数値もキャストできちゃう
>>727 >>734 あざます。
C#っぽいというか、C#ではこうするといった感覚もまだ持ててないので助かります。
列挙体は、まだいまいち飲み込めてない感じですが、実際に使って慣れないと分からなさそうな気がしています。
enum fooEnum{ foo = 5, bar = 10 };
Enum.Parse(typeof(fooEnum), "foo") // たぶんenum型? fooEnumもenum型?
(int)Enum.Parse(typeof(fooEnum), "foo") // 5
ただ、Enum.TryParse()は、Unityが乗っかってるmonoのバージョンが2.6.5で、どうやら使えないみたいです。
http://pastebin.com/Ph7JksAf もうひとつ質問させてください。
薄々、慣れているJavaScriptとか他の言語での考え方にとらわれてる気がしてますが、
C#でならこう書くというのが分かりません。
やりたいことは、fooメソッドの引数によって、作るオブジェクトの名前と、設定するTypeが変わるので、
それをハッシュテーブルに定義して置きたいというものです。
Dictionary<string, Dictionary<string, string>> のようにして多次元Dictionaryができる見たいですが、
2次元目はstringとintが混ざるので、匿名型にしてみたところでつまずいてます。
素直にobjectに入れとけば
NameとTypeを持つクラスを作ってDictionaryにする
レスあざます。
>>737 http://pastebin.com/bRKcDjjG objectに入れるってこういう感じですか?
いわれてnew objectできる事を知ったんですが、
ググってみたところ、複数の値を持たせるにはobjectの配列になるみたいなので、やってみました。
が、fooメソッド内では配列として認識されてないっぽいエラーメッセージが出ました・・・
>>738 ちょっとした使い捨てのデータのつもりだったんですが、
クラス作るしかないんでしょうか?
C#では作っていくのが自然なんですか?
740 :
デフォルトの名無しさん :2014/06/07(土) 23:24:44.12 ID:msQmokNs
dictionary["Name"]に名前が入っていて、dictionary["Age"]に年齢が入っているような作りは、通常避けたほうがよい。
一つのDictionary内のvalueはすべて同じ意味のものにするべき。
名前しか入ってないDictionaryとか、年齢しか入ってないDictionaryとか、Personしか入ってないDictionaryとか。
なので
>>738 のようにNameとTypeを持ったクラスを作って、Dictionary<string, そのクラス>形式にする。
一応、Dictionary<string, Tuple<string, SomeType>>とする手もあるが、
そのDictionaryがどう考えても戻り値専用で一時的にしか使わないなどの状況でない限りお勧めしない。
匿名クラスはobjectに変換すると一般的な方法では扱えなくなる
基本はLinqとかでの一時生成物用の機能
>>738 のとおり、素直にクラスを定義すればよい
そもそもstringとintが混じるとか、string型の引数で分岐とか変な気もする
設計を見直すべきかも
>>739 JavaScriptのオブジェクトにいろいろぶっこんで返すというのは静的な言語ではやらない
それをやると、コンパイル時に型が決定できなくて、速度と安全性を失っちゃう
もっと詳しく目的がわかれば別解があるかもしれないけど、クラスを作った方がいい
あと、匿名クラスの一時的という範囲は同じメソッドの中の話で、それを外に漏らしちゃいけない
>>740 >>741 >>742 あざます。
C#、というより静的な言語難しいですね。
JavaScriptなどのスクリプト言語しか経験がないので、C#の考え方を身に着けないと、
設計の見直しもままならなさそうですね。
これは、じっくり考えないといけなさそう。
一応、やりたいことは、
>>723 とほぼ同じ何ですが、オブジェクト名とタイプの2つが必要になって、
今回の試行錯誤を始めました。
GameObject gObj = new GameObject(obj.Name);
gObj.type = obj.Type;
ざっくり書くと、
用意されたパターンの中から、ユーザー入力でパターンを指定してGameObjectを生成したいです。
起動後、初回のHttpClientのレスポンスが異常に遅い ググってもWebRequestの頃の記事しか出ないからそれを参考にしてProxyをnullにしてみたんだけど改善されない HttpClientHandler handler = new HttpClientHandler(); handler.Proxy = null; HttpClient hc = new HttpClient( handler ); HttpClientってWebRequestラップしてるだけだよね? 他の原因なのかな
>>744 それ環境のせいだよ
他のPCでやってみたりしてみな
>>745 本当ですね、仮想環境のOSインストール直後のwin7では一瞬でした
ホスト側のwin7ではすっっごく時間掛かります…
プログラム側に不備がないのがわかったのはいいのですが、開発環境で初回のみ20秒30秒掛かってしまいイライラします
何が悪いんでしょう…
>>746 いえ、アプリケーション起動後の初回です
アプリケーションを起動しなおすとまた1回目は遅くなります
>>747 それvmwareじゃない?
vmwareスレで聞けば解決するよ
>>748 環境のせいだと聞いて、vmware側でテストしてみると一瞬だったんです。
普通にパソコンを起動した時にbootされるホスト側のOSだと30秒近く掛かってしまいます
>>749 vmwareをアンインストールすると直るよ
vmwareインストールするとネットワークドライバとか入るでしょ?
あの辺が悪さするんだ。
>>750 なるほど
VMwareをアンインストールするわけにはいかないのでVMwareすれで聞いてきますね
ネットワーク接続のVMnet1とVMnet8を無効にしたらなおりました まだVMware側の一瞬に比べると遅いけど、3秒で結果が帰ってくるようになったので一先ずよしとします
756 :
デフォルトの名無しさん :2014/06/08(日) 20:38:33.63 ID:e+2yydW9
VS2013Express C# Windows Form Applicationでマインスイーパーを作ろうとしています 爆弾の有無、クリック済みか、周りの爆弾を数える、みたいな感じの状態や関数を持ったクラスをつくり そのインスタンスが各要素に登録された2次元配列をつくり、その状態が反映させられるフォームを探しています どういったフォームを使えばいいですか? それとも、インスタンスを2次元配列的に登録できるようなフォームがあれば教えてください。
自分で描画するのが一番楽だし正解
OnPaintで描けば何でもいけるぞ
WPFならItemsControl+UniformGridって手もあるけどFormsにそんなものはない DataGridView魔改造ぐらいか
PictureBoxがいいだろう。
何か面倒くさそうなことしようとしてるっぽいですね。。 自分で描画は一度調べてみようと思うのですが、他に何かマインスイーパー作ってみようってなった時の 一般的な実装方法とかあるなら教えてもらえると嬉しいです
ゲームを作るって面倒くさいですよ なぜみんな揃いも揃ってゲームを作ろうとするのか全く理解できない
マインスイーパーの画面が思い出せないんだけど。 普通に forms のチェックボックスのボタン化状態で、ボタンの描画に適当なビットマップを貼り付けるとかじゃダメなの?
自分で描画するのが楽。線引いて、*、Fと数字だけだろ描くのは。 演出こらなければ調べながらでも2時間もかからないだろう。 今日中に完成するということだ。
>>763 コントロール配列でできるけど、コントロールは本来そういう使い方をするもんじゃない
数が増えると重くなるし、メモリは食うし
WPFならいいのかもしれないけど、WinFormsでは自分で描画すべき
なお、クリックされた座標からどのマスをクリックしたのかの計算は簡単
>>762 UI あって、ロジックがたいして難しくないから、練習にはちょうどいいんだろ。
つーか、他に適当な題材あるなら教えてやれよ。
ゲームだとGDI+とかそういう方面の知識しかつかないからなあ 新人にはいつもデータ処理+グラフ描画やらせてるわ
定番はテトリスだろう。
テトリスもああ見えて要件が直感的じゃないからあんまり
>>768 グラフ描画もいろいろ。どういうのやらしぃてんの?
TextBoxでテトリスを作った思い出・・・ GDI+関係ねぇw
WinFormというかWindowsのウィンドウ描画まわりがどういう仕組になってるかとか 今から教えても/学習しても無駄知識になりそうな気がして仕方ない つーかx86/64に未来はあるの?
せめてLabelで作ろう
未来あるなしは関係なく現に今主流だし、細かい挙動なんかはC#じゃ実現できずwinapi使わざるを得ないこと多い その状況はこれからもC#使う限りは10年以上続くと思うよ だからwindowsプログラミングするならある程度知っていた方がいい
線を引いて塗りつぶして数字を描画するくらいやっつけで作っても、 3日もすれば忘れるので無駄知識にはならないよ。
C#覚えて初めのゲーム作りで、馬鹿な質問かもしれんが教えてくれ ソートとかも楽だしsqliteでデータを扱ったらいいのかと思って途中まで作ってふと思ったんだ sqliteで作成したデータベースって普通に読めてしまうよな? ゲームデータ覗く奴なんてそうおらんしどうせたいしたゲームでもないだろ気にするな、と言われたらその通りなんだが 一般的?なゲームデータ保存方法とデータベースの扱いってどうなってるんだろうかと 隠したいデータがあれば単純に難読化、暗号化とか? フリーゲームや同人ゲーだと普通にそのままsqliteのデータベースファイルだったりする? 商業ゲームでも結局は解析されてしまってたりするが、データベースソフトは自前で作ってたり他の商用ソフトだったり?
言わずともわかるかもしれんけどちょっと補足 隠したいというのは単純に見られたくない隠しデータというだけでなくて、 例えばアイテムのパラメータが書かれたファイルを普通に読まれたら、その書き換えも容易だよなと 海外だとMODとかが一般的だから逆に分かりやすく作ってあったりして?
sqliteってパスワード設定できなかったっけ?
本当だ知らんかったありがとう
金庫の上に鍵が置いてある状態でセキュリティについて真剣に考えてみるスレ
簡単に持ち去れる手提げ金庫のセキュリティがそんなに気になるか?
残念 それはミミック
>>777 利用者がアクセス・改竄しにくいようにするのが基本。
昔ならUSBドングル。
今だと、サーバとの通信で認証とか。
>>784 その系統はコピープロテクト向け
改竄向けに使えないことはないけど普通は使わない
フリーゲームや同人ゲーだってるのにドングルとかサーバで認証とか言ってる人ってかっこいい
気にするまでも無いと思うけどな やっても適当なバイナリファイル作って自分で簡単な暗号化と圧縮で十分かと
>>781 絶対に改ざんされない方法を知りたいわけではなく、
ゲームのデータはどう扱われることが多いのか気になっただけなんだ
sqliteなら手軽だからよく使われているのか、それともまともな開発者ならsqliteなんて使わないよね、なんて状況なのか
遊びで作る程度のゲームでそんなこと気にする必要ないという突っ込みは置いといてくれ
>>784 業務用ソフトウェアならともかく、ゲームにUSBドングルなんて一般的ではなかったと思うんだが・・・
サーバ認証はsteamとかだとあるのか?
ふっかつのじゅもんをsqlにつっこめ
どのくらいデータがあるのか、どんな使われ方するのか知らんが、
sqlite使うよりもデータの使われ方に合わせた独自の管理形式にしたほうが速度的にも有利だと思うけど・・・
今のゲームは知らないが、昔のなら
FD、CDがドングル代わりになってるのもあった(コピー対策)
データ類は生、生+チェックサムや電子署名、独自ファイル、暗号化。暗号化はビットひっくり返すだけみたいな簡易的なのが多かった
ドングル類も強度の高い暗号も解析しようと思えば簡単にできる。ただそれを実装したり解析するのにかかる時間の違いがあるだけ
>>790 その系統はセーブデータの暗号化に使えるけど配布ファイルの暗号化には使えない
さらにプレイするPCと解析するPCが同じだったら手間が少し増える程度
sqlite暗号化すればいいんじゃないのか
改ざんチェック用のチェックデジットもあったほうがいいね おれつえーはすぐ飽きるしなw
3DES使っとけ的な
いろいろ参考になった、ありがと
>>795 何故あえてTripleDES? 中途半端すぎないか?
>>777 で思い出したけど昔同人ゲームの実行ファイルの中を見たらゲームデータの解凍パスがそのまま載ってた事があった
>>798 final なんか red++ とmifes の悪口がてんこ盛り
大して重要ではないデータの暗号化はXOR。 地デジのスクランブルにも採用されているくらい単純で速い
その言い方は語弊があるだろ
803 :
デフォルトの名無しさん :2014/06/12(木) 09:23:49.51 ID:swwsjqzZ
int a[] = { 2, 5, 7, 1, 5 }; があったとして aの要素同士をランダムに掛け合わせて新しいリストを作り、 決め打ちした要素数(たとえば15)まで増えてきた時点で打ち切り ってことをやりたいんですが、 これをLINQ使ってサクっとやりたい場合どうやればいいでしょうか? それともfor使ってゴリゴリ書くしかないのでしょうか?
Random rand = new Random(); Func<int> getRand = () => a[rand.Next(0, a.Length)]; Enumerable.Range(0, 15).Select(_ => getRand() * getRand()).ToList();
(from x in a.OrderBy(_ => Guid.NewGuid()) from y in a.OrderBy(_ => Guid.NewGuid()) select new { x, y }).Take(15) 重複しない他の方法ってあるかな
クエリ構文は眼が拒否するので(^_^;)
807 :
805 :2014/06/12(木) 12:59:02.46 ID:M8h4NdWX
あ、これ駄目だw
それをLINQで書きたい理由がわからん LINQで書いたからサクッと実行されるとは思わんし 自分でサクッと書けない時点でLINQでやる意味無いと思うが
LINQ信者に何をいっても無駄
どうやるのって聞くだけでLINQ信者なのかw
812 :
デフォルトの名無しさん :2014/06/12(木) 14:16:56.14 ID:icjii/oU
ウィンドウの枠のサイズの取得方法を教えてください。 SystemInformation からは以下のように値が取得できました。 BorderSize {Width = 1 Height = 1} Border3DSize {Width = 2 Height = 2} FrameBorderSize {Width = 4 Height = 4} しかし実際に表示されている枠のサイズは {Width = 8 Height = 8} が正しいようなのです。 どうすればこの正しい値を取得できますか? 一応、(Width - ClientSize.Width) / 2 とすれば正しい値を取得できるのですが、 できればウィンドウを表示する前に取得したいのです。
>>812 MSDN読んでもどれが何のサイズを表してるのかさっぱり分からんねw
FormBorderStyle = Sizableの場合、SizingBorderWidthに3を足した値か?
3って値がどっから出てくるのか分からないけどw
814 :
デフォルトの名無しさん :2014/06/12(木) 16:47:47.77 ID:bAJS1Sms
>>813 FixedFrameBorderSize
LoadイベントでClientSizeとか参照すれば表示前かつ正しいサイズ取れない?
>>815 確かにLoadイベントで (Width - ClientSize.Width) / 2) すれば表示前に取得できました。
なんとなく気持ち悪いですが、これが確実そうですね。
MSDNの歯切れが悪いのは XPで導入しかかったスキンのせいだと思うね ビジュアルスタイルがユーザーによって変更されている場合(7とか8の場合はより可能性が低いが) 値が違ってくるから。 結局サポートコストとかセキュリティとかのせいで廃止されたんたと思うが
いやカスタマイズ可能であってもそのカスタイマイズされた値が取得できれば問題ないわけで、 それは理由にならないでしょ。
ルナがあまりに悪趣味だったおかげかどうか、Aquq風に改造するのがそういえば 一部で流行ってたなあ。
820 :
デフォルトの名無しさん :2014/06/14(土) 02:18:31.50 ID:YGWjcU/Q
標準C#入門2版(2008年発行VC#2008対応)を買ったのですが、VC#2012で勉強しても問題ありませんよね? 2.0と3.0で追加されたものは巻末に30ページほどまとめられて載っていますので、本編講座内では使われてないと思います 友達が業務のために勉強したJavaの本2冊をくれるっていうので、 Javaのほうがいいのかとも思ってるんだが Rubyは最初だけ囓ったことがある、
>>820 すいません、下記のJavaが云々は別スレで聞くつもりの内容で、消していませんでした
無視してください
IDEの変更はいじってれば便利になったなってなんとなくわかるけど C#4.0/.NET 4で今まで煩雑だったのが楽になったりしてるから ネットでチェックしとくといい あと WinFormsは進化がしてないからそのままいけるけど WebFormやMVCは結構進化してるからこれもチェック 入門を脱したらプログラミングC#の第7版は良書よな。 第6版と比べて格段に読みやすいがあれも初心者は無視してるな
>>822 >>823 ありがとうございます
標準~のほうで初心者脱して、はじめての~に移るというプランでいきます
今からWebFormなんてやる意味あるか?
WPFを使うのが一番おすすめ WinFormsなら全部自作するんじゃないだろうか
ありがとう 業務系は一通りこなせるとは思ってましたがWPFは未踏領域でした そちらを調べてみます
どのフレームワークを使うのか書かないと Forms→組み込み機能使わずに色々コントロールを組み合わせれば出来なくもない WPF→ItemTemplateで普通に出来る ASP.NET(MVC)→CSSで出来る
WPFを勉強するよりWinFormsで自作のほうが早そう
>>829 デスクトップアプリでFormsでやろうと思っていました
某ERPからCSVでダラダラデータ取得するという仕事を楽にするアプリを以前にForms(3.5)で作ったのですが
部内で見栄えがもうちょっとなんとかならん?と相談されたのでTwitterクライアントみたいだったらいいなーと
社内趣味みたいなものでお金がでないので自前で出来たらと思って質問しました
FormsでもデータバインドとかObservableCollectionとの同期とか考えないのならそれほど難しくない パネルの中にFlowLayoutPanelでも入れてスクロールできるようにして、コードで生成したアイテムをガンガン入れてくだけ 各アイテムをUserControlにしとけばコードのボリュームもかなり減らせる
いっそWebBrowserコントロールに表示するとかもありか
せやな 文字を描画したときのサイズ取得して箱の大きさ決めるあたりが面倒臭いが FlowLayoutPanel使えばそこらへんも勝手にやってくれるかも
ここで出てきたキーワードで調べて書いてみたいと思います ありがとうございました
フォントと色ぐらいならオーナードローでいけるんじゃないか いや、頑張ればそれ以上でもできるんだろうけど
WebBrowser使うぐらいなら頑張ってWPF覚えようよw
840 :
デフォルトの名無しさん :2014/06/16(月) 02:37:49.11 ID:GvXD/dq8
初心者用に質問し直します。 画像に文字列を入れるプログラムを「どぼん」を参考に作成しています。 パターンAでは正常に文字がレンダリングされるのですが MSのDocumentを見て自分で指定したパターンBではなぜか文字が入りません。 どこに問題がありますか? パターンA Brush b = new SolidBrush(Color.FromArgb(128, Color.Yellow)); パターンB int i_alpha = 0; int i_red = 10; int i_green = 20; int i_blue = 30; Brush b = new SolidBrush(Color.FromArgb(i_alpha,i_red,i_green,i_blue));
>>826 昔作ったのを見なおしたら、ListViewのViewをTileに指定して、OnDrawItemをオーバーライドして
アイテムをオーナードローしていたな
ListBoxは作ったこと無いけど、基本は同じやり方で出来るんじゃないかな
オーナードローって言うほど難しくないからチャレンジしてみたらいいよ
indexofに「【」が上手くヒットしないのですが 似たような文字があるのでしょうか?
>>843 .IndexOf( "xx", StringComparison.Ordinal )
普通に引っかかるなぁ .ToCharArray()してその文字の数値はどうなってる?
>>844 は.NET2.0系の場合ね。.
「々」「○」「、」「。」この辺の文字でいろいろ問題が出てた。
NET4.0でFix
847 :
843 :2014/06/16(月) 10:51:03.46 ID:e2UtTTDJ
ごめん 複数の「【」があっただけだった ひと括り削除してもうひと括りが残ってようです
スレ見てたら急にWPFに興味がわいてきた
まだやってないのか
wpfはblendがないとイライラするよ UIそのまま使うならいいけど 色変えるだけでもめんどくさい
winformで何も困ってないし、WPFである必要性がおれには何もないんだよな。
高DPI対応とか
仕事じゃ使わないし家で自分用にちょこっとツール作ったりするくらいだから必要なかった Blendって有料かー
ぬるぬる動くアニメーションUIとか
>>850 同じことをWinFormsでやると、もっと面倒なんだが
色変えるのはcolorプロパティ弄るだけじゃないの? よく知らんがWPFは大変だなw
WPFはフレームワークの想定内の用途はスマートに書けるけど、 そうでない場合はWindows Form以上にカオスに陥ったり、パフォーマンスその他の理由で そもそも不可能だったり。
WPFはデフォルトだとあんまりコントロールの見た目は弄れなくて テンプレートを使って上面を丸ごと入れ替える感じになる テンプレートの編集はBlendがないと地獄
>>857 いやむしろVSみたいに低レベルなところから大規模なアプリを組み上げるときの基盤として使うのに向いてる
フレームワークとしては貧弱・無駄に複雑・パフォーマンス悪い
Xamlいじらないといけないから、なれないとわかりにくい MVVMもいまいちわからん
>>822 にhelloworldをM、V、VMで書いた例があるよ
初心者相手だからしったかの嘘書いたらあかん wpfのバインディングやテンプレートでフォントや文字色簡単に変えたりできないよ blend使うとか馬鹿じゃねーの やれるもんならやってみな ゴリゴリとコード書くしかないだろ
正直blendの使い道がライブラリを頂くぐらいしかない SketchFlowなんて使ったことないし
フォントや文字色はプロバティーウインドウで簡単に変えられるからwinformsと一緒なんだが
>>862 の人はwpf触ったこと有るんだろうか?
それとバインディングとテンプレートは全く別のものなんだが、並べて何が言いたいのか判らん
865 :
デフォルトの名無しさん :2014/06/17(火) 19:32:33.62 ID:8LhyGeIo
レイプじゃなくて売春だね
売ったのかorz
普通にテンプレートだけでできるね
870 :
デフォルトの名無しさん :2014/06/18(水) 08:34:38.46 ID:8UlZ7EwE
ここまで皆が熱くなるWPF おれも始めようかな
WPFはオワコンなのに何言ってんだか。
873 :
デフォルトの名無しさん :2014/06/18(水) 19:18:46.92 ID:GTroaFRm
WPFがオワコン× クライアントアプリケーションの時代が終焉を迎えつつある○
需要が縮小するだけで終わったりしないから。 WPFは終わる以前に始まってすらいない。
WPFはデータバインドがうまく使えないんだよなあ
オワコンかもしれない けどWPF分かったら、もうWinFormsには戻れなくなる XAMLやバインドわかればストアアプリも楽
ストアアプリには一切興味ねーが、Formsには戻らない ストアアプリにかまける前にWP本体売れよ(プゲラ
・DirectX.NET ・Silverlight ・XNA ・WPF
Silverlight は WPF と同機能を有していればまだ未来があったかも…
880 :
デフォルトの名無しさん :2014/06/19(木) 19:58:32.30 ID:sQJKsUMF
JAVAと違って、内部クラスから外部クラスのフィールドを参照するのが面倒なんですね 内部クラスはあまり推奨されないということですか?
C#にはデリゲートがあるから内部クラスはあまり使わない
面倒も何もインスタンスの参照を渡せば触り放題だろ?
おさわり禁止なんですが
>>880 が言ってるのはJavaでobserverパターンで使うあれのことだと思うけど、
Javaやったことないと何のこと言ってるのか伝わらないよね。
突然当たり前のこと言いだしてどうしたの
>>884 > Javaでobserverパターンで使うあれのことだと思うけど、
なんだそれw
ひょっとしてリスナを登録するときに、
リスナやアダプタの派生をaddの引数のところでnewすることじゃないだろうな?
だとすると…まあいいやめんどい。
887 :
デフォルトの名無しさん :2014/06/20(金) 09:45:39.73 ID:si35yOOj
ASP.NET MVC 3縛りの環境で使えるASP.NET Identityみたいな認証フレームワークありませんか?
C#とC++とC++/CLIを同時にやっていると、もう 頭がわけ分らん状態になります。皆さんどうですか?
いや、別に……
自然にはっきり分かれてるのはIDEのおかげなんかなー 色分けされてるだけで今どれやってるか感覚でわかるな
>>869 ちょこっとやってみたけど簡単には出来なくね?
>>888 別にならなかったな
C++/CLIは面食らうことがたまにあったな
つぎはCX
894 :
デフォルトの名無しさん :2014/06/20(金) 23:34:49.99 ID:EtLrPewl
C#からSkypeの文字チャットのログって読める? 読み書きしたいけど、SKYPE4COM.DLLって生きてるのかな? 知ってるひといたら教えてください。
895 :
デフォルトの名無しさん :2014/06/20(金) 23:42:51.37 ID:pz7WGIcL
↑ しるかぼけ
skypeのAPI調べろよ ちょっとまえに潰されたような気もするが、ログ読むぐらいのは残ってるのかな?
3.5→4と言う記事はググればたくさん出てくるのですが、4→3.5に関する情報は ほとんど見あたりません。4用のIronRuby1.1.3を3.5で動くようにビルドしたいのですが 無謀ですかね?
ビルドできれば動くだろ 4の機能を使ってたらビルドできない 基本的にはそれだけのこと あとは微妙な互換性の話
>>897 IronRubyは3.5用にビルドできるようになってた覚えがある
ソリューション構成で指定できたはず
WP7用のバイナリならそのまま3.5で使えるかも
(JITが無効になるはずなのでお勧めしないが)
900 :
897 :2014/06/22(日) 16:33:41.12 ID:/YtzeWqy
>>898-899 thx。目的は素のWin7とWin8.xで動くバイナリがほしいです
IronRuby1.1.3のWP7用のバイナリは4用で3.5では動かないようです
IronRuby1.1の3.5用は動くようですがRuby 1.8系なのと起動するたびネットに
出ていこうとして気持ちが悪いです
出来ればRuby 1.9系の実装である1.1.1以降を使いたいです
今までにやったこと
・VS2010EXをインストール
・IronRuby1.1.3のソースコードをダウンロード&解凍
・ソリューションを読み込み
Solution Itemsが無いと怒るがそんなフォルダは入っていないので無視
・ソリューション構成が見つからない。構成マネージャ?構成マネージャを見ても
バージョンに関するらしき設定項目は見あたらない
・プロジェクトのプロパティに対象のフレームワークという設定があったので
すべて3.5にしてみるが一部のプロジェクトは勝手に4に戻ってしまう
4に戻ってしまうプロジェクトは以下の3つ
Microsoft.Scripting.Core
Chiron
Microsoft.Scripting.Silverlight
Silverlightがらみの下二つはともかくCoreは動作に必須っぽいのでビルドしない
わけにはいかないはず
VSの使用経験もC#の使用経験もない自分としてはどこから手を付けたらいいのか
見当がつきません・・・orz
Jythonで痛い目見てから、こういうVMへの移植って超懐疑的になった 結局保守するやついなくなるか、本家の更新速度についていけなくて消えるんだよね
本家というのはちょっと抽象的だった VMの更新と、言語の更新それぞれについていけなくて消える
904 :
897 :2014/06/22(日) 18:31:48.44 ID:95RLu5vG
>>901 おぉ、thx。VC#2008EXでもビルド出来るのかな
いったんVC#2008EXを入れたのですがソリューションファイルが
読み込めなかったので消してしまいました。VC#2010EXを消して
VC#2008EXを入れ直すか・・・
905 :
897 :2014/06/22(日) 21:56:35.04 ID:95RLu5vG
VC#2008EXでビルドできました。ありがとうございました
>>901 の記事に書いてあるエラーの回避はソリューションファイルを
編集してプロジェクトごと除外しました
大した執念だな 俺もIronPythonはやったことあるけど、 .NET使うんなら総合的に見ればどう考えてもC#で作った方が早いよ コレクション操作とかRubyと似通ったところも多くて(互いにパクりあってる)馴染みやすいよ まあIronRubyで作る上ではどのみちC#触るのは避けられないだろうけど
IpcChannelでプロセス間通信を行おうとしたんだけど、ハンドルがグングン上がってある程度のところでガクッと落ちてまたグングン上がるんだけど、、、そんなものなの? ハンドルリークしているかいまいちわからない・・・
CLR Profilerを使え
>>908 ありがとうです!!早速使ってみます^-^v
NET連携API仕様かいてるじゃん 動作確認しながらやればわかるんじゃないのか
移動するときは移動元に一言書いたほうがいいよ 自分でここまでやったけどわからない、という自分がやった内容を書いてくれりゃ レベルもわかるし対応策出しやすいんだが
>>913 アドバイスありがとうございます。一言書いてきました。
自分がやった内容は、恥ずかしながら
>>910 の最後のリンクのソースです。
とりあえず、サンプルプログラムで発声はできたのですが、
次の段階として感情パラメータをいじって
発声させたいのです。その辺が複雑でさらによくわかっていません。
>>914 もう一度知恵遅れとokwaveで聞いて来りゃいいだろ。氏ね
参照の追加でCeVIO.Talk.RemoteService.dllを追加するのはやったのか? やったなら using CeVIO.Talk.RemoteService; しとけばいきなりTalkerクラス使えるんじゃね?
>>916 TalkerクラスとSpeakingStateクラスを使えば発声はできるのですが、
感情関係のクラスの実装がいまひとつよくわかっていません。
質問します ネット上で見つけたイベントを発行するクラスのメソッドで public event PropertyChangedEventHandler PropertyChanged; protected virtual void RaisePropertyChanged(string propertyName) { var h = this.PropertyChanged; if (h != null) h(this, new PropertyChangedEventArgs(propertyName)); } のように一時的にローカル変数hを使用してるのを見かけたんですが このhはどういう目的で使われているのでしょうか?
マルチスレッドで動かしてると if (this.PropertyChanged != null) { // このタイミングでthis.PropertyChangedがnullになる可能性がある this.PropertyChanged(); }
eventには初期化時に() => {}を突っ込んでおいて何を-=してもnullにならないようにしとくと便利
>>919 そうでなくて初期状態がPropertyChanged==nullだからじゃない?
使用者がPropertyChanged += delgate{};を実装して初めてPropertyChanged!=nullになる
何が「そうでなくて」で何が「だから」なのか分からない nullチェックしてるんだから初期状態がnullだろうが何だろうがシングルスレッドなら関係ないだろ?
ワロタ
>>919 最適化が関係あるのかも?とか漠然と悩んでたんですが
マルチスレッドによる変更に対応していたんですね
お答えいただいてありがとうございました
いや対応なんかしてないよw ただPropertyChangedという長い名前(そうでもないと個人的には思うけど...) が複数個所に現れるのを嫌っただけだろう。 ついでに言えば、コード書いた奴がキモヲタで一人で「Hなのはいけないと思(」 とかいって盛り上がってた可能性大。
なんかよくわからんが、自己紹介してるようにしか見えんw
ローカル変数に入れてるのは何と無く以上の意味はないと思う 最適化にもまったく影響なし nullチェックと呼び出しの二回だけなら名前が長くてもかまわないから、俺なら入れない
コードを書いた人物の気持ちを答えなさい
930 :
デフォルトの名無しさん :2014/06/26(木) 19:48:25.64 ID:MXb/zj6q
>>929 「Hなのはいけないと思(」の部分のこと?
マジレスしておくと、HってのはHaskellのこと。略されている部分も
書くと「Haskellなのはいけないと思います。」になる。
C#とHaskellの戦争はあっちこっちで見ることができるから、興味がある
なら調べてみるといいよ。
なるほどスラングだったのか
932 :
918 :2014/06/26(木) 20:02:29.90 ID:oJe1PGDe
マルチスレッド対応ではないという意見もあるようで困惑しております
>>919 さんの、このタイミングでnullになる可能性があるというのは,なるほどと関心しました
仮にマルチスレッド環境下で,このnullになる可能性に対処するとしたらどうするんでしょうか?
みなさんがイベントでの同種の処理はどのように行っているのか教えていただきたいです
(そもそも対処して無いという意見も含めて)
他のスレッドがnullにしてしまう仕様に違和感がある。 俺はそういうのが必要になったことがないから何もしてない。
イベントはマルチスレッドが絡む場面が多いから
>>918 一択しかないな
>イベントはマルチスレッドが絡む場面が多い どんな糞設計だよ そもそもeventにnullを設定できるのは自クラス内だろ そんなeventのデリゲートを単純に実行しないし lockしてDelegate.GetInvocationList経由かなんかするだろ多分。知らんけど。
>>935 -=で登録されたすべてのデリゲートが解除されるとnullになるっぽい
マジ初心者用ですねここ
そういう場合はeventのadd,removeも含めて自前で実装してLockで囲む。
>>937 なるっぽいって・・・そりゃそうだろう。
>>936 で示されてるやり方は、単にエラーを出さないだけの逃げの手段でしょ。
マルチスレッドで動かすのにむやみやたらに+=や-=しちゃうのはどうかと思うが。
>>940 なんか話が迷走してるが、だから
>>918 のコードはスレッドセーフじゃないの。
ついでに、イベントにnullオブジェクト(空のラムダ)を入れておくのは
C#では常識と言っていいイディオムだと思うけど。
>>939 >>940 なんで?
+=、-=は不適切にadd/remove変えない限りスレッドセーフでしょ?
>>941 >>918 がスレッドセーフだと思ってないし、
スレッドセーフにしないといけない仕様はどうかと思うし、
空のラムダを入れるのが常識だとは思っていないな。
>>942 むやみやたらに=不適切に使用するから、
スレッドセーフを意識しないといけなくなるんでしょう?
CLRのメモリモデルだと
>>918 でスレッドセーフになるらしいよ
スレッドセーフにするためにいったんローカル変数に入れるのはMS自身がかなり多用してるテクニック
スレッドセーフを意識したい場合はあるでしょ 意識しなくていい場合もあるから、そのときはそこまでの厳密性は不要 でも、コードをわかりやすくするという意味でも空ラムダは結構使われている
PropertyChangedってクライアントのデータバインドが主用途だけど、WPFもFormsもクロススレッドアクセス許してないから イベントディスパッチの直前でスレッドセーフがどうとか気にするわけがない
>>946 WPFは別スレッドでバインドソースのプロパティを変更可能なんだよなぁ
サンプルで見かけてなんでだろうとか思ってたけど そういう理由があったのか
Delegateはstringなんかと同じimmutableだと気付けば理解は簡単
951 :
918 :2014/06/27(金) 11:36:23.50 ID:IxCTANL1
情報とアイデア教えていただいた皆さんありがとうございました イベント周りやスレッドセーフについての理解がまだまだなので精進します
自分では単に短かく書きたくてなんとなくやってたけど immutableだから中身が変わらないのか なるほどなあ
自動実装プロパティーとパブリック変数フィールド変数とは どう使い分けるのがマナーですか?
日本語でどうぞ。
フィールドをpublicにすることはない あえてするとすれば、P/Invoke用のの構造体ぐらい
書き捨てやめんどくさい場合はパブリック
パロパティって遅そう。
const は使い方によっては public にする
readonly property だな
自動実装プロバティーは初期化出来ないのを何とかしてほしい
相談室で聞いたら、ここに行けって言われたので来ました。 C#って何でプロパティとフィールドを二種類用意してるんですか? フィールドいらなくないですか?
食べたくないなら食べなくていい もう片付けるから
プロパティは外部にデータを公開する フィールドはデータを保持する 用途がちがう 自動実装プロパティは裏でフィールドを自動作成してるにすぎない
フィールドは変数 プロパティは関数 同じようで物が違う
ありがとうございます。
>>964 ,965
それって二種類用意してあるから、使い分けてるだけなのでは?
最初からプロパティ一種類しか用意してなければ、普通にそれで同じことができると思うのですが…
refで渡せないとか色々あるよ?
バインドってフィールドじゃねできないよね
>>966 フィールドがないとプロパティの値を保持できない。
>>966 分けた方がわかりやすいから
プロパティはJavaやC++のgetter/setterを置き換えるものだから、それと全く変えるというのはわかりにくい
そして、P/Invokeやシリアライズ、コピー関連ではフィールドとプロパティでは処理が変わってくる。
しかも、プロパティには継承もできたりするし、フィールドの役割をすべてプロパティにやらせると言語仕様がだいぶ複雑になる
インターフェースと仮想関数のオーバーライドって呼び出しの時の速度は変わらんの?
そんなにプロパティが好きなら値を直接持つプロパティのことをフィールドと呼んでいると考えればいいだろ JavaScriptなら実際そうだぞ
プロパティは読み書きする時にイベント出せる
>>973 モードレスなGUIクラスを作るためには必須の機能だな。
>>974 それやってるとカオスになる
モデル駆動にするべき
どこが笑いどころ?
977 :
デフォルトの名無しさん :2014/07/05(土) 00:24:18.36 ID:nlwWL+dx
自動実装プロパティとフィールドじゃ内実ほぼ変わらないわけだし せっかくプライマリコンストラクタが出来てもまだ冗長な代入をしなきゃならないプロパティなんて C#6.0を期に捨ててしまうことだな まあ「ソースレベル以上の互換性が必要で」「プロパティの実装を書き換えても再コンパイルの必要がなく動かせる必要がある」 みたいなものすごく特殊な人はプロパティじゃなきゃいけないんだろうけど
何言ってるのか意味がわからん
触れちゃいけません
プロパティでやってるのと同等の処理をpublicフィールドで実現している場合、 プロパティの実装変更に相当する修正は呼び出し元を変えるしかないんだから再コンパイルもクソも無い 頭大丈夫か
981 :
デフォルトの名無しさん :2014/07/05(土) 00:48:16.38 ID:nlwWL+dx
自動実装プロパティとフィールドはソースレベルではほとんど互換であり 構造体の場合はフィールドにしたほうが効率的 また記述も少なくて済む これは言語設計者からの出来るだけフィールドを使うべきというメッセージであるが いまだ理解されていない
982 :
デフォルトの名無しさん :2014/07/05(土) 00:50:04.99 ID:nlwWL+dx
>>980 何を言ってるんだ一体
呼び出し元を再コンパイルするに決まってるだろう
フィールドの型が構造体の場合、プロパティに変えるとだいたい動かなくなるぞ 細かい話だとrefやリフレクションもアウト
バインディングもプロパティ前提じゃないっけ?
>>981 普通のプログラマが受けとるのはむしろ正反対のメッセージだと思うけどねw
>>981 を見るに、構造体フィールドでa.b.c=1とかやっちゃってるんだろうな
フィールドをプロパティに変更したとき互換性が失われる一番多いパターンなんだよねこれ
あああ泥沼
あ
あゝ野麦峠
プロバティーといえば、依存関係プロバティーはもうちょっとナントカならなかったものだろうか
以前なんとかしたいなーと思って自前フレームワークを考えてみたが あれこれ考えてみると結局依存関係プロパティと同じ構成になるという結論になった
識別子が無駄に長くてウザいだけで構成はスッキリしてる