ふらっとC#,C♯,C#(初心者用) Part59
Visual C# 2010
ソース公開してても、Expressで読めないのが多いね ライセンスがどうとかで読めるようにできないの?
日本語でおk
Point p1=new Point(100,100); と Point p2=new Point(100,100); Point p1=p2 どう違うの?
p1とp2が同じインスタンスを指してる。 つまり、p2からの変更がそのままp1にも影響する。逆もしかり
いや.NETのPointは値型だからp1とp2は別。 もしPointが自分で作ったclassなら仰るとおり。
値型かあ…
ざまぁww
vs2010expressまだー?
ワロタw が、自分で回答したら同じことを行ったかもしれん
4/28: Visual Studio 2010 Express (日本語版) 提供開始 あれ?4/27だったような・・・
うっそ〜ん 今日はこれがなにより楽しみだったのに…
16 :
デフォルトの名無しさん :2010/04/27(火) 13:15:29
C#は格好いいよね。
GWまでに間に合えばいいや
なん…だってェ… wktkしてたのに…
FixedToolWindowにしているんだけど alt,spaceキーをおしたときにMenu画面(拡大縮小などができる)が表示されます このメニューを表示しないようにできませんか?
ControlBox非表示にすれば出ないけど、×ボタンも消えるな
キーボードで移動ぐらいさせてくれよ 最大化最小化はMaximizeBox/MinimizeBoxで不可能にしても構わないからさ
まぁ実際Windows7からはAlt+Spaceちょこちょこ必須だったりするしなw
こうやって初心者の質問を食いつぶされるのであった
設計が間違っているという事を教えてもらえるのはありがたいことなんだがな スマートな方法は無いんじゃないか?
>>19 なんで出ちゃいけないの?
それを言えば、何か他の案が出るかも。
Alt+Spaceを潰すだけなら、そのFormのProcessCmdKeyをオーバーライドして 該当キーのときに処理済みにしてしまえばいいんだが 他の方法で開いたりすることができるかもしれんしなー
タイトルバーの右クリックで出ちゃうよね。
>>19 単に気に入らないから出したくないというなら、あきらめろ。
最大化や最小化を防止したいなら、MaximizeBoxとMinimizeBoxをfalseに設定すれば、
システムメニューの最大化、最小化の項目がグレーアウトして使用できなくなる。
最大化ボタンと最小化ボタンは表示されてないだけで機能が生きているから
システムメニューにも表示される。その機能を無効にしてやればいい。
>>28 そのXMLファイルはXmlSerializerで出力したものなの?
まずデバッグしろと 「読み込めてない」は実行時例外が出てるのか、 デシリアライズされたオブジェクトが想定していたのと違う状態なのか、もしそうならどんな状態なのか
どう考えても違うだろw
>>28 こっちで試したら、XMLファイルの行頭のハイフンを消せば読み込めるね。
拾ったプロジェクトソースを開きたいんだけど開けないんだけどどうして? 「無効なライセンスです」 「この種類のプロジェクトをサポートするバージョンを使用して下さい」 というエラーがでます ソースはC#で作らています 私はVC#EE2008です VSで作られたものは開けないとかありますか? もしくは、ProやUltimateとかで作られたものはExpressでは開けないとかありますか? もしくはライセンス登録してないからとか?
>>31 デバッグはしたけど例外はでてませんでした。
ソースからプログラムを動かしてちゃんとロードできてるか試す感じだったので改めて例外は書かなくていいかと思ってたのですが
デバッグの有無は改めて書いておいたほうがよさそうですね
>>33 元のソースにハイフンが入ってるわけないなあとチェックしてみたら91行目で調べてたcls.name[0]はxmlではnullでした
xmlに書き込むソースを改善したらうまく動くようになりましたありがとうございます
37 :
19 :2010/04/27(火) 21:53:43
レスありがとうございます ショートカットキーを設定するフォームを作っているのですが Alt+F4が登録できなかったりするのでどうすればいいのかなと思いまして
Alt+F4とかAlt+Spaceぐらいは標準の動作のままで良いと思うけど 一応、さっきも書かれてたProcessCmdKeyのオーバーライドで既定の動作は無視できる
39 :
19 :2010/04/27(火) 22:45:10
で!できたー! ありがとうございます
でもさあ、そんなショートカットキーを使えるようにするのはちょっと面倒だぞ。 すべてのフォームで、ショートカットキーが登録されていたら既定の動作を無視する コードを書かにゃならん。
自ウィンドウ内で別プロセスのオブジェクトを表示&操作させるにはどのようにすれば実装できますか? 最近ではGoogleChromeなど、タブがマルチプロセスになっているみたいで。 WCFによるプロセス間通信を見ていますが、 クライアント側(自アプリ)、サーバ側(別プロセス)になってしまうのでは? と思っています。 理想的な処理の流れとしては ・自ウィンドウで別プロセス作成 ・指定の別プロセスのオブジェクトを取得 ・取得したオブジェクトを表示 ・自ウィンドウで不要になればオブジェクトを非表示・別プロセスを終了 もしかすると見当違いなのか?とも思ってます。 よろしくお願いします。
あれって、レンダリングを行うプロセス群と、まとめて描画を行うプロセスに分かれてるんじゃないの?
43 :
41 :2010/04/28(水) 00:45:42
>>42 その分かれている所のやりとりがわかりません。
イメージ的にはMDI子フォームが別プロセスになればと思ってます。
デスクトップの上にいろいろウィンドウが開かれてる様はまさにそのように見えないかね
>>41 それやると自ウィンドウが膨大なメモリを所持することになるよ
どちらにしてもw32でやる話だが
>>40 マスタフォーム作ってそこで処理
それを継承したフォームでやればいいんじゃ?
47 :
19 :2010/04/28(水) 09:43:20
>>40 >>46 難しいことになるようですね
初心者なので規定のコマンドはそのままにしておきます
最小構成とか書いてへんやんか
>>48 これインストールするには今の2008をアンインストールするんでしょ?
MS関連のが多すぎてどれをアンインストールすればいいの?
C#だけでいいのかな?
アンインストールしなくても入るよ
なんで二つも入れてるの? HDDの無駄になるからアンインストールしたいと思ったんだけど
>これインストールするには今の2008をアンインストールするんでしょ? って聞かれたからしなくても入るって答えただけなのに何これ 日本語初心者がいく所は小学校だぞ
しなほうがいい場合もあるかもしれないからああいう書き方したんだよ
しなほー
お前をアンインストールしてやる。
前つかってたベータ2バージョンとは激しく違う(動作の軽さ) 快適に動いてくれてよかった。 あと、C#とC++一緒に作ってたが 同じVSで作らないといけないのが不便だったがVC#とVC++同時起動できるから便利。
むしろどうしてあんなに重かったのか
スーパーπ
msdnまだかよ
いくらバージョンアップしても2.0の機能しか使ってない俺には無駄だ
ヒントが絞込みになったのは凄くいい
そこかよw
確かにいいな。
ヘルプが使い易くなってる firefoxで開くのがいい
なんかC#2010で作ったアプリの起動がやたら速いんだけど どういうこと?
素直に喜べよ
喜んでるんだけどさ 今までずっと起動が遅かったじゃない? バックグラウンドアプリ作りたくても起動遅いから Python使ってたんだけど、これすごいよw もう全部4.0に書き換えだわw
お、俺も入れ換える!
うおお入れるぞおおおおおお
インスコ再起動後daemonが起動せず、ドライブ認識できなくて4回やり直したわ
2010でGoogleIME完全に使えなくなったわww
起動早くなるのはハイエンドのマシン使ってる場合だけで XP世代のマシンだとむしろ軒並み遅くなる、なんてオチなんだろうなどうせ。 そりゃあそうでしょうとも。
>>75 xpだけど速いよ?
ネイティブアプリのようにダブクリした瞬間起動するけど
ToolStripSeparatorがToolStripMenuItemにキャストできなくなってる
プログラミングし直さなきゃ・・・
C#ってWin32APIも使える?ドトネトしか無理?
使える。
ダイアログから受け取ったオブジェクトはDisposeしたあと消えちゃいますか? object obj=frm2.Obj; こんな感じで受け取ったら消えているんだけど
全部大文字でインテリセンスきくがなんか意味あるんだろうか・・・ たとえばMessageBoxはMBでインテリセンスがMessageBoxを候補してくれるが・・・
>>79 受け取り方による。
オブジェクトのコピーが作られるような受け取り方をすれば、ダイアログがどうなろうと
消えないんだけど、そのやり方は型によって違う。
>>79 それはfrm2の実装によるので一概には言えない
frm2を作った奴に聞け
TreeNode node=frm2.RootNode; だとどうですか?
Microsoft Visual C# 2008 ExpressEdition を使っていて、参照の追加でSystem.Linqを追加しようとしても見つからないのですが、 これはどうすればいいのでしょうか??
System.Core.dll ターゲットフレームワークは3.5にしないとダメ
>>85 System.Coreを参照しる
で、Using System.Linq
using書けばいいだけじゃないの?
>>86-88 レスありがとです
System.Coreを追加、v2.0.50727からv3.5に変えてみた所、Linqなんちゃらエラーはなくなりました
ありがとうございました
デジタルクロックを作ってみようと思い、フォーム上にラベルとタイマーを追加しコードを以下のようにすると ビルドやデバッグ開始ではエラーも警告もなく起動するのですが、コンパイルしようとすると「InitializeComponent」「timer1」「label1」は 現在のコンテキスト内に存在しません。とエラーが出るのですがこれは何が間違っているのでしょうか? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DigitalClock { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { this.label1.Text = System.DateTime.Now.ToLongTimeString(); } } }
EEのダウンロードページが勝手にリロードしてカチカチうるさい
ダウンロードページなんて閉じよw
理由はそのまま Form1というクラスの中に label1という変数と timer1という変数がなくて InitializeComponent()という関数が定義されてない まぁ〜Designer.cs消したかそもそもコンソールアプリとか…
2008のプロジェクトを2010でビルドしたら いつのまにか、ソリューションをクリックすると アクティブ構成という項目が追加されていて 前だとDebugとReleaseをF5,F6を押すことで 自動で切り替わっていたのに アクティブ構成でdebugとなっているとF6を押しても Releaseフォルだの方にビルドされてくれない ツール>オプション>ソリューション>「ビルド構成の詳細を表示」はチェックは入っていない 試しにチェックしてビルド、外してビルドとしてもこの項目が消えてくれなくて 不便なんだけど前のようにF5,F6で自動でフォルダを分けてコンパイルしてくれるように できないでしょうか?
Labelコンポーネントで 文字を斜めとか縦書きで表示したいんだけどどうすればいい?
LayoutTransformとかRenderTransformとか
WinFormsのLabelでは不可だな
WPFなら
>>98 だけどWPFだったらそういうのはLabelじゃなくてTextBlock使うべき
WinFormだってLabelのOnPaintオーバーライドして必要なら2,3プロパティ 追加するだけなわけで、「不可」とか言い切っちゃうのはどうかと....
それLabel関係ないじゃん
WAMLとかいうのやってみたけど なんで数字まで""がついてるんだよ なんとか.width = "200"とか text = "Hello"ならわかるが 数字が単なる文字列みたいで気に入らないな。
XANLか? そりゃXMLの仕様だ。
実際XMLのフォーマット上は特に区別はない 型はスキーマで決まる
>>101 じゃあFormを派生して書くコード(毎日やってるはずだが)は
「Form関係ない」わけね。
よくわからない思考法。
Formを表示するのに基底のFormの機能を使ってるだろ 文字を表示するだけだったらLabelから派生する必要はない
質問者の質問が読めてないのかな。(
>>97 )
"Labelから派生する必要"があるかないか、どうして分かるんだろう。
例えばBorderStyleやAutoSizeといったプロパティが必要かもしれないし、
Labelと透過的に扱える必要があるのかもしれない。
死ねよ。
>>108 う〜ん
何故かpartialが効いていないような…
あんまりあれな方法ですけど右のDesiner.csを右クリック→コードを表示
カット&ペーストで
最初の
<summary>
〜
private System.Windows.Forms.Timer timer1;
までをForm1.csにうつせば通るんじゃないかなぁ〜
何言ってんだお前。 cscで、そのファイルだけコンパイルできるわけないだろ。
コピーとか関係ないんだが。
あのよ、プロジェクトをcscでコンパイルしようってんなら、cscで プロジェクト内のすべて.csを指定して、参照してるアセンブリを/referenceで指定して・・・ ってやんないと無理。 普通、そんなことはやらん。せいぜい、msbuildを使うくらい。
コピペ君って馬鹿だな、を地で行ってみました、まで読んだ。
ああ できねーって騒いでたのはcscで個別にやってたのか なんでIDEのビルドを使わないのw F6押せばいいじゃん
>>108 プロジェクト落としてそのままコンパイルしたはずなのに
フォルダのファイルおかしくね?
>>110-117 レスありがとです
>>94 氏にUPしていただいたフォルダで皆さんの全ての.csを指定というご指摘通りに
「csc Form1.cs Form1.Designer.cs Program.cs」とコンパイルしてみたら無事Program.exeが出来ました
ありがとうございました!
何でわざわざプロンプトからコンパイルしているんだろう?
>>119 すみませんそれ以外のコンパイル方法がわからなくて・・・
>>121 レスありです
F6キーを押すとプロジェクトフォルダ\bin\Release\の中にコンパイルされるんですね
活用していこうと思います
>>122 F5キー押せばその場でデバックもできるよ
上の方にある緑色の右向きの三角形クリックで実行できる… その前に何でcscを先に知った
>>123-124 レスありです
今までファイル名を指定して実行→cmd→・・・ってやってた自分がバカみたいです。。
ビルドとかデバッグはしたことあったのですが、あまり意味がわかっておらず、
cscでコンパイルする前の動作確認のためだけのものかと思ってました・・
プロジェクトフォルダに出力されてるのにも全く気付かなかったです
cscは読んでいたサイトでこうやってコンパイルしますーみたいに書いてあったので使ってました・・
そんなことあんのかよ…と思ったが 本当にcmdからcscでコンパイルすると解説しているところもあるんだな。 俺はVS使った後にcscの存在を知ったと言うのに。
前にそのクラス内でのみ使えるプロパティの質問でできないと言われたけど できるじゃない public int Hoge {private get; private set; }
入門書一冊買った方がいいかと・・・
private int Hoge{get;set;}となんか違うの?
本なんて面倒で読む気しないぞ PCなら寝ながらでも暗がりでも見れる 出版側も本作るより楽なはずなのにな
本を読むのが面倒ってどんだけゆとりなんだよ。
本とかネットがどうたらの前に
>>127 に対して以前回答した奴が悪いw
>>133 君よく空気読めない奴だなって言われないかw
適当に進んでるスレで空気読む必要あるのか?
言ってるそばからなんと「空気読めない」発言....
落語のオチを説明するようで情けないが、空気読めない、っていうのは別に
その場の雰囲気を読めないとか何とか、そういう特殊日本的な能力のことを言ってるわけじゃない。
>>129 なんか、誰が読んでも明らかに半分以上「嫌味」で言ってるに決まってるのに
そんなことも読み取れない読解力のなさのことを言ってる。
嫌味で言ってるのにマジで答えてどうするんだよ そんなにしてまで「人に教えを垂れる自分」に酔いたいのかねw しかもこんな低レベルな話でさ。 かなりおめでたすぎるだろう
え、ちゃんとした回答だったの?
どうでもいい
文字だけの世界で真意なんて完全に読み取れるわけねーだろ
141 :
129 :2010/04/30(金) 12:36:25
なんか俺のせいで荒れてるみたいでごめんよ 別に嫌味で聞いたんじゃなくて目から鱗の何かがあるのかと思ったんだ
142 :
127 :2010/04/30(金) 12:37:12
143 :
129 :2010/04/30(金) 12:38:19
>>142 自分の勘違いを人のせいにするとか最低な奴だ
春だねえ〜
>>143 それはお前の勘違い
この質問の時そういうのがあればというレスはいくつかあったから
そのうちの一人だろ
privateフィールド変数
みたいな書き方するの俺ぐらいだしw
空気嫁と叫んだやつが空気悪くした件
空気読めてなかったのは誰だよってやつだな
空気読めなんて言ってないけどなだから。 得意になって教え垂れてるけど、「それ」が本当にマジな質問かどうか考えてるのか、 って言っただけだが。
ソッスネw
個人の人格叩いてるわけじゃないので、勘違いして続けないよーに。 さあ、もうやめましょうね。
空気読めないって人格攻撃の一つだろ
スレを憎んで人を憎まずってやつよ。 続けるなっつーの。
イギリス人には 「紳士はこういうときにスルーするものです」 ドイツ人には 「規則ではスルーすることになっています」 イタリア人には 「さっき美女がスルーしました」 アメリカ人には 「スルーするとヒーローになれますよ」 フランス人には 「スルーしないで下さい」 北朝鮮人には「将軍様がスルーしろと仰っています」 日本人には 「みんなもうスルーましたよ」
>>129 全然違う!
>>129 なんかと一緒にするな!
>>127 は、なんとCS0274になるんだぞ!凄いだろ!
まあ何というか、そろそろネタバレしてもいいかなあと
初心者スレだから見た瞬間にコンパイルエラーと分からない人もいるだろうし、
あまり放置しすぎるのもどうかと思うわけだ
158 :
デフォルトの名無しさん :2010/04/30(金) 21:13:09
C#2010容れて見た。ツールボックスにChartが追加されてる! で、どうやって使うんだコレ?
ところでみんなC#で何作ってるの?
業務アプリ
人工知能
クローラー+ダウンローダー+重複チェッカー
ただのオナニーマスターだよ
フォームにチェックボックスをつけ、CheckedChangedのイベントでチェック時はウィンドウを最前面に表示するようにしたのですが、 チェックボックスのプロパティのCheckedをTrueにしてプログラム起動時からチェックが入ってる状態にしても、 一度チェックし直さなければ最前面表示されないんですが何か解決策はありますか?
166 :
165 :2010/05/01(土) 02:12:30
すみません 上の方にthis.TopMost = true;をもう1行追加することで自己解決しました 駄レス申し訳ないです
できるだけ書かずにデザイナのプロパティいじれ
168 :
165 :2010/05/01(土) 02:40:43
>>167 レスありがとです
フォームのLoad時にCheckedChangedのイベント設定することで書かずになんとかなりました
"reverse".Reverse() => "esrever" とできるように既存のクラス、コンポーネントのメソッドを 外部から拡張する技ってあります?
拡張メソッド
そのまんまか トン
こんな感じか。 public static class StringEx { public static string Reverse(this string value) { StringBuilder buf = new StringBuilder(); for (int i = value.Length - 1; i >= 0; --i) { buf.Append(value[ i ]); } return buf.ToString(); } }
>>169 StringはIEnumerable<char>だからStringに対するReverse自体は可能だよ
"reverse".Reverse().Aggregate("", (s, c) => s + c)
Aggregateが嫌なら
>>172 みたいに個別に実装するより
IEnumerable<char>を引数にとって連結した文字列を返す拡張メソッドを書いた方がスマート
c#のウェブブラウザーコンポーネントってIE入ってない環境でも動作する?
IE入ってない環境ってWin95とかか?
しない
>>177 でガッカリしてることにビックリした俺はおかしいか?
ああ、頭おかしいね
ウェブブラウザーコンポーネントってIEコアを使ってるだけだしなあ
>>178 スレタイ読んでも納得いかないなら別のスレいくといいよ
EUとかクンコカ向けWindowsはIEがバンドルされてないんだっけ? そういや7からは日本版にもメールクライアント入ってないのな。
184 :
デフォルトの名無しさん :2010/05/02(日) 05:38:27
c#でcの関数、例えばfgetsとかって使えないのですか? 使えたら方法を教えてくだしあ
186 :
デフォルトの名無しさん :2010/05/02(日) 05:53:07
>>185 ありがとうございます
ぽいことと言うか、c++で作ったメソッドの(charやDirectXの関数を使ってる)コピペをそのまま貼り付けたのですが
エラーが出まくったので、とりあえずchar[]の[]を消して、stringにしたりしたのですが
#includeもできないみたいですし、Cの関数を使ったり、DirectXのライブラリを、オプションとかで設定して使えるようにできないのですか?
全くC#の機能を使って同じ動きがするように書き直すしか無いのでしょうか?
>>186 DirectX使いたいならXNAにするとかすればいいんじゃないかな?
あれはDirectXのラッパーのはずだし
それにC++のchar配列はC#の場合Stringで対応かな
文字とか入れてるんでしょ?
あーごめんぼけてた >全くC#の機能を使って同じ動きがするように書き直すしか無いのでしょうか? そうです。 言語の仕様が違うので書き直しです。 c#の方がスマートに書けるのでそんなに苦労しないと思うけどね
189 :
デフォルトの名無しさん :2010/05/02(日) 06:03:49
>>187 数字です(数字を文字と言ってもいいのかさえわからないレベル)
フォームアプリを作りたかったので、その場合C#が良いと聞いたのでC#で始めようと思ったのですが
使えないならC++/CLIかなんかそんな感じのC++でフォームアプリを作れるのだと多分コピペできるのでそっちでやりたいと思ってます
つか、C++/CLIかなにかとC#はドットネットだから同じ物だよみたいな事を聞いていたので、てっきりcharとかfputとかc用のライブラリとか、使えると思ってました
フォームアプリとDirectXがなんで一緒に・・・・
C++/CLIはC++とC#を同じソースに同時に書けるといった感じの 二階建て言語だからね〜
>>191 あれってそんな仕様なの?w
まあ
>>189 がどういうものを移植しようとしてるのかが
もうちょっと明確になればなあ
193 :
デフォルトの名無しさん :2010/05/02(日) 06:20:43
使えないんでつか… C++/CLIでやりまつ(`・ω・´) ありがとうございまつた
いや・・・・ ちょっと書き直せばいいだけでしょw 実際そんな手間じゃないと思うよw どういうアプリを移植しようとしてるの?
>>192 まあ大げさに比喩で言ってみたんだけど
/clr:safeでエラーになら内書き方をすればC#相当ということ。
C++/CLIなんか手に負えないと思うけどなw あれはC++とC#の両方がちゃんとわかってる人が嫌々使うもんだ
C/C++の方はDLLにして、P/Invokeする方が楽。
C#はC++の拡張じゃねぇ… C#はC#だ
XMLシリアライズでクラスを復元するメソッド内ではクラスの中身が復元されてるんですが メソッドを出ると消滅するのはなんでですか?
>>199 シリアライズは使わない方がいいよ今後のために
普通にXML Documentで吐いたほうがいい
INIファイル最強伝説
INIとか忘れかけてたwwww そう言えばあったな・・・・ つうか、設定クラスをバイナリにして保存→復元 てのもあり?
プロパティの変更に弱い方式はウンコ
XmlSerializerはまだマシ それ以外のシリアライザは最悪 保存じゃなくて通信に使うもんだあれは
DataContractSerializer最強 XmlSerializerは柔軟性なさ過ぎてまじゴミ
XmlSerializerはシリアライザというよりXML文書の読み書きに使うものだからなあ 逆にDataContractSerializerはフォーマット固定なのでシリアライズにしか使えない シリアライズ方式はXmlSerializerに近くて変更の影響を受けにくいのでシリアライザとしては最強
オーノー .netではシリアライズが標準なのかと思って勉強しまくってます
メソッドを出ると消滅、とか、何のことだか俺にはサッパリなんだけど このスレはエスパーが揃ってるのか
ローカル変数に入れててスコープから抜けてるんだろ
単にスコープはずれたとかそんなんじゃないの?
スコープ外れたらアクセスできないし どうやって消滅してることを確認するんだよ
確認したわけじゃなくてデバッガのウォッチペインから消えただけとか予想
ほんとに確認しようと思ったらWeakReferenceで追跡するとか COMでCLRホストしてコールバックさせるとかくらいしないと
すいませんメソッドの外にひとくくりにする時にメソッド内の宣言部分を消し忘れてました シリアライズ関係ありませんでしたすいません
お前はまずC#の仕様を勉強してこい
すいません
吸います
218 :
デフォルトの名無しさん :2010/05/02(日) 20:36:17
.netFramework4.0って劇的に変わったところあるんすかね
あんまりない。
dynamicとoptional parameterでついにExcelを操作するのにVBがいらなくなった
parallel関係は面白そうだけど目を見張るほどではないね
>>220 C#から容易にExcel操作できるん?
>>220 どっちも.NET Frameworkの新機能じゃなくてC#の新機能だけどなw
dynamicは.NETの新機能だぞ DLRがないと動きません
226 :
デフォルトの名無しさん :2010/05/02(日) 21:13:27
どーせ社内システムとかでしか使わんのでバージョン揃ってるから、事前 バインディングで問題なかった。
勘違いしてる人が多そうだけどdynamicはリフレクションじゃないよ でもCLRにそういう命令が追加されたわけでもない 対象の操作を行うメソッドを動的に生成してデリゲートで差し替えてるの
SortedListから値を取り出すときに、求めるキーそのものがなくても一番近いインデックスを教えてくれるような機能が欲しいんですが そういうのってないですか?
229 :
デフォルトの名無しさん :2010/05/02(日) 22:24:55
>>222 元から出来るじゃん
簡単にってのが引っかかるが
>>228 List<T>使う
追加や検索は常にBinarySearchで
>>229 C#だと引数の省略ができなくて大変だったんだよ
System.Web.dllを追加したく「参照の追加」の.NETタブの一覧を探したんですが、 見つからないので参照タブにて直接DLLを指定したら 「アセンブリ "System.Web" を解決できませんでした。このアセンブリは、現在のターゲット フレームワーク ".NETFramework,Version=v4.0,Profile=Client" 内にありません。 ターゲット フレームワーク内にないアセンブリへの参照を削除するか、プロジェクトを再ターゲットしてください。」 とエラーが出たのですがこれはどうすれば解決できますか?
IDEのバージョンは何を使っててターゲットバージョンは.netバージョンいくつなの?
2010Expressです すみませんターゲットバージョンっていうのはどれのことでしょうか??
VC#2010Express? VWD2010Expressとかいわないよね?
Visual C# 2010 Expressです
いまいち状況がよくわからんが余計な参照入れたのならはずすだけじゃないの?
239 :
223 :2010/05/03(月) 07:32:15
>>238 もちろん削除したらエラーは消えるんですが、System.Webはどのように追加すればいいでしょうか?
240 :
233 :2010/05/03(月) 07:33:36
コードの上に using System.Web; って入れるだけちゃうの? どんな機能を使いたかったの?
242 :
233 :2010/05/03(月) 08:30:38
246 :
233 :2010/05/03(月) 09:03:14
>>243-244 .NET3.5とか4.0のほうばかり見てました
2.0のフォルダにあったSystem.Web.dllを入れてみたら正常に追加されました
ただ今度は「古い形式です」と出たので1.1の方のフォルダにあったものを追加したら無事コンパイル出来ました
多分2.0の方だと
>>244 さんが書いてくださった方法が使えるんですね
ありがとうございました!
>>246 .netもなんだかんだで歴史あるしネットのサンプルコードが書かれた時代と
仕様が変わってるケースがあるので、掲載年月日とかも見た方がいいね
248 :
233 :2010/05/03(月) 09:06:47
>>245 すみませんレスかぶりました・・
書いていただいたソースを使ってみたらコンパイル出来ました
System.WebじゃなくSystem.Netというのもあるんですね
また機会があったら使ってみたいと思います
ありがとうございましたー!
.NETのメール関連のクラスは、日本特有のメール文化からくる エンコードの問題に対処できないので業務ではぶっちゃけ使えない
250 :
デフォルトの名無しさん :2010/05/03(月) 13:35:21
フォトショップをジャバスクリプトとDOMで制御するのを始めて1年目の者です。 職場の生産システムに導入して、効率を上げる事を目的にしています。 (金にならない自主作業ですが) DOM利用のドキュメント処理はもちろん、ファイルの扱い、GUIも 一応理解して、システムを構築できるレベルにあります。 しかしだんだん欲が出てきて、もっと速く画像処理できる プログラムを開発できないかと考えるようになりました。 それで、現在言語を物色中なのです。 それで、C#が取っ付きやすそうだと単純に思ったのですが、 C#で、2Dの画像処理を開発経験のある方のご意見を伺いたいのです。 フォトショップのDOMは理解しやすくて簡単なのですが、 C#で2D処理する場合、DOMみたいなものを利用できるのでしょうか その辺りの情報が初心者なので皆無なのです。 C#の2D処理に関する、学習の筋道をお教えください。 お願いします。
そんなんないし、そもそもC#で画像って、どこかでライブラリ買ってこないと 話にならないと思うよ。
何がしたいかによる 写真に特殊効果かけたりするようないわゆる画像処理は大変だし そもそもPhotoshopの速度を超えるのはまず不可能だけど 図形や文字描いたりするだけなら簡単だよ
現状では JavaScript→AdobeのDOMレイヤー→ソース ってアクセスしてるのでしょう? レイヤーがないんだからソースを直に読めるかどうかによるが ソースが何なのか書いてないからできるとも言えない
254 :
デフォルトの名無しさん :2010/05/03(月) 14:39:20
>>251 >>252 早速、ありがとうございます
DirectXは、確か画像処理用のライブラリ(なのでしょうか?)
だったかと思いますが、それを利用するというのはできませんか?
やりたい事の一つは、大量の画像をトリミングする作業です
被写体の位置と大きさを一定にするのが条件です。
なので、必要な機能は、以下になります。
1:ウインドー上の画像をマウスで位置調整できる
2:画像のどの位置にマウスポインタがあるか把握できる
3:拡大縮小による画像の補完機能。
スクリプトでしか処理し得ない部分と
フォトショップの基本機能による手作業を分離すれば
できる事ではあるのですが、専用のソフトで一括処理できれば
よいなと考えています。
余裕 .NETの標準のライブラリの範囲(System.Drawing/WPF)でできる DirectXはリアルタイム処理のためのものなのでこの場合はいらん
それって画像認識が必要じゃないの?
手作業だろ
>>255 の通りだが
>DirectXはリアルタイム処理のためのものなのでこの場合はいらん
これに関しては古い知識なので相手にしないように
259 :
デフォルトの名無しさん :2010/05/03(月) 15:12:35
>>253 ソースはjpgメインで、時々tiffという感じです。
(psdも扱えたらいいのですが、贅沢ですね)
>>255 希望が出てきましたー。
260 :
デフォルトの名無しさん :2010/05/03(月) 15:19:38
>>256 >>257 手作業の部分がどうしても残ります。
画像認識による自動トリミングは、夢ですね。
自動化するにしても認識(recognize)する必要はないな 検出(detect)する必要はあるけど
> やりたい事の一つは、大量の画像をトリミングする作業です > 被写体の位置と大きさを一定にするのが条件です。 なら、被写体の位置と大きさを検出して、画像を切り取り&拡大&縮小、 だろ? 検出が一番大変だと思う。
263 :
デフォルトの名無しさん :2010/05/03(月) 15:59:33
例えば、大量に直立不動の人が立っている画像が沢山あるとします。 それぞれの人の身長はまちまちですし、フレーミングも変動している とします。これを以下のようにします 1:一定の画像サイズ 2:人物を中心に配置する 3:頭上の空間と、足の下の空間の幅を一定にする (画像内における人寸を一定にする) なので、一番欲しい情報は、 1:人物の高さの情報(座標情報) になります。 座標情報をマウスポインタを使い検出できれば 高さ情報を元に必要な拡大縮小率を導き出せます。 これは難しいですか?
どこからどこまでがプログラムの処理で、 どこからどこまでがユーザーの操作なのか、 その辺をきっちり考えた方がいいよ。
難しく考えなくてもこれだけだと思うが 1. 群集が収まる最小矩形を手動で選択 → R 2. 矩形Rを上下に一定の比率で拡張 → R' 3. アスペクト比が一定になるように矩形R'を左右に拡張 → R'' 4. 矩形R''で切り出して、サイズが一定になるように拡大縮小 とりあえず、アドバイスとしては ・Rを保存しておくと何かと都合が良い (2,3の比率を変えたくなったときとか.) ・4は専門のアプリ・ツールに任せるのが良い (拡大縮小は特に)
266 :
デフォルトの名無しさん :2010/05/03(月) 21:25:06
間が空いてしまいました。すみませんでした。
>>265 ありがとうございます。
C#では、取り敢えず3までの選択範囲の設定が可能ということですね。
問題は4なのですが、そのような機能を提供してくれるライブラリー
は、無いのでしょうか。(
>>255 情報もあります)
あればすぐにでも、C#の勉強を始めようと思うのですが。
あるよ。.NET Frameworkってライブラリが。
4もC#でいいよ ごく一般的なアルゴリズムが使えるから他のツール使っても同じ
269 :
デフォルトの名無しさん :2010/05/03(月) 21:56:21
>>267 >>268 msdnの.NET Frameworkを検索してみました。
「イメージ、ビットマップ、アイコン、およびメタファイルの操作」
のグループに、画像の補間に関する情報がありました。
これなら、いけそうです。
決意しました。C#を勉強します。
そこでなんですが、お勧めの書籍があったら
お教えください。
ある程度スクリプトとかの経験があるなら、MSDNだけで十分だと思うよ。
C#の勉強=ドトネトの勉強だから C#の勉強はVB.netの勉強にもnaる
272 :
デフォルトの名無しさん :2010/05/03(月) 22:55:48
>>271 .NET Frameworkを共通に使うからですね
93%同じ言語
えw VB.netなんて糞構文でしょ なんで存在するのかわからない言語
VB6の人達向けに、あるいは混乱させるために
別に言語でどうのこうの言いたくないんだけど VBはネストが深いと読む気が失せる
>>276 それはむしろ逆。
よく知らずに何かを貶すのは馬鹿っぽいよ。
>>274 既存のVBerを逃したくないという、マーケティング上の理由でしょ
>>277 知らんがな。俺が読みにくいと思っただけだよ
VBとC#なんて、言語で言えば五十歩百歩だろ。
>>280 C#にしかない機能も結構あるし、総合的に見ればC#の方が使いやすいのは確かだとは思うけどね。
まあ構文についてはどっちもどっちでしょ。
それぞれ利点と欠点があるから、一概にどっちが良いとは言えんと思う。
ただ今の20代以下だとC系の言語から入ってる人が多いからC#の方が読みやすいんだろうな。
俺も
>>280 と同意見
匿名メソッドやその辺が違うとしても
結局やれることに差は無い
Javaとかも含めた手続き型オブジェクト指向言語なんて、 どれも大して変わらんよ。
新Ver提供延び延びになってるJavaなんかもうどうでもいい
伸び伸びBoy
>>283 静的型と動的型
クラスベースとプロトタイプベース
全然違うと思う
.NET4でManaged DirectX使おうとすると、 FileLoadExceptionが出たり、デバッガで止まったり、.NETじゃない例外が出て落ちたりするんですが 一番いい回避策はSlimDXですか? ジョイパッド読みたいだけなのでDirectInputが使えればいいんですが。
288 :
デフォルトの名無しさん :2010/05/04(火) 07:03:13
vistaで管理者権限で動いているプロセスから、 別のexeを標準権限で実行するにはどうすればよいでしょうか? Process.Start(パス)で実行すると権限を継承してしまいます><
>>287 >ジョイパッド読みたいだけなのでDirectInputが使えればいいんですが。
joyGetPosをP/Invokeじゃだめなの?
「C# joyGetPos」で検索したら色々でてくるよ。
>>289 DirectX使わなくても読む方法があったとは
ありがとうございます
291 :
デフォルトの名無しさん :2010/05/04(火) 11:27:54
すくしょをとるめそっどってどれだけあるの? 描画のサーフェスを取得するってことにはぜんぶかわりないの?
292 :
287 :2010/05/04(火) 11:42:31
>>289 リモコン的操作に使いたいのでリアルタイムじゃないほうがいい
→joySetCaptureを使おうと送られてくるメッセージを調べる
→どうやらボタンは4つまでしか認識できないらしいので使えない
とラッパーライブラリを作った後で気づきました
XNA使えばいいじゃん 簡単だよー
>>288 DuplicateTokenEx()でトークンを複製して、CreateProcessWithTokenW()とかで
実行、で行けるみたい。
>>283 主旨違うかもしれないけど
プロパティなかったら未だにget,setアクセサ殆ど作らなかったと思う
GetValue,SetValue面倒くさかった
>>286 Javaの語でいきなりJavaScriptの話にするのはちょっと
ファイルが存在するかどうか調べるメソッドは? たとえば、C:\新しいファイル の中にエロ画像.jpgがある場合 exist(@"C:\新しいファイル\エロ画像.jpg"); でtrueを返して エロ画像が無い場合falseを返すようなメソッドは どこにありますか?
FileInfo.Exists
ファイル操作なんだから、System.IO から辿っていけばそのうち見つかるわな。
2010でコマンドラインパラメータの解析を簡単にやる方法ないですか? 相変わらずループまわして地道にやるんですかね。
Splitするくらい?
ない みんな作ってるから適当にweb漁ってパクれ
304 :
287 :2010/05/04(火) 14:56:35
対応はしていないが、認識はちゃんとする ボタン配置がめちゃめちゃなだけ
そこは初心者向けというよりはある程度慣れてきた人が 辞書的に使うところかも お題に沿ってとりあえずやれる方がいいんだけどなあ・・・
十分初心者向けだと思うけどな
>>307 はプログラマとしての基礎体力がある人向けな気がする
ifって何?くらいのレベルの人のための解説ってC#には少ないと思う
>>308-311 レスありがとうございます
うーむ、ifとかさっぱり分からないですねw
入門用の解説が少ないとなるとまずは言語選択から考えなきゃいかんのかなー…
なにかソフトを作るってレベルじゃなくてPC上の操作(ファイルの移動やリネーム)をやりたいだけだから
単純で分かりやすいのが良いんだけれども
C#の絵本 とか
ifわからないってのなら言語はどれ選ぼうが関係ないw C#で勉強しろw
>>313 C#の絵本とか欲しすぎる…
甘えすぎてた、四の五の言わず勉強します
VBだと結構良書があるんだが C#になると入門者向け良書がビックリするほど少なくなるね 言語初心者は出来るだけGUIを使ったサンプル作成を主眼に置いた テキスト使った方が視覚的にコードの結果が分かるので良いと思う GUIの無駄なコードが増えるけどCUIでいきなり勉強してもつまんないし 「Visual C# 2005 [実践]プログラミングテクニック 応用できる基本の書き方」 .NETの代表的な機能をテキストエディタや画像ビューワと言った 具体的なサンプルコード書きながら説明されていてイメージを掴みやすかった この後にオライリー買い増したけどね
独習C#でいいじゃん
俺もC++始めたときにC前提にしてるのが多くて躓いたのを思い出した
まず軽くCをやったらいいのかもね
C++に進まないんだったらJavaのほうが
Cのソースを読む機会は多いからCをやっといて損はない。
他スレから誘導されてきたんだけど、 C#のおすすめの学習サイトある?
MSDN
初心者向けのサイトをヨロ
@ITに腐るほどあんだろ……
後出しで申し訳ないですけど ブログっぽいサイトや広告が気になるサイトはNGでつ
>>322 そのスレにスクリプト打ち込んでやるから教えろ
>>327 かなり内容が充実してそう
読んでみます
ありがとう
いやどう考えても誘導元は相談室だろ。
>>332 おっ、そっちのほうがとっつきやすそう
どうもカムサハムニダ謝謝Danke
DataTableと連結してるデータグリッドビューのセルに下のように直接値を設定すると カレントセルを上下に移動しないとDataTableに反映されないんだけど どうしたらいいですか? dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value = newForm.textBox6.Text;
335 :
334 :2010/05/06(木) 10:29:31
dataGridView1とDataTableの間にBindingsourceを入れて 値設定後に、bindingSource1.EndEdit();をすると解決しました。
C#っていうのとC#.NETっていうのは別物?
VB.NETの.NETと C#.NETの.NETではニュアンスというか、 多く使われている例の数が違う気がする。 C#.NETって、開発環境指すことあるでしょ。
一緒か、ありがと☆
そういう言い方をしてたのは2003まで。
初期の商品名がC#.NET。 C#.NET(2002) / C#.NET 2003 / C# 2005 Express 〜
正式には、「Visual C# .NET」ね。
OS/2の頃のIBMが何にでも/2付けてたのと一緒だな
.net framework2.0向けにコンパイルされた実行ファイルは 4.0だけがインスコされてるPCでは実行できない?
もちろん
4.0を使って動くはず。
MSは異常なほどに後方互換を重視する会社
注:XP以降に限る
もともと.NET4はXP以降でしか動かん
技術的には互換はあるが、マーケティング上の理由で動かないようにするMS。
>>350 サポートのコストばかになんないもん。
Apple なんかほんとバッサリ切るし。
注:Zガンダム以降に限る
10年サポートしてくれれば充分だろ。
なるほどさっきエラー吐いて動かなかったのでびっくりしたがやっぱ動かんのね readme.txtには.net2.0以降が必要ですじゃなくて .net2.0が必要ですと書く必要があるな
ちなみに、どんなエラーを吐いたん?
そっか。app.config で <configuration> <startup> <supportedRuntime version="v4.0.30319" /> </startup> </configuration> とかってしないといかんのね。
>>347 後方重視があるからここまで繁栄してるんだと思うよw
切り捨てする会社なら他も選択肢になるからねえw
>>355 おぼえてないけど英語でたぶん.nef framework2.0が必要ですとかそんな感じのダイアログが出た
>356
それやれば動いたのか、どうせなら試せばよかったな、もう3.5sp1まで入れちゃった
面倒くさいんで複数並べてるよ。 <supportedRuntime version="v4.0.30319"> <supportedRuntime version="v2.0.50727" sku="client"/> <supportedRuntime version="v1.1.4322"/> <supportedRuntime version="v1.0.3705"/> ところで.NET4.0のコードプロファイルの場合 sku="client"の指定はいらなくなったんだっけ?
というか、プロジェクトのプロパティにターゲットバージョンの設定があるやろが
それは最低バージョンの指定だから違う
キャストのとき、あるクラスのプロパティの型を取得して、その型にキャストするにはどう書けばいいでしょうか? int a = 1; public string b{ get; set; } b = (string)a; // stringへのキャストの部分を、bの型を取得して指定したい
日本語でおk サンプルだとキャストじゃなくて型変換になってるようだが、 int型をstring型に変換する方法を聞いてるの?
>>362 プロパティの型(のTypeオブジェクト)の取得
PropertyInfo.PropertyType
Typeオブジェクトの型へのキャスト
Convert.ChangeType
でも、君は単に何か勘違いしてるだけだと思うなw
コンパイル時に「あるクラスのプロパティの型」は確定してるんじゃないの?
だったら素直にその型へキャストするコード書くだけだと思うけど
>>363 型変換とキャストて同じ意味だと思ってました
intをstring〜というのではありません。うまく伝えられなくて申し訳ないです
>>364 >コンパイル時に「あるクラスのプロパティの型」は確定してるんじゃないの?
>だったら素直にその型へキャストするコード書くだけだと思うけど
確かに確定しているのですが、ループで回したいので・・
正直、どう説明したらいいか自分でも分かってないので書いたものを上げました。
http://ideone.com/L97Ih 後出しになってしまいすいません。
詰まってるのは38行目です。
PropertyInfo.SetValueの第二引数はどうせobjectじゃん
>>366 わざわざキャストしなくてOKてことでいいのでしょうか..
キャストせずそのままで書いてみましたが、foreachが回らないんです。
コメントアウトすると回るんですが。
だから、Convert.ChangeTypeじゃダメなの?
> System.Reflection.PropertyInfo[] pInfoLists = properties.GetProperties > (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); 非staticなプロパティ一覧を取得してるのに、 > p.SetValue(null, ()(getRegistryValue(settingRootKey, settingSubKey, p.Name), null); 設定する段になってプロパティ設定する先のインスタンスがnullってどういうことさ。
>>368-369 Convert.ChangeType(getRegistryValue(settingRootKey, settingSubKey, p.Name), p.GetType()) で試してみました
なぜか1回でループを抜けてしまう
p.SetValue(null, Convert.ChangeType(getRegistryValue(settingRootKey, settingSubKey, p.Name), p.GetType()), null);
p.SetValue(TestClass.testClass, getRegistryValue(settingRootKey, settingSubKey, p.Name), null);
p.SetValue(testClass, Convert.ChangeType(getRegistryValue(settingRootKey, settingSubKey, p.Name), p.GetType()), null);
ダメ元でやって無限ループ
p.SetValue(TestClass.Settings, Convert.ChangeType(getRegistryValue(settingRootKey, settingSubKey, p.Name), p.GetType()), null);
p.SetValue(TestClass.Settings, getRegistryValue(settingRootKey, settingSubKey, p.Name), null);
p.GetType() == typeof(PropertyInfo) 何がしたいんだ?ちゃんと、MSDN読めよ
馬鹿にリフレクションを与えるな
引数を書き換えるメソッドって作らないほうがいいんだっけ void 書き換え(MyClass MC){ MC.val=20; } みたいな
それって引数を置き換えてるの?
おそらく、ガイドラインにあるref/out使うなという話しのことじゃないのか
>>373 そういうことやると混乱を招くには招くけど、OOP ってオブジェクトの状態が書き換わっちゃうもんだからねぇ。
MC の中身を書き換えられたくないんなら、MyClass を immutable に作っておくべき
プロパティを全部 get だけにして、コンストラクターでしかメンバーの初期化しないようにしとく)。
MyClass が単純なデータを表すものなんだったら immutable に作っておくこと推奨。
本質的に中身がコロコロ変化するようなものなんだったら、メソッドの中で書き換わることはしょうがない。
オブジェクトの書き換えはそんなに前じゃないここか初心者で すでに質問もでてて理想のコードがでてたような気がする ただし、数値型を方みてごにょごにょするコードだったけど
ごにょごにょとか気持ち悪い言葉遣いだなw ご〜にょご〜にょごにょヲタクの子〜
int.MaxValueがint型ってどういうこと
intの最大値がintより大きかったらまずいだろ。
>>379 上界(inferimum)ならともかく、最大値が int で何かまずい?
上界(upper bound) 下界(lower bound) 上限(supremun) 下限(infimun)
>>382 いや、ポイントはそこじゃなくて・・・
といいたいけど、要所で単語間違えた自分も悪いな。
MemoryMappedFileてどんなケースで有効な使い方ができるの?
マルチスレッドとか
>MemoryMappedFile こんな機能が.net4.0から標準で入るんだね これって読み込みキャッシュとしては当たり前すぎる機能だけど 書き込みとか変更かけてもOSなりクラスなりがやってくれるので あればかなり便利だよね
便利そうだな。 自前で作ったやつを置き換えようかどうしようか・・・
APIのMemoryMappedFileとの整合性はあるんだろうか
>>385 あるファイルのReadとかを
物理ファイルから各スレッドが読み出しを行うのではなく
メモリマップドファイルから各スレッドが読みだすってこと?
マルチスレッドでどう使うのかはわからんが、プロセス間通信って言えば分かるかな
>>389 そうみたいだね
まあ直接読みにいくよりはアクセスロスを減らせるんじゃないかな?
>>390 内部的な動きってどうなってるんだろう
ページに対する変更があった場合はストレージへのフラッシュを
行うスレッドとかがいるんだろうか?
フラッシュをメインスレッドでやってると意味ないだろうし
>>388 メンバにSafeHandleがあるから単なるラッパーだろう
>>392 メモリマップドファイルって、大抵はファイル使わないでメモリ空間で使うっぽい
ファイル使う場合はどうなんだろうな
ファイルへはファイルマッピングオブジェクトを明示的にフラッシュしない限り遅延書き込みされる アクセスはビューを介して行われるので、変更のあったビューだけ記録しておけば現在値を返せるようになっている
396 :
デフォルトの名無しさん :2010/05/10(月) 13:39:47
>>395 じゃああれか
専ブラのようにちまちましたデータを扱うけど最終的にアプリ終了時に
全部書き込まれてればいいような場合だとメモリマップドは有効かな?
いやいやいや、、、 メモリマップドファイルってのはメモリ上にエリアを確保して、そのエリアに自分で名前を付ける。 その名前がわかってればどのアプリからでも自由に読み書きできる、って仕組みだから、 物理ドライブに対するディスクキャッシュとはちょっと違うぞ。 ファイルが1つしかないRAMディスクって考えた方がイメージとしては近い。
いやいやいや、、、 それは直接ファイルを指定しないからそういうふうに動くように見えるだけだ。 そもそも厳密には、メモリ上に確保するというよりページングファイル上に確保する。
399 :
デフォルトの名無しさん :2010/05/10(月) 14:21:01
>>397 アクセス用の名称さえちゃんとわけておけば複数使えるんじゃないの?
使い方次第では自前でbyte配列に入れてどうこうするより便利そうじゃん
下手な比喩ごっこほど有害なものはない
いやいやいやいやいやいやいやいやいや、、、、、、、、、 えっ
402 :
デフォルトの名無しさん :2010/05/10(月) 14:47:36
ところでさ MS製品はなんでインストール先ドライブをC以外にさせてくれないんだ? ユーザーの自己責任でDとかにさせてよ
カスタムインストール選べばたいてい選べるだろ
自己責任でいいならファイル移動させて パスつなぎ直せばいいんじゃない?
405 :
デフォルトの名無しさん :2010/05/10(月) 14:51:36
>>403 選べるのもあるけど.netの基礎部分とかはCじゃないと入らないとか
いろいろあるのよ
System32にゴニョゴニョしてるんだから無理というもの
読み間違えてるひと多いみたいだから指摘しておく x メモリマップドファイル o メモリマップトファイル
>>402 そもそもいつまでもOSがドライブレター依存なのをなんとかして欲しいんだがw
>>408 最近のWindowsはダイナミックボリュームにすれば
ハードディスクのパーティションからドライブ名ではなく
ディレクトリ名にマウント出来るようになってる
>>402 どうしてもCの容量が足りなくなって困るときは
C:\Program Files\Hoge 以下全部を
別のパーティションに割り当てていけばいい
410 :
デフォルトの名無しさん :2010/05/10(月) 16:32:05
あれ XP Homeってダイナミックボリュームできないとか調べるとでてくるんだが 管理機能使うとマウントできるなw これは違うんだっけ?
いまどきHDD不足で悩むようなしょぼPCで開発すんなよ
こんにちは。 VisualC#2008で開発しています。 pictureboxに表示している画像をダブルクリックで180度回転して、おなじpictureboxに表示するにはどうしたらよいでしょう? private void pictureBox_MouseDoubleClick(object sender, MouseEventArgs e){ PictureBox pictureBoxnew = sender as PictureBox; Graphics g = pictureBoxnew.CreateGraphics(); g.RotateTransform(180F); g.DrawImage(pictureBoxnew.Image, new Rectangle(0, 0, pictureBoxnew.Image.Width, pictureBoxnew.Image.Height)); g.Dispose(); } とか、 private void pictureBox_MouseDoubleClick(object sender, MouseEventArgs e){ PictureBox pictureBoxnew = sender as PictureBox; Bitmap rotatebmp = new Bitmap(pictureBoxnew.Image); rotatebmp.RotateFlip(RotateFlipType.Rotate180FlipNone); pictureBoxnew.Image = rotatebmp; rotatebmp.Dispose(); } と試しているのですが、なかなかおなじpictureBoxに表示できません。 よろしくご教示お願いします。
VisualC#2010の導入方法について教えてください。 現在、.NET1.1、2.0、3.0、3.5とそれぞれのサービスパック、VisualC#2008が入っています。 このうち、削除する必要があるものはありますか? or 削除したほうがいいものはありますか? or 削除してもよいものはありますか? ご意見お聞かせください。
HTMLを動的に生成するのに良い方法はありますか? メインPCで簡易ローカルサーバ?(2010のヘルプとかkkcaldのような)を立て 自宅LAN内のクライアントからちょっとした確認と操作をできるようなツールを作ろうと思っています。 HttpListenerを使えば比較的簡単に作れるのを確認したのですが HTMLを動的に生成するのが結構面倒くさそうです。 今はStringBuilderを使い、生のHTMLを直接作っています。 IIS入れてWeb Developer+ASP.NETにするのが開発は一番楽そうですが そこまで大袈裟な運用をする予定はいまのところないので。
xml+xslt
>>413 別に消す必要はないし消した方がいいものもないと思う
.NET4はランタイムから変わってるから
.NET4でしか作らないのなら全部消しても良かったような
>>412 pictureBox.ImageをRotateしてpictureBox.Invalidateで再描画要求とか
>>413 別に削除しなくていいし数十Mぐらいけちけちするな
HDD容量に心底困ってるならVC#2008からだけど
それならマイドキュメントとかどうでもいいデータを適当に外部に移動した方がいい
>>413 なし、なし、あり
2008は消してもいいけど2010のVSが読めるとは限らない
読めると思うけど、バグがないとも言い切れない
.NET使うのは別にVSに限らないからこの話の流れで消すのは不適切だろう
>>414 簡易でも自分でHTTPd作る方がよほど大袈裟な気がせんでもない
このスレもRotateFlipしっちゃうぞ★
やってみろよこの野郎ッッッッッッッッッッッッッッッッッッッッ!!
妙なテンション
classの中に入ってるのがゴローバル変数 メソッドに入ってるのがローカル変数なの? class Sample{ int a; void func(){ int b; } } この例だとaがゴローバル変数、bがローカル変数 って感じ?
426 :
デフォルトの名無しさん :2010/05/10(月) 19:33:10
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ [ゴローバル変数] ( \ / _ノ | | .\ “ /__| | \ /___ /
ゴロ-バルでもプロパピーでも察してやれよ
428 :
デフォルトの名無しさん :2010/05/10(月) 19:36:26
プロパピーww ゴローバルじゃなくグローバルね
ゴローニャ
>>246 念のため言っとくけど解決方法が思い切り間違ってるぜ。
原因は .NET 4のClient Profile をターゲットにしてるからだ。
Client Profileを外せば問題なく参照設定できる。
もちろんClient Profileだけの環境では動作しなくなるけどな。
とはいえ、.NET 4はClient Profileでもフルでも対してサイズが変わらないので、
あえてClient Profileだけを入れるメリットはあまりないと思う。
>>410 ややこしいことしないでもジャンクションで十分じゃん。
>>414 System.Web.Hosting.ApplicationHost
>>415 なるほど。XslCompiledTransformってのがあるんですね。考えてみます。
質問です ドラッグアンドドロップの処理を行うアプリを作成しています。 やりたいのは画面のテキストボックスに表示しているファイルパスをドラッグして、 MicrosoftExcel等の既成品の画面にドロップするとそのファイルを表示できるというものを作りたいんですが ドラッグは出来てもドロップができません。(カーソルがドロップ不可の状態です) ドロップされる側のアプリを作って確認したところドロップは出来てもDragEnterイベントにはDataObject型で渡されていないようでした。 あと、同じアプリ同士でドロップした場合は何故かきちんと渡されていました。 ドロップする側はMouseMoveイベント内でボタンが押されたらDoDragDropメソッドを作って、 その中にはDataObjectにパスを設定したものを渡しています 長くてすいません何かわかる方がいるなら教えていただきたいです
> ドロップされる側のアプリを作って確認したところドロップは出来てもDragEnterイベントにはDataObject型で渡されていないようでした。 勘違いか変なことしてるかどっちかだ
つまりドロップが上手くいっていないってことなんでしょうか? ドロップする側はMouseMoveイベント内でDoDragDropメソッドにDataObjectとenumを渡すだけで良いのですか?
C#でも、細かくWindowsの制御したいなら結局Win32の勉強必須なんだね。 なら最初からC++やったほうがよさそう
受け取る側がどう解釈するかはまた別の問題だがね。 つかenumて。ちゃんと型名出してくれよ。 ま、なんにせよこれ以上は実際のソースがないとどうにもなんないな。 ソースがあってもどうにかなるとは限らないけど。おいらはOffice持ってないし。
>>433 Linq to Xmlで作るのも手。
StringBuilderでHTML作るよりは数億倍良い。
頭が凄く良いならC++からでも良い そうでなければC#からがオススメ
なんだその分類は
void textBox2_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { IDataObject iData = new DataObject(DataFormats.FileDrop, "C:\\Documents and Settings\\Book1.xls"); DragDropEffects abc = textBox2.DoDragDrop(iData, DragDropEffects.Copy); } } 一応簡単なソースなんですがドロップする側はこれだけで十分なんですかね?
FileDropはstring[]
唖然
くだらなすぎワロタ
あ、すいませんありがとうございました
448 :
デフォルトの名無しさん :2010/05/11(火) 07:34:11
クラスや構造体の配列を初期化する場合ってどうかけばいいんだろう
クラスは何も悩むことないだろ フィールドを直接初期化するなりコンストラクタでやればいい 構造体の配列の場合引数なしのコンストラクタでは初期化できない 適当に引数を与えてオーバーロードする
つ Struct1 struct1 = new Struct1 { v1 = 1, v2 = 2 }; 3.0以降かな 配列も型省略できるようになったんだ string[] strs = new[] { "あ", "い" };;
それの配列だからこうだ Struct1[] structs = new[] { new Struct1 { v1 = 1, v2 = 2 }, new Struct1 { v1 = 3, v2 = 4 } };
俺的には可読性悪すぎだろ と思う
453 :
デフォルトの名無しさん :2010/05/11(火) 10:16:24
クラスのときはオブジェクト初期化子使うけど
構造体に対してはコピーが発生するのがどうにも気持ち悪くて使ってない
>>451 の場合はstructsへの代入がアトミックだからコピーしなくていい気がするけど
実際どんなコードにコンパイルされるんだろ
多分C#の可読性ってVC#の機能含みで考えられてると思う
(キリッ
458 :
デフォルトの名無しさん :2010/05/11(火) 18:10:46
WindowsFormで、ウィンドウの枠を消しつつウィンドウのサイズをマウスで変えられるようにしたいです。
調べて見るとどうも一筋縄ではいかないようなのですが、
http://homepage3.nifty.com/midori_no_bike/CS/index.html?form.072 ここを見ると
// Note: 枠を消す別の方法として「 this.ControlBox = false ; this.Text = "" ; 」
// が存在する(マウスドラッグによる Form のリサイズも可能)。
また下の
// Note: Form の プロパティ FormBorderStyle が、Sizable または SizableToolWindow
// のものだけが、サイズ変更グリップの表示が可能。
// なお、FormBorderStyle が None でも、サイズ変更グリップを表示させた
// FormBorderStyle 状態から None へ変更した場合に限り、表示の継続が可能。
などを見る限り出来そうな感じがします。
しかし、書いてあるように設定してみましたがうまくいきませんでした。
枠線を消しつつウィンドウサイズを変更出来るようにすることは出来ますか?
「オブジェクト」と「変数」は違うんですか? Form frm = new Form(); があったとしたら frmがオブジェクトですか?それとも変数?
>>459 人それぞれかもしれないけど
frm自体はオブジェクト変数
new された段階でオブジェクト変数に実態が入る
とかじゃだめ?
>>458 WM_NCHITTEST 関連で何とかなるかも
462 :
デフォルトの名無しさん :2010/05/11(火) 19:16:15
初歩的なことで悪いんだが、C#でGUIつくろうと思ったらvisualC#でwindowsFormかWPF使って作ればいいんだよね?
うん
.NET FrameworkがいらないSilverlightというのもある もともとWebのクライアント用の技術だけど最新版はWebを介さずにインストールできたりファイルアクセスもできたり
それどこの Activex
ActiveXコントロールの上で動く.NETだよ Flashみたいなもん ローカルにインストールして権限昇格モードにしない限りは厳しいセキュリティ制限があるので安全
Flashに例えられると危なそうだけどな
たかがメディアプレイヤーごときになんであれだけ穴を作り込めるのか不思議だ
ネット上で直リン禁止な画像を作ったアプリにダウンロードさせたい場合どうしたらいいでしょうか? C#上のウェブブラウザでHTMLごと表示して、キャッシュからコピーか画像をクリップボードに貼り付けて保存を考えているのですが キャッシュの取得の仕方、画像のクリップボードへの貼り付け方がわかりません。
もうすこしHTTPとHTNLの仕組みを勉強した方がいいんじゃないの 直リン禁止はリファラ、クッキー、hidden属性を見るくらいのパターンしかない 全部WebBrowserなんか使わずに対応できる
C#でデータをPOSTしたいんですが DOBONさんの所を参考にしてもうまくいきません。 POSTするデータの指定が悪いんだと思うんですが HTMLがどんなデータをPOSTするか確認する方法はありませんか?
Wiresharkとか ソース晒した方が早いぞ
>>471 リファラを設定することで無事ダウンロードできました!!
ありがとうございました!
//POST送信する文字列を作成 string postData = "v[date][Y]=" + dateTimePicker1.Value.ToString("yyyy") + "&v[date][m]=" + dateTimePicker1.Value.ToString("MM") + "&v[date][d]=" + dateTimePicker1.Value.ToString("dd") + "&v[date][H]=" + comboBox1.Text + "&v[date][i1]=" + comboBox3.Text + "&v[date][i2]=" + comboBox4.Text + "&v[title]=" + System.Web.HttpUtility.UrlEncode(((Form1)this.Owner).textBox2.Text, enc) + "&v[body]=" + System.Web.HttpUtility.UrlEncode(((Form1)this.Owner).textBox1.Text, enc) + "&v[abody]=" + System.Web.HttpUtility.UrlEncode(((Form1)this.Owner).textBox3.Text, enc) + "&v[tpv_ps]=" + textBox2.Text + "&v[abv_ps]=" + textBox3.Text + "&ps=" + Pass + "&id=" + ID + "&cn=" + Nikki_ID; Peps!日記にPOSTするデータですが…。 Peps!日記のソースも見ないと分からないですかね?
application/x-www-form-urlencodedとかちゃんと指定してんの? まずエンコードしてPOSTしてるのか怪しそうだが
応答のステータスコードはなんと言ってるのか。
>>476 DOBONさんのC#でPOSTの一番上を参照しているので
そこら辺は大丈夫です。
>>477 認証とは…?
ログインしていないんじゃないの
hidden使う直リン禁止ってどういうの?
>>479 IDとパスワードをログインページのフォームが指定する通りにPOSTしてセッションクッキーを受け取ることですよ
と言われて理解できないなら諦めるべし
まだ早い
483 :
デフォルトの名無しさん :2010/05/11(火) 23:42:34
ブラウザで認証を含めた通信中のログをWiresharkでとって研究しろ それしか言えない あとログは絶対晒すなよw
Formを最大化して表示しているのですがWindowsキーやAlt+Tabで 他のプロセスに移動されたり出来ないようにするにはどうするのが良いですか? Win32APIでキーボードフックする以外に方法があったら教えてください
スクリーンセーバーにしてしまう
>>484 KeyDownで
e.SuppressKeyPress = true;
とかやればいいじゃないの?試してないから出来るかわからないけど。
そんなオレオレなアプリが2つ以上あったらどうなっちゃうことやら。 タスクバーがチカチカしまくり千代子ってか
AAAAAのような文字列があった時に、AAABAのように右から2番目のAだけを置換することって出来ますか? 開始から何文字目というような指定ではなく、どんな文字列でもとにかく右から2番目だけ置換というふうにしたいのですが・・
489 :
488 :2010/05/12(水) 01:02:00
すみません読み返してわかりにくかったので例を・・ 右から2番目のAをBに置換 ABCABC→BBCABC AAAAAB→AAABAB みたいな感じです
ToCharArrayして最後から走査して置換すれば
位置決めうちなら走査も必要ないな
位置は決め打ってないだろ
糞グラマーが書いた string 対象文字列 = "AAAAAAA"; // 調べる文字列 char cTok = 'A'; // 対象文字 char cRp = 'B'; // 置換文字 int iPos = 2; // 後ろから2文字目 if ( 対象文字列[対象文字列.Length - iPos].CompareTo(cTok) == 0 ) { 対象文字列[対象文字列.Length - 2] = cRp; } koredeii?
>>489 string 置き換え前 = "ABCABC";
string 置き換え後 = "";
if (置き換え前.Length >= 2)
{
StringBuilder sb = new StringBuilder(置き換え前);
置き換え後 = sb.Replace('A', 'B', 置き換え前.Length - 2, 1).ToString();
}
でもできそう。試してないけど・・・
正規表現とか string 置き換え前 = "ABCABC"; string 置き換え後 = new Regex(@"A(?=.*A)", RegexOptions.RightToLeft).Replace(置き換え前, "B", 1);
496 :
488 :2010/05/12(水) 01:57:56
レス下さった皆様ありがとうございます 無事望んだ通りの置換が出来ました
497 :
デフォルトの名無しさん :2010/05/12(水) 05:42:17
右から2番目とか言いながら提示したサンプルが左から2番目 寒気がする
>>488 ,489
もう解決したようなのでどうでもいい話だが、
var str = "AAAAAA"; として、
a.Substring(0, a.Length-2)+"B"+a[a.Length-1]
だな。これくらいは1行でできる。
ああ、aはstrで置き換えてね。手元では変数aでテストしていた。
>>493 ,494,499は質問者の意図と違うんじゃないの?
それだと、文字列の後ろから2番目の文字が置換されるだけだよ
意図分かって無い奴多すぎだろw
string str = "ABCABC"; bool looked = false; for(int i=str.length-1;i>=0;i--) { if( str[i] == 'A' ) { }
とちゅうでいったぁあああああ もういいやめんどい
つうかめんどくせぇから 長さのチェック 元のテキストから後ろ2文字までを切り出す 1文字置換するべき文字をつける 元のテキストから最後の1文字だけをくっつける だけでいいだろ SubStringとLengthだけあれば十分だ
馬鹿ばかり
>>501 だって質問者自身が>499のように、
右から2番目の文字を置換するだけでいいって言ってるんだもの。
>>489 の例見れば右から2番目の文字じゃないのは一目瞭然だろ・・・
放っておけ 今までに出した例で出来なかったらもう一回質問してくるでしょ
アホな答えばかりだったからあきらめてお礼言って他行ったと思われるw
var str = "AAAAAB"; var str2 = ""; var count = 0; for (var i = str.Length - 1; i >= 0; i--) { if (str[i] == 'A') { count++; } if (count == 2) { str2 = str.Remove(i, 1).Insert(i, "B"); break; } } 泥臭く書いてみた。もっと短かく書けたらよろしく
512 :
デフォルトの名無しさん :2010/05/12(水) 11:13:19
>>508 ではなんなのだ?
右から2番目と言って、全然違う例出されても困る
よーしパパもベタベタに書いちゃうぞ エラーチェックは無いけど string str = "AAAB"; int len = str.Length; string res = str.Substring(0, len - 2) + "B" + str.Substring(len - 1);
514 :
511 :2010/05/12(水) 11:17:43
よくみたら495でできてるし、これが一番いいな
>>512 文字列中のAの中で右から2番目に出現するAをBにする
だよ
迷走ぶりにワロタ
>>512 A @
ABCABC→BBCABC
↑
右から数えて2回目に出てくるA
日本語初心者スレだな。
>AAAAAB→AAABAB
この点だけ見ても
>>499 の回答は導かれませんな
酔ってんのかおめーは
498のレスに悪寒を覚えた
その辺にしておきなさい。
おい! ここは初心者が初心者にレスするスレだぞ気にしたら負けだ 俺? へっぽ子PGですよ
いくらなんでも低レベル過ぎるぞ 495先生以外のレスはなかったことにしとけ
あれ、C#のジェネレータって実行を途中で中断できないのかな。 コルーチン的に。
yield break; とかそういうことではない?
C#のyieldはまんまコルーチンだよ コンパイラが勝手にステートマシンを作ってくれる
コルーチンなんて単語初めて聞いた ぐぐってみたが便利そうな機能だなー こういうことも参考書とかに書いてくれればいいのにな
コルーチンの一種
名古屋名物だよな
530 :
488 :2010/05/12(水) 21:18:13
なんか荒れてるみたいですみません
文字列にある指定した文字の中で右から2番目にあるものという意味でした
うまく説明できずにすみません(↑もちゃんと説明出来てるか・・
>>495 氏のRegexを使って解決することが出来ました
たくさんのレスありがとうございました
コチーン
10回連続で言ってみ
チンコーチンコーチンコーチンコーチンコーチンコーチンコーチンコーチンコーチンコー
名古屋チンコー
「じゃあここは?」
こーひー
やったーまんこーひーらいたー
すかぽんちれさく
Formアプリで全ての全テキストボックスをロードした後特定のテキストボックスをアクティブにして入力待機状態にするにはどうすればいいですか?
テキストボックスをロードって何? 最初にフォーカスが当たってるコントロールを設定するのはActiveControlで
>>542 TextBox.Select() か Shown イベントで TextBox.Focus() とかいう話?
>>542 Form.Shownイベントでフォーカスを設定してやればいいんじゃね?
546 :
デフォルトの名無しさん :2010/05/13(木) 14:51:08
テキストボックスを4つ並べて4個目をアクティブにした場合 FormのLoadとShownのどちらも期待通りの動作 this.ActiveControl = textBox4; FormのShownの時期待通りの動作 textBox4.Focus();
>>544 うは……。1分負け。おみそれしました。
できましたありがとう!
てす
むり
「VS2010では」じゃなくて「VC#2010EEでは」じゃね? コンソールアプリケーションあたりで取り敢えずプロジェクト作って 既存のファイル消してユーザコントロール追加して プロジェクトの出力をクラスライブラリにすればいいんじゃないかな
ご教授をご教示って言い直せば願いを叶えてやる
なんでコンソールなんだよ EEにもクラスライブラリプロジェクトはある
あ、そうなんか
あ、そうなんよ
いまどきコンソールってw
俺はよく使うよ。
マジカ!! 結構使う人多いのかなぁ…・
.batなんかよりいろんな事出来るし GUIなんか必要ないプログラムはコンソールの方が便利だが
そもそも GUI ってちゃんと作ろうとすると面倒くさいしね。
563 :
デフォルトの名無しさん :2010/05/16(日) 19:46:30
簡単なのだとGUIの作成の方が本体より時間かかったりしてね 特にC#は…
VC#はGUIが簡単に作れるトップクラスの環境だろ
お仕着せのGUIならすぐ作れるけど、ちょっと凝ったことをやろうとするととたんにハマる
凝ったGUIってたいてい使いにくいよね
568 :
デフォルトの名無しさん :2010/05/17(月) 12:26:11
逆
必要な項目が判り易く並んでいればいいだけ その必要な項目がツリー的に広がるのであれば難しくなってきたりするよね・・・
WPFさんはレイアウト得意らしいけどその辺どうなの
571 :
デフォルトの名無しさん :2010/05/17(月) 14:47:50
>>570 htmlのCSSみたいな感じでGUIをいじれる
>>566 は従来までのC#なら正しい。まさにそれがC#の欠点の一つだった。
だが、今はWPFがあるので、凝ったGUIを自由に作ることができる。
逆に、WPFでも作れないようなGUIがあるなら教えて欲しいくらいだ。
なお、凝ったGUIはたいてい使いにくいという意見については、
使いやすさに重点を置かずに凝るから使いにくくなるというだけの問題だ。
逆に、凝ったほうが使いやすくなる例は、フォーカス位置の記憶、自動補完、
普通はツリー表示できないアイテムのツリー表示などたくさんある。
文字列を正規表現で検索して それを条件に合わせて置換というのをやりたいんですが 例:ABACDからB、C、Dを検索してE、F、Gに置換→AEAFG string str = "ABACD"; Regex reg = new Regex("B|C|D"); MatchCollection mc = reg.Matches(str); foreach(Match m in mc) str = reg.Replace(str, func(m.Value), 1, m.Index); string func(string s) { if (s == "B") s = "E"; if (s == "C") s = "F"; if (s == "D") s = "G"; return s; } これだと同じ検索をMatchesとReplaceで2回やってて無駄な感じがします・・・ 検索がヒットするたびにfuncを実行して置換するようなやり方はないでしょうか
その何倍もstring生成してるくせにそんなこと気にすんなよ
>>573 検索文字列がAB、AAで置き換え文字列がそれぞれCA、DBの時、
前から順に発見しだい置き換えると
ABACDの1文字目にABがあるのでCAACDに
CAACDの2文字目にAAがあるのでCDBCDに
ってなるけど良いのかしら
Match→Replaceの方では、この2回目の置き換えが発生しない
(ABACD→CAACDとなるだけ)
>>575 その程度は置き換えた部分スキップするようにすればええのじゃあないか?
結局のところ回答は「そんなもん無い」だから自分でロジック書かないといかんが。
もしくは気にしないか、だな。
100万回実行されるメソッドでもなければ気にしないの選択肢を薦めたい。
というか Regex.Replace に MatchEvaluator とる オーバーロードがあるだろ。それ使えよ
凝ったGUIで使いにくい代表例はVista、7、アプリではWMP。
iTunesもな
580 :
573 :2010/05/17(月) 21:15:26
すいません、MatchEvaluatorってのは知りませんでした・・・ これ使ったらReplace1回だけでいけますね str = reg.Replace(str, new MatchEvaluator(func)); string func(Match m) { string m.Value = s; …… return s; }
ここが逆だった ×string m.Value = s; ○string s = m.Value;
>>580 C#3.0以上ならラムダ式、2.0なら匿名メソッド使おう。
ラムダ式はならべく使わないほうがいい。
なんで?
>>583 お前のとこアレだろ、社内規約で条件演算子( ? : )禁止とかされてるクチの会社だろww
”ら”と”る”はなるべく間違わない方がいい
俺がわからないから使わないほうがいい
ラムダ式使う奴って馬鹿が多い。
必ずしも否定できない
使っていいだろ。 外部変数のキャプチャを理解してない馬鹿に使わせるべきではないとは思うが。
いまだにラムダ式を使えない馬鹿が多いのか。
いまだにラムダ式を使えない天才の方が多い。
そもそもラムダ計算の概念が生まれたのって何十年も前じゃないか。 関数型言語に触った事すらない天才ねぇ…?それって何の天才なの?
馬鹿は知らなくていいよ
名前が悪いかもねぇ。 ラムダ式とか言うからラムダ計算とか関数型言語とか過剰に連想して、アレルギー起こす人がいるような。 そんなたいそうなもんでもないのに。
お前ら匿名メソッド使わないのかよ
別にラムダ使わなくても十分普通に開発できるしな ヘタに使われると逆に読みにくいいんだよ
少なくとも匿名メソッド使う場面ではラムダ使っていいだろ
LINQ(ラムダ式利用前提)なしじゃもうプログラム書けない・・・
20年前のポインタに似てるな "ラムダの使い方"じゃなくてこういう場面ではラムダを使ってこんな風に書けるって説明が ……って普通に転がってるな やっぱ似てないわ
ラムダ式はなんとなく速記と同じ匂いを感じる 議会速記もはっきり言って無駄
ラムダ式でちゃちゃっと書いて、適当なタイミングでリファクタすればいいだけ アドインの機能を使えば、「匿名メソッドに名前を付ける」で終了
納品した後だったらたとえリファクタでもあんまりしたくねぇな・・・
どうでもいいよ
と、大学生が申しております。
いや、納品する前にリファクタしろよw てか、それは「適当なタイミング」を逃してるだけじゃん
ちゃっちゃと書くんなら最初からちゃんと書くわ デスマで時間が無い時以外ありえねぇ そしてそのコードはそのままそのソフト終焉の時か、大規模改修まで放置されるのさorz
expressionタイプのラムダはどんどん使っていいと思うよ。 statementタイプの場合はメンバ関数のdelegateにしたほうが見やすいケースが多い。
どうでもいいけど、ちゃっちゃとって何?方言?
手早く とかになるかな 何気なく使ってるけど方言なのかな? @関西住みより
611 :
デフォルトの名無しさん :2010/05/18(火) 17:33:10
簡単な文字列をユーザーにGUIから打ち込んでもらい、 その文字列、例えば(a+b)*c などを数式として、計算して、計算結果を表示する様なプログラムを作りたいのですが、 文字列から数式にスムーズに返還する便利な方法とかってありますでしょうか? それとも、そんなの無くて、文字列を解釈して、計算するプログラムを自分で作るしか 無いのでしょうか? だとしたら、かなり大変ですよね。特にかっこの辺り。 こんなプログラム俺に作れるか?とか思ったりしますが。 とにかく知ってる人教えてください。
例えばInt型なら int.TryParse とかでしらべてみては? 小数とかいるならdecimal.TryParse
613 :
デフォルトの名無しさん :2010/05/18(火) 17:38:21
>>612 それは数字だけの話だよね
数式全部を文字列で与えてそれを解析して計算する感じか
ポケコンなんかの関数電卓みたいな感じか
そういうことじゃないだろw 流れとしては、文の解析→ツリー構造化→計算 と言うかスレチ?
>>そういうことじゃないだろw は、612に対してね
すまん、勘違いしてた そりゃ自分で解析するしかないだろ・・・ 手軽にやりたいなら JScript.NETかなんかのEval使うって方法もあるんじゃね? 複雑な式でも解析できるかどうかは知らんが
617 :
613 :2010/05/18(火) 17:43:23
たぶん
>>611 がやりたいのはこういうのだと思う
618 :
613 :2010/05/18(火) 17:44:42
とりあえずスタックを上手く使う必要がありそうだとは思った
620 :
613 :2010/05/18(火) 17:55:57
>>611 ポーランド記法を逆ポーランド記法に変換してから、スタックで計算するのセオリーだったような気がする
中置記法を、だよね?
AST作って再帰的に評価するのが綺麗で簡単でしょ LINQのExpression Treeを吐くようにすればインタプリタ書かなくて済むし爆速
専門学校あたりでやってそうなアルゴリズム
abstract class ExpressionNode { public abstract int Eval(); } class AddExpression : ExpressionNode { public ExpressionNode Left; public ExpressionNode Right; public override int Eval() { return Left.Eval() + Right.Eval(); } } 構文木に変換できてしまえば評価自体はこんな感じでとっても簡単わかりやすい そのための解析は再帰下降パーサとか書くことになって結構難しい
>>620 1.一番最後の(を探して、その直後の)までの文字列を取り出す。
2.1の結果中の*/を検索して計算。*/が無くなるまで。
3.2の結果中の+-を検索して計算。+-が無くなるまで。
4.1の()内の文字列を3の結果の数字で置き換えて1に戻る。
斜め読みだがこんな処理か。
おっと思ったけど、やらせ方が分かればどおってことないな。
ふーん あっそ へー
MessageBoxで出力した文字列はマウスで選択できないしコピーもできないけど, これをできるようにするにはどうすればいいでしょうか。 めんどくさがらず新しくFormを作るしかないのかな・・
え?Ctrl+C押してみなよ
おおっ,文字列選択してなくてもCtrl+Cでコピーできるんですね。 ありがとうございます。 ただ自分も含めてこれでコピーできることを知ってる人は少ないと思うので, マウスで文字列選択→右クリックメニューでコピー という手順を踏めるようにしたいのですが, この場合はやはりForm使うしかないでしょうか。
教えてあげりゃいいじゃないの
Form使わないでメッセージボックスを選択して右クリックできるようにする方法もあるが 独自Form使うほうがはるかに簡単な。
どうもありがとうございます。 Formで対応します。
>>634-635 みたいな無駄なことしなくても、
>>633 がベストだと思うが?
メッセージの最後に「Ctrl-C でこのメッセージをコピーできます」とか書くだけだろ
そのメッセージまでコピーされて邪魔かもw
メッセージボックスがコピーできることを知らせるメッセージボックスを出せばいいだろ
バルーンを出すとかっこいいよ! 「このダイアログの内容はCtrl+Cでクリップボードにコピーできます」
でもたまにコピーできないメッセージボックスがあるんだよな。うっとおしい。 ああいうのはやっぱ自前でフォーム出してんのかね。 しょうがないのでコピット!のお世話になる。
ALT+スペースや メニューバーの上の青くなってるラインとかで右クリックしたときに出てくる 元のサイズに戻す 最小化 最大化 移動 閉じる みたいなポップアップウィンドウを改変したいんだけど ツールバーの何をやればいいの? MenuStripじゃできないよね?
自分で考えなさい
このスレいらねーじゃん
646 :
デフォルトの名無しさん :2010/05/19(水) 19:38:44
>>643 そういうのは普通には変えられないかもね・・・
Formのプロパティとか調べたけどそれっぽいのがなかった
>>643 GetSystemMenuとInsertMenuItem
648 :
デフォルトの名無しさん :2010/05/19(水) 19:53:27
Windows.Formも結局Win32APIで動いてたのか。
650 :
デフォルトの名無しさん :2010/05/19(水) 20:02:49
>>649 そうだよw
所詮はラッパー
めんどくさいことをしなくていいようにオブラートに包んでるだけだよ
ただいろいろ表に出してない部分があってそういうのだけ直接
APIたたいたりするしかないってだけ
つまり細かいことをしなきゃいけないときは [DLLimport]だっけ? みたいなことしなきゃいけないんだな。 結局C++も必要かぁ
652 :
デフォルトの名無しさん :2010/05/19(水) 20:10:27
>>651 まあAPI名とC#をセットにしてぐぐれば同じようなことやってる人がいるので
それほどでもないね
ただAPI関連で開発したことない人は関数名がわからなくて探すまでが
大変だったりするw
IME関連を隠してあるのを見ると殺意がわいてくるんだが
早めに通報した
君のPCの中に・・・
>>656 VisualStudio2008を入れてるなら
C:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\1041\CSharp Language Specification.doc
にある
>>658 ありがとうございました!
また質問しに来てあげますね
二度と来んな
EEだと入らないよね? β2入れてたときにチェックするんだった。 またPro入れるの面倒くさいな
662 :
デフォルトの名無しさん :2010/05/20(木) 15:01:11
c#ってintをとったら、実際には、2バイトだけでなくて、 その他色々と取られたりするのですか?昔、私が使ったデバッガでは、 2002年のだったかな? トゥストリングメソッドとか、色々とついて来て、 なんか、一つのintだけで4バイト位とってた気がしましたが。 実際にはどうなんでしょうか?
CPUのレジスタサイズに関係なく決まってるよ。 byte = 8 / short = 16 / int = 32 / long = 64
v-tableの話をしてるのならintなどのプリミティブ型は特別扱いで、 boxingした場合だけ4byte(32bit)以上の領域がキープされる。
結構シビアに管理する必要あるのかな?
そんな環境ならCとかC++使った方がええんでないの
667 :
デフォルトの名無しさん :2010/05/20(木) 16:03:44
いや、すんません、ただ、ちょっと気になったもんですから。 普通、intって言ったら16ビットですよね。 なのに、昔のデバッガで見たら、なんか、32ビット位で、そんなの必要ないよ ってのまでついて来て、 俺は、一応、dos時代からのプログラマーなので、 あの頃の感覚からすると信じられない取り方をしてるなと思ったもので、つい聞いておきたくなっただけです。 まあ、今はメモリ空間だけで昔のハードディスクよりも広大な空間があったりする時代なので、 こう言う取り方になるんでしょうね。 量の節約より、便利さを優先した方が色々と結果として効率が良いと言う時代なんでしょう。 ところで32ビットの内、記憶領域以外の16ビットは何のために使っているのですか?
つ663
過去の普通だな 現代の普通じゃない
Cでintはレジスタサイズなのが一般的で 16bit CPUなら short = int = 16bit, long = 32bit だけど 32bit CPUなら short = 16bit, int = long = 32bitになる。 C#ではCPUに関係なく決まっている。
671 :
デフォルトの名無しさん :2010/05/20(木) 16:21:16
ほへー、そうだったのですか。 わかりました。
浦島さんですか。
64bitCPUならintも64bitになる理屈か OSが32bitなら?
DOS時代からのヘボグラマか
CのintはCPUのレジスタサイズが建前だったが、 大抵の事は32bitで間に合い、 64bitにすると無駄にメモリとバス帯域を圧迫するので、 64bit CPUでのintの64bit化は、あまり行われていない。
へぇ
色の処理とかbyteで間に合っても型あわせるの面倒だからintで宣言しちゃうよ
RGB要素が1バイトだなんて決まってないから、 その方がいいんじゃね?
679 :
デフォルトの名無しさん :2010/05/20(木) 17:48:19
色に関してはケースによるとしかいえないだろ 色深度で1色の表現が違うんだし
ほぉ
レジスタサイズとかバス帯域ってのが何のことかよくわからんなw
CPUに対して型のサイズが決まってるとか妄言もいい所
ちがうんか まあCPUが違ったら数の範囲レベルで挙動が違うとか、正気の沙汰じゃないもんな
ああ、C/C++のはなしね C#は決まってる
CPUに合わせてサイズを決めるなんて常識。 それ無視したらJavaみたいに遅くなる。
インスタンスメソッドがインスタンスのメモリ領域取るって… よく今までそれで生きてこられたな
何を言ってんだお前は?
ストリームの一部分だけを切り出して別のストリームにしたいんだけど いったんbyte[]に読みだしてMemoryStreamにする以外にスマートなやり方があれば教えてください
>>689 ストリームをメンバに持たせたIStream継承の自作クラスを作成する。
IStreamが要求するメソッド/プロパティをそれぞれ定義してやる。
大抵はメンバのストリームのを加工するだけでいいはず。
オレはそうやって自作アーカイブの内容物のストリームを返すクラスを作成している。
問1 レス番号687の書き込みにはレスアンカーが抜けています。 正しいアンカーを書き入れなさい。
>>690 IStreamはCOMのインターフェイスだw
.NETではStream抽象クラスな
694 :
デフォルトの名無しさん :2010/05/21(金) 00:11:49
JavaとC#がわかる人がいれば教えてください。 Javaで下記のように書く事がありますが C#ではこのような書き方はできますか? また、この書き方ができないとしたら どうやって似たような事を実現しますか? HashSet<String, String> = new HashSet<String, String>();
HashSet<String, String> hs = new HashSet<String, String>();
Dictionary<string, string> Java のジェネリクスと違ってちゃんと型安全。
HashSetなら<String>だろ バージョン3.5以降なら.NETでもHashSet<T>は使える .NETのジェネリックに慣れるとJavaのジェネリクスに戻ると発狂する
696が正解 読むだけで理解しないバカは死ね
699 :
デフォルトの名無しさん :2010/05/21(金) 00:39:40
HashSetとDictionaryは別物
<String, String> ってなってたからハッシュテーブルのことかと思ったけど、 Java でもそれは HashTable だな。
結局どれが正解?
702 :
デフォルトの名無しさん :2010/05/21(金) 00:50:23
そもそもjavaとして間違ってるのでわからない
まあ、HashSet<T>もDictionary<T, T>もあるよって言っとけばそれでいいだろ。
704 :
デフォルトの名無しさん :2010/05/21(金) 01:01:10
javaのジェネリクスはできそうなことができなくて絶妙にイライラする 理屈ではわかってても直感に反する罠だらけ
706 :
デフォルトの名無しさん :2010/05/21(金) 02:22:21
セーブデータなどの事について知りたいのですが、 方法はいくつかあると思います。 例えば、ファイルにして保存するとか、レジストリに保存するとかですが、 エグゼファイルの中に保存するとかって言う方法は無いのでしょうか?
ゲーム作りたいのならHSPでもやっててくれ
なぜお前らはすぐそういう反応をする。 パパとママの愛情が足りなかったのか?
パパには沢山愛してもらいました
2008のプロジェクトを2010に変換したら 相互運用型XXXを埋め込むことができません。 代わりに適用可能なインターフェイスを使用してください。 とかエラー吐くんだけど何じゃこりゃ。 CS1752とかアメ公のMSDNにも載ってないんですけどぉぉぉぉ。
DataGridView で、データベースのテーブルを参照する部分を実装しているのですが、 DataGridView上でセルの値を変更した際「Enter」キーを押し、 カーソルが一つ下のレコードへ移動すると、DataRowのカラムの値を書き換えた事を示す RowStateプロパティにDataRowState.Modifiedがセットされます。 しかし、DataGridView1にユーザーが新しい行を追加できないようにする為に DataGridView1.AllowUserToAddRows = false; として、かつデータベースレコードが「1件」の場合、「Enter」キーを押しても フォーカスカーソルが下へ移動できない為、RowStateプロパティにDataRowState.Modifiedが セットされません。 プログラム上で DataGridView1 から Form上の別のコントロールへフォーカスを移すと、 RowStateプロパティにDataRowState.Modifiedがセットされましたが、 フォーカスを強制的に動かす意外に、DataRowState.Modified がセットされる 方法は無いのでしょうか?
ないよ
form1でプロパティを変更したときに、 form2で、そのタイミングでプロパティを取得して動作するようにするには、どんなイベントハンドラを準備すればよいですか? form1 private void ok_Click(object sender, EventArgs e){ Properties.Settings.Default.ID = this.ID.Text; Properties.Settings.Default.Save(); } form2 public form2(){ //ここにたぶんイベントハンドラ } private void ID_changed(){ //Propertyの変更になったときの処理 }
イベントが発生するのはForm1なんだからハンドラはForm1の方に作る
VisualC#2008から2010にバージョンアップしたところ、 'Microsoft.JScript.Vsa.VsaEngine' は古い形式です: '"Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the ICodeCompiler documentation for additional help."' という警告が出るようになったのですが、 これってどう対処したらよいのですか? additional helpってどこにあるんでしょう?
>>713 ApplicationSettingsならINotifyPropertyChangedで変更通知するから、
Settings.Default.PropertyChangedイベントに+=する
でe.PropertyNameで目的のプロパティかどうか判断
>>715 Please see the ICodeCompiler documentation
VsaEngineなんて.NET 2.0からすでにObsoleteだったはずだが、使ってたの?
>>710 COM使ってるなら参照などの設定をやり直してみたら
>>719 一回まっさらにしても変わらんね
COM型の埋め込みには条件があるみたいでそれに引っかかってるっぽい
素直に旧式の相互運用アセンブリ使うことにするよ
あるマスタデータをコレクションに保持しようとしています。 このコレクションは 以下のような構造のマスタデータをメモリに保持します。 Key1(0-99までと決まっている) Key2(0-99までと決まっている) Name 上記の一覧データを保持してKey1,Key2からName検索させたいのですが コレクションjはキーを1つしか持てません。 そこで Dictionary<String,String> _hogehoge = ... とし データを入れるときに string pk = Key1.ToString("00") + "_" + Key2.ToString("00") _hogehoge.Add(pk,Name); のようにしてデータを入れています。 もちろん検索するときも ContaintsKeyで string pk = Key1.ToString("00") + "_" + Key2.ToString("00") のようにしています。 このような構造のデータをDB等参照せずメモリに保持し、高速で検索させたいような場合 このような泥臭い方法はありなのでしょうか? ただし、DB接続・DataTableを保持 などは出来るだけしないようにしたいと思っています。 よろしくお願いいたします。
>>721 KeyedCollectionを継承したコレクション作るとか
class Hoge
{
public int Key1 { get; set; }
public int Key2 { get; set; }
public string Name { get; set; }
}
class HogeCollection : System.Collections.ObjectModel.KeyedCollection<string, Hoge>
{
protected override string GetKeyForItem(Hoge item)
{
return GetKey(item.Key1,item.Key2);
}
private static string GetKey(int key1, int key2)
{
return string.Concat(key1.ToString("00"), key2.ToString("00"));
}
public Hoge this[int key1, int key2]
{
get { return this[GetKey(key1, key2)]; }
}
}
たかだか最大一万件ぐらいならどうでもいいんじゃね
実際に試してみて遅かったら言ってくれると助かるなあ
>>721 string にしなくても Dictionary<ushort, string> で良いんじゃない?
var key = (ushort)(key1 << 8 | key2); _values.Add(key, name)
取り出すとき。
var key1 = (byte)(key >> 8); var key2 = (byte)key;
じゃあ俺はキーの方を作るか struct HogeKey { private ushort _key; public HogeKey(byte key1, byte key2) { _key = (ushort)(key1 << 8 | key2); } public byte Key1 { get { return (byte)(_key >> 8); } } public byte Key2 { get { return (byte)_key; }} public override bool Equals(object obj) { return (obj is HogeKey) && (_key == ((HogeKey)obj)._key); } public override int GetHashCode() { return _key; } } -- Dictionary<HogeKey, Hoge> dictionary;
struct ComplexKey<TKey1, TKey2> : IEquatable<ComplexKey<TKey1, TKey2>> とか作ったな。
System.TimerやSystem.Form.TimerってIntervalがdouble型になってるけど 1μsレベルの精度ってあるん?
>>725 ,726
細かいことだけど、整数型を意味もなくushortやbyteにして使うことはお勧めできないよ。
バイナリファイルみたいに固定バイト長でどうしても読み書きしないといけない場合は除いて。
そういうC言語的な発想は捨ててしまった方がいい。
>>728 あるわけないじゃないか
あとFormsのほうのTimerはInt32な
>>728 System.Form.Timerは50ms単位くらいの精度しかない。
これは.NETができる以前からのWindowsの仕様。
System.Timers系は十分に正確。
だが1μsレベルかどうかは話は別。一言で答えれば、無い。
そもそもそんな精度をリアルタイムOSでない通常のOSに求めることが間違い。
OnPaintイベントを処理中に例外が起きるとバツが表示されて、デバッカーで捕捉できない 非常に不便なのでどうにかしたいんだが、補足する方法はある?
catchすればいいじゃん
734 :
デフォルトの名無しさん :2010/05/22(土) 01:55:54
MessageBox を使って、止めたいところで止めて、表示させたい文字を表示させる事が出来る。
なぜか発生箇所で捕捉されない例外ってそういえばあるな。 あれ何だろう
この辺かな。 DebuggerNonUserCodeAttribute DebuggerHiddenAttribute DebuggerStepThroughAttribute Paintイベントはフレームワークがイベントを投げる前にtry-catchしてるはず。
C#をやってる大学ってないかな。 ある程度レベルの高い国立大学はどこの情報学科もCやC++必須なんだよなぁ。
>>737 というか、OS開発でもやるっていうんじゃあるまいし、
いまどきCやC++みたいな開発効率の悪い言語を教えててどうするんだろうか。
もっと良い言語がいくらでもあるんだから選んで使えばいいのにね。
教えてる方は割とお年を召してるのでそんな最新言語知らない
学生の間はCとJavaを勉強したらいいんじゃない Javaが出来ればC#に乗り換えるのもそんなに苦労しないでしょ
C#で覚えたら悲惨だろ そんな奴いらねぇよ
趣味や日曜プログラマならともかく 職業グラマになるんだったら学部レベルのCやC++くらい できないとバカにされるからな。 プログラムを組むときは「型」があるから注意してくださいー int と doubleは違いますよー 同じ処理が何度も出てくるときは関数として処理するといいですよー 演算子は優先順位があるから気をつけましょう みたいなCだろうがJavaだろうがC#だろうがやらなきゃいけないことしか勉強しないし。
うーん C++はともかくCである必要性はイマイチよくわからん
C#には歴史が無い。それが全て。 C/C++よりも、言語仕様、ライブラリ仕様などの些末なことに気を取られて、 肝心のプログラミングに割ける脳内メモリが削られるということも無いのは良い点。 なのに、なぜかC/C++の人の方がプログラミングに絡んだ難しい数学の話とかしてることが多い。 このレベルの違いは歴史だと思うよ。例えば、高度な3D処理などの数学が絡んだ ライブラリは、C#には用意されてないが歴史あるC/C++には充実している。 だから優秀な人はC#の素晴らしさを理解しつつも、C#よりC/C++を選んでしまうということがままある。
ベテランがいないわけだからな
>>737 宿題スレの質問者にどこの学校か聞いてみたら
日本で売ってるキーボードは 打ちやすさを最優先で作られてるとはいえないqwert配列が大多数 みたいなものだな 歴史あるものが優位になるのは仕方ない C/C++が優位
>>747 プログラミング言語と手で触れるデバイスを一緒にするなよ。
例えばメガネだって基本的な機能とデザインは何十年も替わってないだろ。
つ コンタクトレンズ
つ レーシック
WebBrowserでリンク先のURLを取得するとき Document.Links[0].GetAttribute("href") だと相対パス表記のリンクは相対パスの取得になりますが 絶対パスを取る方法はないでしょうか?
試してないけどこんな感じでできない? new Uri(webBrowser.Url, relativeUri).AbsoluteUri;
HTMLに<base href=があるとそれじゃだめだな
>>752 ありがとうございます、それで行けました
base href があるときは全部絶対パスになるみたいなので大丈夫そうです
IDEでデザインしたフォームの日本語文字列を 他言語の文字列に置き換える楽な方法はないでしょうかorz やっぱりIDE利用は諦めて、ユーザーに見せる文字列をコードで逐一リソース文字列から引っ張り出すしかない?
誤爆したorz
>>755 Formsのフォームで使用する文字列リテラルは、デザイナー上で逐一文字列リソースに切り替えられたはず。
>>758 質問前に調べろよ。
俺を誰だと思ってるんだw。
string[] st = {"みかん","りんご","うさぎ"}; のように、 List<string> lt に一括して代入する方法を教えてください。
C#3.0/.NET 3.5以降ならコレクション初期化子 それ以前ならコンストラクタの引数に配列渡すぐらい
>>762 ありがとうございました。
ところで、この
List<string> lt = new List<string>{"みかん","りんご","うさぎ"};
の内容を、ファイルに書き出して保存したいのですが、それにはどうしたらよいでしょう?
ファイルの出力くらいはできます。 一括して、 File.Save(filename, lt,); とかみたいにできないか、という質問です。
>>762 コレクション初期化子はC#3.0のみが必要で、.NET 3.5は関係ない。
その証拠に、Visual Studio 2008以降で.NET 2.0ターゲットでビルドできる。
住人を激怒されるような質問方法だな わざとかもしれんが
769 :
デフォルトの名無しさん :2010/05/22(土) 17:16:39
xml宣言の位置がおかしいぞw 最近はDataContractSerializer押しの声が大きいな
申し訳ありませんがご教授願いたいのですが ユーザコントロールを作り、ボタンを3つ作ります □ □ □ のような並びです ユーザコントロールをフォーム上に貼り付ける ユーザコントロールのサイズを変更する その時にボタンの大きさ、ボタンの位置をユーザコントロールのサイズに合わせて □□ □□ □□ □□ □□ □□ のようにボタンの位置と大きさが比例させたいです。 現在考えている処理としては、ユーザコントロールのResizeイベントで 計算すると言う方法を考えておりますが、 他にも何か良い方法がありましたらご教授お願い致します。
>>772 コントロールのサイズは計算するほかにうまい手は思いつかないが
位置についてはAnchorを外すという裏技(?)がある
特に縦位置も横位置もフォームサイズに比例させたいなら、Anchorプロパティーを空にする
>>772 えーっと、比例計算(小学校の算数だと思うけど)が分からないってこと?
まあ、MSによると非推奨の方法らしいけどテーブルレイアウトパネルを使えば
ユーザーコードなしでもできると思うけど....
775 :
デフォルトの名無しさん :2010/05/22(土) 18:49:58
解像度がまちまちなのがいけないんや〜。゜。゜(ノД`)゜。゜。 windows上で優れたUIがでないのはこの辺にあると思う
776 :
773 :2010/05/22(土) 18:53:20
>テーブルレイアウトパネル そうかその手があったorz これで大きさも位置も解決できる 非推奨なのはテーブルレイアウトパネルを入れ子にして使うこと、 ジャマイカ
778 :
772 :2010/05/22(土) 21:34:03
>>773 >>774 ありがとうございます
tableLayoutPanelを使って見た所
自分の設定方法が悪いのかもしれませんが
以下の状態からユーザコントロールを小さくした場合
□□ □□ □□
□□ □□ □□
以下の様に右端のボタンサイズが変化する現象が発生致しました
□ □ □□
□ □ □□
Anchorは全方向チェックしております
全方向空だと小さくした際にコントロールが
ユーザコントロールの外側に隠れてしまう為です
何か他に設定するべき項目がありましたらご指摘お願い致します
779 :
772 :2010/05/22(土) 21:35:14
連投申し訳ありません 訂正 ×以下の様に右端のボタンサイズが変化する現象が発生致しました ○以下の様に右端のボタンサイズが変化しない現象が発生致しました
「全方向空」ってどういう意味? っていうか、ボタンはコンテナ(つまりテーブルレイアウトパネルの各セル)に Dockさせるんだよ。アンカーを使うんじゃなくて。
781 :
772 :2010/05/22(土) 22:25:58
>>780 説明不足でした 申し訳ありません
各ボタンはtableLayoutPanelにDockをさせております(設定項目はFill)
tableLayoutPanelのAnchorは「Top, Bottom, Left, Right」に設定しております
>>777 仕様かどうか知らないが、tableLayoutPanelは最後の行と最後の列についてAuto sizeが効かない
だから、余分な行と列を追加して、そいつの大きさを固定値0にすると良い
VS2008でいま確かめたが、ボタンの配列が3x3なら、
1. セル配列4x4のtableLayoutPanelを用意し、Anchorを上下左右に設定(位置とサイズを確定させる)
2. 列の編集で最も右の列を「絶対サイズ 0ピクセル」に設定、それ以外は「パーセント 50.00%」とする(全て同じ値なら何でも良い)
3. 行の編集で最も下の列を「絶対サイズ 0ピクセル」に設定、それ以外は「パーセント 50.00%」とする(全て同じ値なら何でも良い)
4. 見かけ上3x3のtableLayoutPanelになるので、そこにボタンを配置
で逝けるハズ
なお4.まで済ませた後tableLayoutPanelのサイズを変更しようとすると再び2.と3.が必要のでちうい
783 :
782 :2010/05/22(土) 23:02:34
アンカーミスったorz
>>778 宛
あと、語弊がありそうなので補足しとくと、>782でtableLayoutPanelの位置とサイズと言っているのは
デザイナ上で与える位置とサイズの意
>782の1.〜4.を済ませた後、プログラムの実行状態でフォームサイズを変更する分には問題無くボタンサイズが比例する
784 :
デフォルトの名無しさん :2010/05/22(土) 23:06:25
そろそろサンプルコードでやり取りしようぜ
ListViewのDetail表示とかDataGridViewもダミーのカラム入れないと いろいろ不都合があったりするけど、MS様のコントロールってそういうの多いのかね。 っていうか、TableLayoutPanelってそんな仕様だったかな....
786 :
772 :2010/05/22(土) 23:21:02
>>783 動作確認の結果うまく行きました
詳細な説明ありがとうございました
>>784 自分の理解が遅くスレ消費してしまって申し訳ない
>>731 >System.Form.Timerは50ms単位くらいの精度しかない。
>これは.NETができる以前からのWindowsの仕様。
>
>System.Timers系は十分に正確。
っていうほどSystem.Form.Timerと変わるとは思えないんだけど。
実際にタイマーの精度が上がるのはVista以降 XPまではカーネルの構造上、どんなラッパーを用意したところで精度は期待できない
WebBrowserコントロールで表示したページのソース内を検索したくて、ソースをStringに変換したいのですが、 string souce = WebBrowser.Docment.All.ToString(); これで取り出せませんでした。どうすればいいんですか
>>789 デバッガで動きを止めて、アクセスできるプロパティを眺めて考えるんだ。
791 :
デフォルトの名無しさん :2010/05/23(日) 03:32:12
textbox とブラウザ貼り付けてブラウザのurlにこのスレを入れてみた <pre name="code" class="csharp">        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)         {             textBox1.Text = webBrowser1.DocumentText;         } </pre> これでいけるね でもこのスレを読み込ませて上のロジックを走らせると文字化けしたので 文字コード関連も調整する必要あるかな webBrowser1.DocumentStreamってのもあるからこれを使えばStreamで 読み出しできると思うのでエンコード指定すればいいか
792 :
デフォルトの名無しさん :2010/05/23(日) 03:32:52
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)         {             textBox1.Text = webBrowser1.DocumentText;         } ごめん ゴミが付いたw
できましたずっとDocmentの中で探してました ありがとうございます!
794 :
デフォルトの名無しさん :2010/05/23(日) 03:47:06
Twitterクライアントに興味があってOAuth認証にいきついてふと思った これってクライアント毎に固有のキーを発行して貰ってそれを使ってアクセスする形みたいだけど ひょっとしてこのキーをそのまま内部に持ったらまずいのかな? 自分は大々的に配布する予定はないから関係ないけど 誰にも偽装されたくなかったらそれなりの対策を考えるのかな?
>>795 それ、俺も悩んだけど隠すのは無理が結論だと思う。
リフレクタで見れば秘密キーすぐ分かるもんね……。
AWSのSecreatKeyでも似たような問題にあったなぁ その部分だけC++で書いて事無きを得たけどね
>>797 ちょっと気合いの入った人はディスアセンブルぐらいすぐやっちゃうと思うの
さすがにそんな人対策でやってんじゃないよw 規約で見えないように努力すれば配布してよし!ってことになってるから 一応対策はしてますよー的な意味合い 漏れたら漏れたで再取得すればいいだけだしキニシナイ
簡単な業務アプリでRSACryptoServiceProviderとか使ってPKI……って 作ったことあるけど完全なのは無理だったよね .netって生産性高いしC#って言語も素晴らしいと思うけど リバースエンジニアリング対策がむずすぎる
カジュアルハック対策に難読化しとけば十分だろ。 それで足りないような機密情報は絶対にクライアントに渡すな。
つかどの言語だろうとリバースエンジニアリングからは逃げられないし、 どうしても知られたくないなら外部に持つしかない。
803 :
799 :2010/05/24(月) 00:11:27
駄目になったら署名だけ外部鯖に移すし問題ないない
簡単な方法がある。 暗号を使うコードと暗号をセットするコードを分離しておいて、 DIで結びつければいい。
俺も昔は秘密鍵も暗号化させたりと頑張っていたが 結局リバースエンジニアリング対策はほぼ無理なんだよな。 MSも難読化ツールは出しているが、あれでも鍵を隠すことは難しいし。
まあリバースエンジニアリングは気にしたら負けだな。
>>805 Dependency Injection。依存性注入のこと。
暗号を使っている場所がわかっても
使用する暗号コードを定義してる部分や
取り出す部分がわからなければ問題ない。
これら2つの部分を静的、動的に結合するのがDIの概念。
>>808 面白そうだな
簡単ならサンプル書いてくれ URLでもいい
dllを参照に入れても.の後にいつものtostringしか出てこないんですがどうしてですか?
ちゃんとpublicにしてる?
>>808 しかし、その「2つを結合する部分」のコードだって見えるのだから、
所詮複雑度を一段増やしただけの意味しか持たないのでは?
>>812 確かに、このアイデアは本質的な改善策ではない。
だからこそ一般的に語られるソリューションではないわけで。
たぶん実務的にはそれぞれのコードをインターフェイス化しておいて、
それを繋ぐ形で実装することになるんじゃなかろうか。
(もちろんDIツール使ってもいいけど)
で、実用レベルとしては呼び出し部をIronPythonで書いてあげるだけで十分だったりする。
あれをリバースエンジニアリングするのはかなり無理(試してみた)。
>>804 ようは使用時に結合するわけだから結局は結合時のコードを横から保存して横取りするコードを書けばいいだけ
1900年代のパターン乙
DIか… 5年前のJavaやってた時に流行ってたなw 今じゃ考えが廃れて他の物に変わってしまったが
>>814 で、それを.NET Frameworkに対して可能なんかね、それ。
>>808 >暗号を使うコードと暗号をセットするコードを分離
ここが意味不明なんだよ
何を守りたいのかさえわからない
DIの概念ぐらい今時小学生でもわかるわ
結局のところ、実行時はバイナリコードになっちゃうんだから、メモリダンプを取って 逆アセンブルすることは技術的には可能。 あとはコストの問題よね。 というか、隠蔽に依存したセキュリティは無意味って、今時専門学校出の新人でも知っとるわ。
何万回もループするなかで string a = "b"; と宣言付きで書く場合はメモリがやばくならないですか? ガベージコレクションがよくわかってないので不安です
stringは変更不可なクラスなので単純な代入でコピーやインスタンスの生成は発生しない。
821 :
デフォルトの名無しさん :2010/05/24(月) 01:56:34
>>819 リテラルを格納してるだけなら最適化が効くかも。
一応、const 付けとけ。
最適か効いてなくて毎度 new されてる場合、
まあ、GC が働いてる分にはメモリ不足になることはない。
無駄な GC 働く分パフォーマンスは落ちるんで、ループの外に出せるならその方が無難だけど。
火病ってるやつがいるな。もっと建設的な議論すればいいのに。
>>819 メソッド内のローカル変数はスタックに積まれるので基本的には問題ない。
ただし文字列変数は各言語、.NETやJavaの場合は仮想マシンのレベルで
特別な扱いをされることが多いのでこの限りではない。
延々と文字列を結合していくならば結合結果の文字列データより多くのメモリを消費することはありうる。
それ以前にstringを生で使うと遅いのでStringBuilderを使うことになるだろうが。
824 :
デフォルトの名無しさん :2010/05/24(月) 02:02:11
>>823 >火病ってるやつがいるな。もっと建設的な議論すればいいのに。
だねえ〜
まあ便所の落書きなので荒れるのも仕方ないけど
つまりガベージコレクションは不要になった最速地点で解放されるのではなく 解放される前に積み重なっていくような数万回newした場合はメモリの危険があるかもしれないという考えは 捨ててもいいということですか? これを潔癖にクリアするにはusingで宣言を囲んでその外でループするかループ外に宣言するしかないんでしょうか?
826 :
デフォルトの名無しさん :2010/05/24(月) 02:17:08
>>825 PC上でやる上ではメモリの空きについては気にしなくていいよ
むしろ
>>823 >>824 あたりが言ってるように速度面かなあ
差し支えない範囲で気になる部分のコードをさらしてみなよ
>>1 のコード晒しサイト使って
>>825 C/C++で有効な高速化手法と.NET(C#)で有効な高速化手法はかなり違うので注意。
例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、
カウンタ(int i)の判定条件はローカル変数で受けるよりも
毎回arr.Lengthと直接比較した方が却って動作が早くなる、とか。
総じて素直に書いた方が却って早くなる。
基本的には素直に書いてみて、遅いようなら高速化手法を考える程度でいいはず。
> 基本的には素直に書いてみて、遅いようなら高速化手法を考える程度でいいはず。 これは言語に係わらない基本だろう
>>822 constが無理な場合があるとして、そのアプリでメモリ不足になることはなくても
他のアプリのメモリ不足を考慮してるとはおもえないんですが、
GCには完全に頼れないから外で宣言するとして
その分岐点は何ですか?GCに頼るのは動けばいいやプログラミングなんでしょうか?
おいおい、今時のPCで他のアプリのメモリ不足とかなんの話だよ
>>830 数ギガ単位のファイルを扱う用途だと問題になる
>>831 数ギガ単位のファイルをメモリに読み込むのか?それってGCあってもなくてもメモリ不足になるだろw
GCのコストはデストラクタの有無で極端に差が出る。 デストラクタやDisposeがないオブジェクトではほとんど気にしなくていい。 string a = "b"; では新しいオブジェクトは作られない。以下はその検証コード。 コメントの部分と入れ替えると毎回新しいstringを生成するコードになる。 string sv = ""; for (int i=0; i<10; i++) { string a = "b"; //string a = new string(new char [] {'b'}); Console.WriteLine(object.ReferenceEquals(a, sv) ? "O" : "X"); sv = a; }
>>833 char[]は外で一回だけ作るようにした方が検証として正しい気がする
ループの中でhoge[i]のプロパティなりメソッドなりに何回もアクセスする場合は 毎回インデックス位置を計算されたりインデクサにアクセスされるんじゃないかと思って そのまま書かずに、一旦 var item = hoge[i]; みたいに保存してから使ってるんだけどやらなくてもいいの? 最適化ONにしたら勝手にキャッシュしてくれる?
hoge[i]をキャッシュしても誤差程度の違いしかない。 最適化はプロファイル取ってからボトルネックになってる箇所を重点的にやれと
string a = "b"; の話、今コンパイル結果の IL 見てみたけども、 ldstr "b" って命令になってるな。 new されてない。JIT 結果もたぶん、定数領域のポインター代入だけになると思う。 GC 働かない。
>>837 そりゃあそうだ。stringはimmutableなオブジェクトだから
定数リテラルをそのまま指せるし。
あくまで文字列演算を大規模にループでおこなうという意味で書いてたんだが、
string a = "b";
を繰り返すことだけを質問してたの?
>>838 一番大元の質問が、ループ中の string a = "b"; はどういう結果招きますか
1. GC かかって大変になる?
2. GC かかった場合のパフォーマンスってどうなの?他のアプリに迷惑かけない?
だったかと。
これもテンプレ質問だよなー 完成して実用に耐えなかったら言えと 空が落ちてくる心配をした昔の人みたいだよ
XElementを初めて使ってみた なんだこれ なんでXmlDocumentなんて使ってたんだ
プロが初心者スレで質問してたら笑うだろ
いえてるw
身分がプロでも心が主人公ならば問題ありません(青春18きっぷ的に)
プロと初心者は相容れない概念じゃないな
じゃないな
じゃね
じゃ
>>GCに頼るのは動けばいいやプログラミング >>GCに頼るのは動けばいいやプログラミング >>GCに頼るのは動けばいいやプログラミング
箱の中で何やってんだかw C#では戦争も終わらないし食糧不足も解決できない そもそもプログラムで解決できること自体が箱の中の事象でしかない 趣味もプロも糞もない どこからが企業の戦略なのかを読み違えるのは良くない
動けばいいやの前に動くもの作ってみろよ 口だけが
たとえば、ソフトを作っても何も生み出さない。株の売買が仕事だと思ってるのと同次元。 生み出しているものは失業率の増加と貧富の格差でしかない 人間が時間と交換に取り組むようなことじゃない これを踏まえた上で初心者スレであえて聞いているのでは?
そのうち人間の労働時間は一日4時間程度になる
読み取り専用のプロパティが定義されてる基底クラスを継承したクラスに、 同じ名前のプロパティで書き込みを可能にすることって出来ないのかな
痛い子にいちいち構うなって
>>855 override new
すればいけるが、そんなインターフェイスはお勧めできないな。
>>858 やらないほうがいいから出来ないってことか。ありがとん
>>856 分からないなら黙ってればいいのに
>>856 彼によれば2chの初心者質問スレを荒らすのが、人間が時間と交換に取り組むようなことらしい。
ごめんなさい以下は無視してください
>>
>>856 >>分からないなら黙ってればいいのに
嵐だと無職は引きこもるしかないだろうからな
>>861 アンカー先もろくにみないで書いたんだろうが
そういう間抜けなとこを無視はできないな
( ゚д゚ )
VSC2008で開発しています。 webBrowserについて質問です。 Form1にwebBrowserを設置して使うと、普通はa hrefタグの場合はクリックでそのウィンドウ内でリンクを開きますが、new windowなどのタグにかかわらず、リンクをクリックしたら、別のForm2を開くようにしたいです。 どのようにしたらよいか皆目見当がつかないので、どなたかご教示いただけないでしょうか。
NewWindow2 またはNewWindow3
867 :
デフォルトの名無しさん :2010/05/24(月) 17:10:02
>>867 HtmlElement clickedElement = this.Document.GetElementFromPoint(e.MousePosition);
'Form1.Form1' に 'Document' の定義が含まれておらず、型 'Form1.Form1' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
と出るんですが、どうしたらいいですか?
869 :
デフォルトの名無しさん :2010/05/24(月) 17:37:26
そのサンプルコードはwebBrowserクラスを継承した別クラスにしてあるから・・・ というかその辺も説明しないと駄目なレベルなの?
thisをWebBrowserのインスタンスに変えて味噌
871 :
デフォルトの名無しさん :2010/05/24(月) 17:49:26
この調子だとイベントハンドラの設定も説明しないと動かないんでけど〜 とか言ってきそうだな
「皆目見当がつかない」というのはそういうことかとw
873 :
デフォルトの名無しさん :2010/05/24(月) 18:04:41
まあできないならできないで早めにギブアップした方がいいぞ
諦めたら試合終了だけどまずルールブックよめ
ですね
アマゾンの出品価格更新がつらいので自動で更新したいんですが、 テキストボックスに金額入れて更新ボタン押しても変更はありませんとでるんですが DomElement.InnerText と SetAttribute のどっちで入力しても変更できません どうなってるんですか?
877 :
デフォルトの名無しさん :2010/05/24(月) 18:30:54
起動してから一番最初の処理をしたいんだけど、 コンストラクタからだと、まだ、他のコントロールの作成が終わって居なくて、 処理できないって時は、どうしたら一番自然ですかね?
InitializeCompornetの後に書けばいいんじゃね?
879 :
デフォルトの名無しさん :2010/05/24(月) 18:38:25
その場所だと、 this.ActiveControl.TabIndex このプロパティにアクセスできないんですよね。 起動した直後に、アクティブコントロールは設定されてて、実際、文字入力できるように カーソルが出てくるのにな。 なんでだろ?
表示される前にアクティブもクソも いや何でもないです
フォームだったらShownでいいんじゃね
882 :
デフォルトの名無しさん :2010/05/24(月) 18:42:58
>>876 どうなってるといわれてもわからねえ
>>877 >>878 のいうようにコンストラクタの中で呼び出してる
InitializeComponent();
の後ならデザイナーで貼り付けたコントロールの実体はできてる
呼び出し前だとできてない
でもこのタイミングだとうまくいかない場合は
Loadイベントかその後のShownイベントとかでやるといいかも
おれもわからねえ
エスパーでお願いします!
HtmlElementで取り込んだ後、値を変更したら戻さないとだめじゃね?
887 :
デフォルトの名無しさん :2010/05/24(月) 19:00:21
>>870 できました。ありがとうございます。
で、次のようにして、ブラウザでリンクをクリックしてみましたが、
if (link != null && link != "")
{
MessageBox.Show("test");
System.Diagnostics.Process.Start(link);
}
普通にリンクをおなじウィンドウ内で開いてしまいます。
MessageBoxも表示されないということは、この
void WebBrowserExDocument_Click(object sender, HtmlElementEventArgs e)
のイベントハンドラをどこかで作る必要があるのかなと思うのです。
[デザイン]のwebBrowserでイベントハンドラを見ても、DocumentConpletedとかはあるのですが、それらしいものがありません。
どのようにしたらよいですか?
889 :
デフォルトの名無しさん :2010/05/24(月) 19:51:44
892 :
デフォルトの名無しさん :2010/05/24(月) 20:32:35
タイマー使って一定サイクルで監視して・・・とかになるんじゃないの? イベントがあったかはわからんw
クリップボードビューアチェイン
894 :
889 :2010/05/24(月) 21:06:50
思い出した DocumentCompletedだとメインのhtmlで1回、jsがあればその個数分イベントが起きるんだった Navigatedだと多分1回になると思う
>>890 確かイベントがあったはず
Clipboard C#でくぐれ
>例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、 でたらめもいいとこ。
>>889 、894
たいへんありがとうございます。
早速試してみています。
private void GmailChcker_Load(object sender, EventArgs e)
{
this.webBrowser.Navigate("
http://pc12.2ch.net/test/read.cgi/tech/1272309948/ ");
}
private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
webBrowser.Document.Click += new HtmlElementEventHandler(WebBrowserExDocument_Click);
}
でなんとかなってきたのですが、2chだとオーケーだけど、Gmailだとだめなんです。
なぜでしょう?
>例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、 必ずしも間違いじゃないよ forだと回し方によっては最適化が効かないけどforeachは確実に最適化される
900 :
889 :2010/05/24(月) 21:34:11
gmailはajaxだからなあ 2chの場合js使ってるといっても基本的にはhtmlよりのことしかしてないはず
int[] iForeach = new int[10000]; int ibuff = 0; foreach ( int i in iForeach ) { ibuff += i; } ibuff = 0; for( int i ; i < iForeach.Length; i++) { ibuff += i; } どっちが速いん
forとforeachは途中でエラーが出たときに安全かどうかも違うのかな
GMailのフル機能版じゃなくて、モバイル向けのやつでやってみれば?
904 :
889 :2010/05/24(月) 21:38:41
for( int i ; i < iForeach.Length; i++) { ibuff += iForeach[i]; } こうか。これだとForの方が遅い気はする
IL見りゃ一目瞭然。コード示せとか、なに馬鹿言ってんだか。
実際
>>901 のforeachと
>>905 のforはほぼ完全に同じコードになる
forはfor(int i = 0; i < iForeach.Length; i++)の形が崩れると途端に遅くなる
基本的に自由度が低い方が最適化しやすいんだよ
>>890-893 昔、ClipboardWatcherとか作ったなぁ
SetClipboardViewerとNativeWindow使うやつ
>>906 一目瞭然だから突っ込まれてんだろ
馬鹿か
こんな感じのコードで試してみた。 const int SIZE = 100; Random rnd = new Random(); Stopwatch sw1 = new Stopwatch(); Stopwatch sw2 = new Stopwatch(); int[] array1 = new int[SIZE]; for(int i = 0; i < array1.Length; ++i){ array1[i] = rnd.Next(100); } int[] array2 = new int[SIZE]; for(int i = 0; i < array2.Length; ++i){ array2[i] = rnd.Next(100); } int sum = 0; sw1.Start(); for(int i = 0; i < SIZE; ++i){ sum += array1[i]; } sw1.Stop(); TimeSpan ts1 = sw1.Elapsed; Console.WriteLine(ts1 + "(for)"); sum = 0; sw2.Start(); foreach(int i in array2){ sum += i; } sw2.Stop(); TimeSpan ts2 = sw2.Elapsed; Console.WriteLine(ts2 + "(foreach)");
結果 SIZE=100のとき 00:00:00.0000025(for) 00:00:00.0000006(foreach) SIZE=10000のとき 00:00:00.0000243(for) 00:00:00.0000173(foreach) 確かにforeachのほうが少し速いようだ
i < SIZEはダメ forは絶対にfor(int i = 0; i < array.Length; i++)の形を崩してはいけない
SIZEを外に出すと配列の範囲チェックで最適化効かなくなるからね。
効かなくなるね
なるね
なるね
array.Lengthにしても結果はほとんどかわらなかった。 SIZE=100のとき 00:00:00.0000023(for) 00:00:00.0000006(foreach)
forの方が早いって言ったら馬鹿にされたので逆恨みして荒らしてるのか
>>903 モバイル版って、BasicHTMLというものですか?
それでためしたところ、ソースでは、次のようになっていました。
<tr bgcolor="#E8EEF7">
<td>
<input type=checkbox name=t
value="123abcd45cd1234b">
<img src="/mail/images/star_on_2.gif"
width=15 height=15 border=0 alt=Starred>
</td>
<td>
name</td>
<td>
<a href="?v=c&th=123abcd45cd1234b">
<span class=ts><font size=1><font color=#006633>
</font></font>
タイトル
<font color=#7777CC> 本文</font></span>
</a></td>
<td nowrap>
May 19
これで、本文をクリックしても、clickedElement.TagNameには、fontという名前しか入らないのです。
最低だな
100は少なすぎる forがforeachを超えられないのは事実だけど きちんと書けば同じコードになるのも事実なので絶対にそんなに差は出ない
なんとなく俺もやってみた。 俺の環境だと何か 10000 以上の配列に対しては for の方が何故か早かった。 それ以下はforeach まあ、(1000, 10000)の範囲内で正確に測ってみないと具体的な長さはわからんが。
923 :
デフォルトの名無しさん :2010/05/24(月) 23:14:29
>>919 その辺になってくるとスレチだからJavascriptやhtml関連を勉強した方がいいよ
その辺を理解してないと無理
もうだめ(´・ω・`)
よしあきらめろ そして二度と来るな
C#の勉強を昨日始めた者です。 Javaとよく似てるので順調に参考書を半分ほど読み進めましたが、 下のサンプルの実行結果が納得できません。
927 :
926 :2010/05/25(火) 07:21:10
すみません、コードを書かずに送信してしまいました。 using System; namespace CS9_5 { class Program { static void Main(string[] args) { Recurrence x = new Recurrence { Depth = 8 }; x.Execute(); Console.ReadLine(); } } class Recurrence { public int Depth { get; set; } public void Execute() { Stack(0); } private void Stack(int value) { ++value; Show(value); if (value < Depth) Stack(value); Show(value); } private void Show(int value) { for(int i = 0; i < value; ++i) Console.Write("○"); Console.WriteLine(); } } }
928 :
926 :2010/05/25(火) 07:22:23
実行すると、 ○ ○○ ○○○ ○○○○ ○○○○○ ○○○○○○ ○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○ ○○○○○○ ○○○○○ ○○○○ ○○○ ○○ ○ と表示されます。 丸が増えていって8つに達するのは理解できますが、 その後なぜ減っていくのでしょうか?
Stack(0); の動作は valueを0で初期化 valueに1を足し、1にする ○をvalue個(1個)出力する Stack(1);を実行する ○をvalue個(1個)出力する だから これを続けていけばそうなる
>>929 ありがとうございます。
その動作の五行目は「○をvalue個(2個)出力する」ですよね?
わかった気がするので確認させていただきますが、
以下のような動作でしょうか。
valueの値が一つずつ増えていって8になると
if (value < Depth)のところで偽となって
次の行のShow(8)が実行される。
つまり、○が8つ表示されて改行。
その後なんですけど、
Stack(8)より先に実行していたStack(7)が
「if (value < Depth) Stack(value);」のところで止まったままになってて、
Stack(8)が終わったとたんに続きが動き出すってことでしょうか?
Stack(7)が終わるとStack(6)の続き、
Stack(6)が終わるとStack(5)の続き、というように・・・。
難しいですね。
931 :
デフォルトの名無しさん :2010/05/25(火) 07:58:13
>>927 そりゃStack(int value)が受け取ってるのは値渡しされたコピーだからでしょ
932 :
デフォルトの名無しさん :2010/05/25(火) 07:59:34
>>930 ブレークポイント設定して動かしてみ
よく分かるから
Javaはほとんど知らないんだけど、intも参照渡しされたりするのか?
>>899 状況によってというか処理によってはそうなりうることはわかってる。
でも
>例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、
「配列の列挙」にもいろいろあるかもしれんが、普通に読んだら普通の列挙処理だろ。
まあ試してみればわかるけど、誤差レベル。
圧倒的なんてことにはならない。
>>917 100回て、今どきのマシンなら数100ナノ秒以内で終わるぜ。
ちなみにStopwatchで時刻を取得するのにかかる時間は目安としてマイクロ秒オーダだw
あと極端に差があるなら測る順番を変えてみ、逆転したりするから。
936 :
926 :2010/05/25(火) 08:10:55
>>931 それは理解してましたが、
Stack(1)〜Stack(7)が終わらずに残っていることを
見落としてました。
>>932 理解すれば簡単なことだったんだなと思いますけど、
自分で
>>927 のような風に書けるようになる気がしません…。
>>933 ブレークポイント設定して確認してみました。
これわかりやすいですね。
今後困ったときはまた使ってみます。
>>934 いえ、Javaでもintは値渡しです。
937 :
デフォルトの名無しさん :2010/05/25(火) 08:12:28
>>930 >Stack(8)より先に実行していたStack(7)が
>「if (value < Depth) Stack(value);」のところで止まったままになってて、
>Stack(8)が終わったとたんに続きが動き出すってことでしょうか?
典型的な、オブジェクト指向のいろんな記述を変な風に理解してしまったクチだろう。
オブジェクトや、あるいはメソッドの呼び出しを、なんというか完全に独立した実行単位というか、実行主体というか、
そんな風に思ってしまってる感じ。
ただ一連の処理の流れ、内部的には単なるサブルーチン呼び出しという感覚が分かっていない。
ああ、つまり、止まってるとかじゃなくて、今まさにStack(8)を実行中なんだ。
>>937 クラスのメンバの部分のまとめのサンプルです。
突然再帰を使って例示されてます。
>>938 そうですね。
他のメソッドを呼び出してそっちが一通り動いた後で戻ってきただけですよね。
オブジェクト指向に初めて触れるわけでもないのに、こんなのがわかってなくて恥ずかしいです。
このサンプルでよく理解できたので、その意味ではよくできたサンプルかもしれませんね。
>>940 いや、どっちかっていうとオブジェクト指向から入った人間が勘違いしやすい。
手続型から入った人間はそういう勘違いはないんだよね。
とりあえず言語の勉強と並行してアルゴリズム・データ構造の勉強もした方がいいと思うよ
943 :
935 :2010/05/25(火) 08:22:45
ちなみに100万回ループで試してみた実行時間ミリ秒 for 1回目:02.247 foreach 1回目:02.148 for 2回目:02.203 foreach 2回目:02.099 for 3回目:02.179 foreach 3回目:02.147 for 4回目:02.117 foreach 4回目:02.137
944 :
デフォルトの名無しさん :2010/05/25(火) 08:22:57
ref つけるとintも参照渡しできたっけ?
945 :
926 :2010/05/25(火) 08:25:48
>>942 アドバイスありがとうございます。
悲しいことに、昔Cをやったときにアルゴリズムの勉強もしたことがあるんです。
身についてないってことですよね。
横に「Cによるはじめてのアルゴリズム入門」っていう本が転がってるので
読み直してみます。
Cやってたんかいw
947 :
デフォルトの名無しさん :2010/05/25(火) 08:29:54
ちなみにRecurrenceクラスをこんな風に変更すると class Recurrence { public int Depth { get; set; } public void Execute() { int value = 0; Stack(ref value); } private void Stack(ref int value) { ++value; Show(value); if (value < Depth) Stack(ref value); Show(value); } private void Show(int value) { for (int i = 0; i < value; ++i) Console.Write("○"); Console.WriteLine(); } } 続く
948 :
947 :2010/05/25(火) 08:31:07
○ ○○ ○○○ ○○○○ ○○○○○ ○○○○○○ ○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ ○○○○○○○○ こうなる
949 :
935 :2010/05/25(火) 08:44:25
ちなみに俺のマシンで Stopwatch watch; watch = Stopwatch.StartNew(); watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds.ToString("0,0.000000")); watch = Stopwatch.StartNew(); watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds.ToString("0,0.000000")); watch = Stopwatch.StartNew(); watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds.ToString("0,0.000000")); watch = Stopwatch.StartNew(); watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds.ToString("0,0.000000")); これを実行すると、 00.000600 00.000600 00.000600 00.000600 つまり計測に600ナノ秒ほどかかってる(一昔前のマシンでは数マイクロ秒くらいかかってた)。 100万回ループで約2ミリ秒だから、100回ループなら約200ナノ秒。
俺の00.001900 だった まぁどっちにしろそこまで敏感になる問題じゃないな
>>927 > for(int i = 0; i < value; ++i) Console.Write("○");
どこのサンプルか知らんけど、アホなことしてるな
.NETならstring(char, int)コンストラクタ使えと
昨日のコマ大の問題 各桁の数字が相異なり、どれも0でないような3桁の正の整数nがある。 nの各数字を並べて出来る6つの数の最大公約数をgとする。 gとして考えられる最大の値を求めよ。
18
("○") (^○^) (-○-)
C#初心者です。 マウスの右クリック(コンテキストメニュー)と右ドラッグ(ダウン-移動-アップ)で、 異なる処理を割り当てるにはどうしたらよいですか?
どのレベルで処理するのかわからんけど、 ダウン後移動があったらドラッグ扱いでいいんじゃないかな
C#つうかPG初心者と言ったところか・・・ 1.マウスダウンでフラグセット・マウス位置記憶 2.マウス移動で移動量を記憶 3.アップで A.移動量が既定の移動量に達していない場合はコンテキストメニューを表示 B.移動量が既定の移動量に達している場合、右ドラッグの処理 みたいなんじゃいかんのかな? コントロールの移動とかからむとめんどくさそうだけど
>>956 、957
右クリックすると、コンテキストメニューが開いちゃうのですが、それをどうキャンセルすればいいんでしょう?
まずは、
private void img_MouseRightButtonDown(object sender, MouseButtonEventArgs e){
MessageBox.Show("mousedown");
}
private void img_MouseRightButtonUp(object sender, MouseButtonEventArgs e){
MessageBox.Show("mouseup");
}
としてみたんですけど、MessageBoxが開かず、コンテキストメニューが開いてます。
コンテキストメニューを割り当てないようにしたらいいんじゃないかな・・・・
ContextMenuStripプロパティにセットするのをやめて イベント時にShowするとかかな
>>935 配列に対してfor文でカウンタを回しながら要素アクセスを行うと、
添字の範囲チェックが行われる。
これはtry〜catchの例外処理が挟まれることに相当するので、単独でこの部分だけを見ると差は大きい。
処理時間の差が大きくなるかどうかはループあたりの処理量とループ回数の比によって異なる。
ベンチマーク的な空ループに近い処理や、巨大なbyte[]に対する処理などではバカにならないぞ。
>>949 ,950
ちげーよ。Stopwatchは計測にパフォーマンスカウンタを使用する。
パフォーマンスカウンタは一般的に精度がシステムごとに固定値(例えば100万分の1秒)になっているか
CPUのクロック数に依存するかなので、
それ未満の経過時間の場合はそんなふうに固定時間ずれているように見える。
実際はそうじゃないかもしれないんだぞ。
.NETの場合はどういう実装になっているのかは誰か調べといてください。
>>958 ContextMenuプロパティを設定するのをやめて、MouseDown/MouseUpを独自に実装するのはどうだ?
>>960 bool mousemove = false;
private void img_MouseRightButtonDown(object sender, MouseButtonEventArgs e){
mousemove = true;
//マウス位置取得
MessageBox.Show("mousedown" + mousemove);
}
private void img_MouseRightButtonUp(object sender, MouseButtonEventArgs e){
//マウス位置取得
//マウス位置計算
if (移動量 > たとえば20ピクセル) MessageBox.Show("mouseup");
else ContextMenu.Show();
}
とかですか?
コンテキストメニューって、どこでプロパティにセットしているんでしょう?
>>963 マウスの位置はMouseButtonEventArgsに入ってるべ?
ContextMenuStripはそのコントロールのプロパティの動作あたりに無いか?
>>961 QueryPerformanceCounterの替りに実装できるて書いてるくらいだから
内部でそれつかってんじゃね?
>>964 bool mousemove = false;
int startX;
int startY;
private void img_MouseRightButtonDown(object sender, MouseButtonEventArgs e){
mousemove = true;
//マウス位置取得
startX = e.X;
startY = e.Y;
MessageBox.Show("mousedown" + mousemove);
}
private void img_MouseRightButtonUp(object sender, MouseButtonEventArgs e){
//マウス位置取得。マウス位置計算
//if (移動量 > たとえば20ピクセル)
if ((e.X - startX) * (e.Y - startY) > 20 || (e.X - startX) * (e.Y - startY) < -20 MessageBox.Show("mouseup");
else ContextMenu.Show();
}
こんな感じでしょうか。
967 :
947 :2010/05/25(火) 13:24:42
面倒なことやってるねw なんで左を使わないの?
好きにやってみて思った通り動かないところを聞いてくれ マウスアップがコントロールから外れると来なくなるから Captureプロパティも使った方がいいかも メニュー表示はこんな感じかな ContextMenu.Show(img.PointToScreen(e.Location));
>>964 ,968
コンテキストメニューのイベントハンドラが見つからないんですけど、
<Grid Name="img" MouseRightButtonDown="img_MouseRightButtonDown" MouseRightButtonUp="img_MouseRightButtonUp">
<Grid.ContextMenu>
<ContextMenu Name="contextMenu">
<MenuItem Header="コピー" Name="copy" Click="copy_Click" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>
の場合、どうキャンセルすればいいんでしょう?
単に<Grid.ContextMenu>から</Grid.ContextMenu>までをコメントアウトしちゃうと、.csのコンテキストメニュー関係が全滅しちゃうのですが…。
>>967 左は描画に使う予定です。
http://homepage3.nifty.com/midori_no_bike/CS/graphics.html を参考にしてます。
970 :
947 :2010/05/25(火) 13:32:27
>>969 なるほど〜なんだけどさw
WinFormじゃなくてWPFなの?
確かにMouseButtonEventArgsはWPF用のイベント引数だったなw <ContextMenu>は<Window.Resources>辺りで宣言 C#のコードからはthis.Resources[]で取得 とかする あとWPFでそのページはあんま役に立たんと思うぞ
>>971 ありがとうございます。
<Window.Resources>
<Window.ContextMenu>
<ContextMenu Name="contextMenu">
<MenuItem Header="コピー" Name="copy" Click="copy_Click" />
</ContextMenu>
</Window.ContextMenu>
</Window.Resources>
<Grid Name="img" MouseRightButtonDown="img_MouseRightButtonDown" MouseRightButtonUp="img_MouseRightButtonUp">
</Grid>
ってことですか?
これだと、「アタッチ可能なプロパティContextMenuが型Windowに見つかりませんでした」とエラーです。
WPFで、よい入門ページってご存じありませんか?
973 :
947 :2010/05/25(火) 14:24:24
>WPFで、よい入門ページってご存じありませんか? ない <Grid Name="img" とかやって名前付けておけば従来のwinformのように img. ってやれば候補がでてくるので自分でそれっぽいの探してがんばるしかない
>>973 Gridには名前つけましたが、Windowにも名前が必要ってことでしょうか?
975 :
947 :2010/05/25(火) 14:32:54
>>973 MSDNで調べてもいいけどざっくり見る場合の手段なだけだよw
XAMLの方でも候補は見えるけどやりにくいので
XAML側にはとりあえずNameつけておいてC#側で何が使えるか見るってだけ
んー、WPFの基礎もできてない… <Window.***> はWindowの***プロパティにセットする記述 C#のコードでWindow.*** = ...って書くのと同じ だから <Window.Resources> <Window.ContextMenu> はイミフ WindowのContextMenuにしたいわけじゃないんだからWindow.ContextMenuは関係ない
977 :
デフォルトの名無しさん :2010/05/25(火) 14:40:06
>>969 のイベントハンドラはXAMLに書かない方がいいんじゃね?
978 :
デフォルトの名無しさん :2010/05/25(火) 15:12:46
VC#2010で同じことやろうとしたらGridのContextMenuがでねえw
yieldを使用した反復子methodで、外部から入力を受け取ることは可能でしょうか? Pythonにおけるgenerator.send(value) のようなものが欲しいんですが。
>>979 IEnumerable<int> f(int i)
{
for (int j = 0; j < 10; j++)
{
yield return i * j;
}
}
こういう話?
>>976 基礎がないから初心者ってことで…。
<Window.Resources>
あたりで宣言ってのはどうやるんですか?
>>977 イベントハンドラを、C#側に書くにはどうしたら?
>>980 その例に合わせると、こんな感じでしょうか。
// 反復子メソッドの例
IEnumerable<int> f(int i)
{
bool continuation = true;
for (int j = 0; j < 10; j++)
{
continuation = yield return i * j;
if(!continuation)
break;
}
Console.WriteLine("iterater ended!");
}
// ユーザーコード
var g = f(5);
for (int m = 0; m < 3; m++)
{
k.MoveNext();
Console.WriteLine(k.Current);
}
k.send(false);
>>961 知らないなら適当なこと言うなよ。
言っとくが、
>>943 のループの中身は足し算一回だぜ(配列の値を取り出して別の変数に足す)。
中身を足し算すらなしの、別変数への格納だけにしても、
01.325 for
01.046 foreach
00.730 for
00.719 foreach
00.701 for
00.696 foreach
00.697 for
00.709 foreach
こんな感じだ。
どこにバカにならない差があるって?
範囲チェックも、JITコンパイル時点で、オーバーすることはないことが確認できた場合は省かれるんだよ。
最初から、そうなるから差なんてないって話なのに今更何言ってるの?
だから最初から状況によってって書いてあるじゃねえか
あとパフォーマンスカウンタの話だが、まあ
>>949 のコード自体はよくなかった、
あの結果だけじゃ確かに何の説明にもならないからな。
※こっちはかかる時間を知ってるから、あれでも確認できるって分かってるだけだから。
で、これなら納得いくかい?
※Stopwatch.GetTimestampの中身はほぼ単なるQueryPerformanceCounterの呼び出しな
long[] t = new long[10];
for (int i = 0; i < t.Length; i++)
{
t[i] = Stopwatch.GetTimestamp();
}
for (int i = 1; i < t.Length; i++)
{
Console.WriteLine(((t[i] - t[i - 1]) * 1000.0 / Stopwatch.Frequency).ToString("0,0.000000000"));
}
結果、
00.000628572
00.000628572
00.000558730
00.000628572
00.000628572
00.000628572
00.000628572
00.000628572
結局QueryPerformanceCounterで600ナノ秒程度かかってるっていう結果には変わりないってこと。
そしてそんなので200ナノ秒程度しかかからない処理の時間を計測すること自体があほだってこと。
>>984 誰に言ってるのかわからないけど、
>>961 はこう言ってる。
>>935 配列に対してfor文でカウンタを回しながら要素アクセスを行うと、
添字の範囲チェックが行われる。
これはtry〜catchの例外処理が挟まれることに相当するので、単独でこの部分だけを見ると差は大きい。
処理時間の差が大きくなるかどうかはループあたりの処理量とループ回数の比によって異なる。
ベンチマーク的な空ループに近い処理や、巨大なbyte[]に対する処理などではバカにならないぞ。
>>982 〜〜の◯◯みたいな、だけじゃなくて具体的にどういう動作させたいのか書いてくれよ
その例もよく分からんが、fの第二引数にFunc<int, bool>でも持たせるとかするのはどう?
f()の中でi*jを計算してFunc<int,bool>を呼び出しyield breakする
>>987 いただいた例が私のやりたかった処理にあまり似ていなかったためか、
うまく伝わらなかったようです。ごめんなさい。
こんな感じです。
// 反復子メソッドの例
void somework(...)
{
bool continuation = true;
for (int j = 0; j < **; j++)
{
// ターン処理
// ...
continuation = yield return ***;
if(!continuation)
break;
}
// 終了処理
// ...
return
}
// ユーザーコード
var g = somework();
var k = g.GetEnumerator();
while(k.MoveNext())
{
if(中断するかどうか)
k.send(false);
}
>>985 でもやっぱり納得いかないなら、こうだ。
watch = Stopwatch.StartNew();
long tmp;
for (int i = 0; i < 10000; i++)
{
tmp = Stopwatch.GetTimestamp();
}
watch.Stop();
Console.WriteLine(watch.Elapsed.TotalMilliseconds.ToString("0,0.000000"));
で、結果がこんな感じ。
06.734900
少なくとも平均的には、間違いなく1回の呼び出しで600〜700ナノ秒かかってる。
>>988 で、987はどうよ
IEnumerable<int> f(int i, Func<int, bool> pred) {
for (int k = 0; k < 10; ++k) {
int x = i * k;
if (pred(x))
yield break;
yield return x;
}
}
foreach (var x in f(10, n => n > 30)) {
Debug.WriteLine(x.ToString());
}
>>991 すばらしい!
まさにこういう事がしたかったんです。
ありがとうございます。
993 :
デフォルトの名無しさん :2010/05/25(火) 18:09:15
>>981 xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml "
Title="MainWindow" Height="350" Width="525"
Loaded="Window_Loaded">
<Grid Name="img">
</Grid>
</Window>
こんな感じでwindowにLoadedイベントを追加して
cs
private void Window_Loaded(object sender, RoutedEventArgs e)
{
img.MouseRightButtonDown += new MouseButtonEventHandler(img_MouseRightButtonDown);
}
void img_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
throw new NotImplementedException();
}
こんな感じでイベントハンドラ追加
この方法だとwinformでやってたやり方に近くなる
完成イメージがつかめたらWPFらしい記述に直すとか
994 :
デフォルトの名無しさん :2010/05/25(火) 18:15:39
xaml側でとりあえず名前付けてC#側でなんとかしなよ って書いたのは理解してなかったのね・・・
初心者スレでこんな議論が起きようとはw
996 :
デフォルトの名無しさん :2010/05/25(火) 18:36:45
>>995 よくあるよw
最近は行ってないけどC/C++関連でもよくあった
997 :
デフォルトの名無しさん :2010/05/25(火) 18:39:00
次たててくるわ
998 :
デフォルトの名無しさん :2010/05/25(火) 18:42:59
1000 :
デフォルトの名無しさん :2010/05/25(火) 18:54:29
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。