トップページ⇒tech
1001コメント286KB

ふらっとC#,C♯,C#(初心者用) Part59

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2010/04/27(火) 04:25:48
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part58
http://pc12.2ch.net/test/read.cgi/tech/1270657735/


■関連スレ
C#, C♯, C#相談室 Part58
http://pc12.2ch.net/test/read.cgi/tech/1269261310/
VB.NET質問スレ(Part34)
http://pc12.2ch.net/test/read.cgi/tech/1270998481/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/


■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも

http://ideone.com/

コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。
0002デフォルトの名無しさん2010/04/27(火) 07:26:04
Visual C# 2010
0003デフォルトの名無しさん2010/04/27(火) 08:12:56
ソース公開してても、Expressで読めないのが多いね
ライセンスがどうとかで読めるようにできないの?
0004デフォルトの名無しさん2010/04/27(火) 09:31:05
日本語でおk
0005デフォルトの名無しさん2010/04/27(火) 09:46:22
Point p1=new Point(100,100);
と
Point p2=new Point(100,100);
Point p1=p2

どう違うの?
0006デフォルトの名無しさん2010/04/27(火) 10:26:37
p1とp2が同じインスタンスを指してる。
つまり、p2からの変更がそのままp1にも影響する。逆もしかり
0007デフォルトの名無しさん2010/04/27(火) 10:38:53
いや.NETのPointは値型だからp1とp2は別。
もしPointが自分で作ったclassなら仰るとおり。
0008デフォルトの名無しさん2010/04/27(火) 10:43:46
値型かあ…
0009デフォルトの名無しさん2010/04/27(火) 10:48:35
ざまぁww
0010デフォルトの名無しさん2010/04/27(火) 11:04:39
vs2010expressまだー?
0011デフォルトの名無しさん2010/04/27(火) 12:34:25
ワロタw

が、自分で回答したら同じことを行ったかもしれん
0012デフォルトの名無しさん2010/04/27(火) 12:35:32
4/28: Visual Studio 2010 Express (日本語版) 提供開始

あれ?4/27だったような・・・
0013デフォルトの名無しさん2010/04/27(火) 12:52:41
>>12
それどこ情報?
http://www.microsoft.com/japan/msdn/vstudio/express/
では27日だぞ
0014デフォルトの名無しさん2010/04/27(火) 12:58:49
http://www.microsoft.com/japan/msdn/vstudio/
0015デフォルトの名無しさん2010/04/27(火) 13:01:27
うっそ〜ん
今日はこれがなにより楽しみだったのに…
0016デフォルトの名無しさん2010/04/27(火) 13:15:29
C#は格好いいよね。
0017デフォルトの名無しさん2010/04/27(火) 13:21:42
GWまでに間に合えばいいや
0018デフォルトの名無しさん2010/04/27(火) 13:58:36
なん…だってェ…

wktkしてたのに…
0019デフォルトの名無しさん2010/04/27(火) 15:06:36
FixedToolWindowにしているんだけど
alt,spaceキーをおしたときにMenu画面(拡大縮小などができる)が表示されます
このメニューを表示しないようにできませんか?
0020デフォルトの名無しさん2010/04/27(火) 15:14:43
ControlBox非表示にすれば出ないけど、×ボタンも消えるな
0021デフォルトの名無しさん2010/04/27(火) 15:21:07
キーボードで移動ぐらいさせてくれよ
最大化最小化はMaximizeBox/MinimizeBoxで不可能にしても構わないからさ
0022デフォルトの名無しさん2010/04/27(火) 15:27:52
まぁ実際Windows7からはAlt+Spaceちょこちょこ必須だったりするしなw
0023デフォルトの名無しさん2010/04/27(火) 15:58:43
こうやって初心者の質問を食いつぶされるのであった
0024デフォルトの名無しさん2010/04/27(火) 16:06:15
設計が間違っているという事を教えてもらえるのはありがたいことなんだがな

スマートな方法は無いんじゃないか?
0025デフォルトの名無しさん2010/04/27(火) 16:12:09
>>19
なんで出ちゃいけないの?
それを言えば、何か他の案が出るかも。
0026デフォルトの名無しさん2010/04/27(火) 17:57:41
Alt+Spaceを潰すだけなら、そのFormのProcessCmdKeyをオーバーライドして
該当キーのときに処理済みにしてしまえばいいんだが

他の方法で開いたりすることができるかもしれんしなー
0027デフォルトの名無しさん2010/04/27(火) 18:37:04
タイトルバーの右クリックで出ちゃうよね。

>>19
単に気に入らないから出したくないというなら、あきらめろ。

最大化や最小化を防止したいなら、MaximizeBoxとMinimizeBoxをfalseに設定すれば、
システムメニューの最大化、最小化の項目がグレーアウトして使用できなくなる。
最大化ボタンと最小化ボタンは表示されてないだけで機能が生きているから
システムメニューにも表示される。その機能を無効にしてやればいい。
0028デフォルトの名無しさん2010/04/27(火) 19:33:17
http://codepad.org/7XIDgP0A
27-67行目はちゃんと動いてます
69から後でデータがちゃんとxmlファイルから読み込めてないようです。
ちなみにxmlファイルはhttp://codepad.org/mYsdSZWhです
0029デフォルトの名無しさん2010/04/27(火) 20:31:58
>>28
そのXMLファイルはXmlSerializerで出力したものなの?
0030デフォルトの名無しさん2010/04/27(火) 20:32:32
>>29
そうです
0031デフォルトの名無しさん2010/04/27(火) 20:43:39
まずデバッグしろと
「読み込めてない」は実行時例外が出てるのか、
デシリアライズされたオブジェクトが想定していたのと違う状態なのか、もしそうならどんな状態なのか
0032デフォルトの名無しさん2010/04/27(火) 20:45:03
どう考えても違うだろw
0033デフォルトの名無しさん2010/04/27(火) 20:46:47
>>28
こっちで試したら、XMLファイルの行頭のハイフンを消せば読み込めるね。
0034デフォルトの名無しさん2010/04/27(火) 20:48:41
拾ったプロジェクトソースを開きたいんだけど開けないんだけどどうして?
「無効なライセンスです」
「この種類のプロジェクトをサポートするバージョンを使用して下さい」
というエラーがでます

ソースはC#で作らています

私はVC#EE2008です

VSで作られたものは開けないとかありますか?
もしくは、ProやUltimateとかで作られたものはExpressでは開けないとかありますか?
もしくはライセンス登録してないからとか?
0035デフォルトの名無しさん2010/04/27(火) 21:17:53
>>31
デバッグはしたけど例外はでてませんでした。
ソースからプログラムを動かしてちゃんとロードできてるか試す感じだったので改めて例外は書かなくていいかと思ってたのですが
デバッグの有無は改めて書いておいたほうがよさそうですね
0036デフォルトの名無しさん2010/04/27(火) 21:22:03
>>33
元のソースにハイフンが入ってるわけないなあとチェックしてみたら91行目で調べてたcls.name[0]はxmlではnullでした
xmlに書き込むソースを改善したらうまく動くようになりましたありがとうございます
0037192010/04/27(火) 21:53:43
レスありがとうございます
ショートカットキーを設定するフォームを作っているのですが
Alt+F4が登録できなかったりするのでどうすればいいのかなと思いまして
0038デフォルトの名無しさん2010/04/27(火) 21:59:13
Alt+F4とかAlt+Spaceぐらいは標準の動作のままで良いと思うけど
一応、さっきも書かれてたProcessCmdKeyのオーバーライドで既定の動作は無視できる
0039192010/04/27(火) 22:45:10
で!できたー!
ありがとうございます
0040デフォルトの名無しさん2010/04/27(火) 22:52:07
でもさあ、そんなショートカットキーを使えるようにするのはちょっと面倒だぞ。
すべてのフォームで、ショートカットキーが登録されていたら既定の動作を無視する
コードを書かにゃならん。
0041デフォルトの名無しさん2010/04/28(水) 00:08:18
自ウィンドウ内で別プロセスのオブジェクトを表示&操作させるにはどのようにすれば実装できますか?
最近ではGoogleChromeなど、タブがマルチプロセスになっているみたいで。
WCFによるプロセス間通信を見ていますが、
クライアント側(自アプリ)、サーバ側(別プロセス)になってしまうのでは?
と思っています。

理想的な処理の流れとしては
・自ウィンドウで別プロセス作成
・指定の別プロセスのオブジェクトを取得
・取得したオブジェクトを表示
・自ウィンドウで不要になればオブジェクトを非表示・別プロセスを終了

もしかすると見当違いなのか?とも思ってます。
よろしくお願いします。
0042デフォルトの名無しさん2010/04/28(水) 00:13:31
あれって、レンダリングを行うプロセス群と、まとめて描画を行うプロセスに分かれてるんじゃないの?
0043412010/04/28(水) 00:45:42
>>42
その分かれている所のやりとりがわかりません。
イメージ的にはMDI子フォームが別プロセスになればと思ってます。
0044デフォルトの名無しさん2010/04/28(水) 00:55:03
デスクトップの上にいろいろウィンドウが開かれてる様はまさにそのように見えないかね
0045デフォルトの名無しさん2010/04/28(水) 07:57:08
>>41
それやると自ウィンドウが膨大なメモリを所持することになるよ
どちらにしてもw32でやる話だが
0046デフォルトの名無しさん2010/04/28(水) 08:59:12
>>40
マスタフォーム作ってそこで処理
それを継承したフォームでやればいいんじゃ?
0047192010/04/28(水) 09:43:20
>>40
>>46
難しいことになるようですね
初心者なので規定のコマンドはそのままにしておきます
0048デフォルトの名無しさん2010/04/28(水) 12:33:01
VS2010EE日本語版きた!
http://www.microsoft.com/japan/msdn/vstudio/express/
http://www.microsoft.com/express/Downloads/#2010-All
0049デフォルトの名無しさん2010/04/28(水) 12:43:31
最小構成とか書いてへんやんか
0050デフォルトの名無しさん2010/04/28(水) 13:15:05
>>48
よくやった
ファックしてやる
0051デフォルトの名無しさん2010/04/28(水) 13:37:09
>>48
これインストールするには今の2008をアンインストールするんでしょ?
MS関連のが多すぎてどれをアンインストールすればいいの?
C#だけでいいのかな?
0052デフォルトの名無しさん2010/04/28(水) 13:42:37
アンインストールしなくても入るよ
0053デフォルトの名無しさん2010/04/28(水) 13:45:47
ほれこの通り
http://www.dotup.org/uploda/www.dotup.org845535.png
0054デフォルトの名無しさん2010/04/28(水) 13:50:28
なんで二つも入れてるの?
HDDの無駄になるからアンインストールしたいと思ったんだけど
0055デフォルトの名無しさん2010/04/28(水) 13:54:14
>これインストールするには今の2008をアンインストールするんでしょ?

って聞かれたからしなくても入るって答えただけなのに何これ
日本語初心者がいく所は小学校だぞ
0056デフォルトの名無しさん2010/04/28(水) 14:04:20
しなほうがいい場合もあるかもしれないからああいう書き方したんだよ
0057デフォルトの名無しさん2010/04/28(水) 14:06:23
しなほー
0058デフォルトの名無しさん2010/04/28(水) 14:08:23
お前をアンインストールしてやる。
0059デフォルトの名無しさん2010/04/28(水) 14:10:50
前つかってたベータ2バージョンとは激しく違う(動作の軽さ)

快適に動いてくれてよかった。
あと、C#とC++一緒に作ってたが
同じVSで作らないといけないのが不便だったがVC#とVC++同時起動できるから便利。
0060デフォルトの名無しさん2010/04/28(水) 14:12:46
むしろどうしてあんなに重かったのか
0061デフォルトの名無しさん2010/04/28(水) 14:17:28
スーパーπ
0062デフォルトの名無しさん2010/04/28(水) 14:18:57
msdnまだかよ
0063デフォルトの名無しさん2010/04/28(水) 14:41:18
いくらバージョンアップしても2.0の機能しか使ってない俺には無駄だ
0064デフォルトの名無しさん2010/04/28(水) 15:09:18
ヒントが絞込みになったのは凄くいい
0065デフォルトの名無しさん2010/04/28(水) 15:39:27
そこかよw
0066デフォルトの名無しさん2010/04/28(水) 16:29:08
確かにいいな。
0067デフォルトの名無しさん2010/04/28(水) 16:34:31
ヘルプが使い易くなってる
firefoxで開くのがいい
0068デフォルトの名無しさん2010/04/28(水) 16:50:09
なんかC#2010で作ったアプリの起動がやたら速いんだけど
どういうこと?
0069デフォルトの名無しさん2010/04/28(水) 16:56:21
素直に喜べよ
0070デフォルトの名無しさん2010/04/28(水) 16:59:27
喜んでるんだけどさ
今までずっと起動が遅かったじゃない?
バックグラウンドアプリ作りたくても起動遅いから
Python使ってたんだけど、これすごいよw
もう全部4.0に書き換えだわw
0071デフォルトの名無しさん2010/04/28(水) 17:03:01
お、俺も入れ換える!
0072デフォルトの名無しさん2010/04/28(水) 17:34:13
うおお入れるぞおおおおおお
0073デフォルトの名無しさん2010/04/28(水) 17:40:24
インスコ再起動後daemonが起動せず、ドライブ認識できなくて4回やり直したわ
0074デフォルトの名無しさん2010/04/28(水) 18:58:04
2010でGoogleIME完全に使えなくなったわww
0075デフォルトの名無しさん2010/04/28(水) 19:23:40
起動早くなるのはハイエンドのマシン使ってる場合だけで
XP世代のマシンだとむしろ軒並み遅くなる、なんてオチなんだろうなどうせ。
そりゃあそうでしょうとも。
0076デフォルトの名無しさん2010/04/28(水) 19:37:00
>>75
xpだけど速いよ?
ネイティブアプリのようにダブクリした瞬間起動するけど


ToolStripSeparatorがToolStripMenuItemにキャストできなくなってる
プログラミングし直さなきゃ・・・
0077デフォルトの名無しさん2010/04/28(水) 20:01:53
C#ってWin32APIも使える?ドトネトしか無理?
0078デフォルトの名無しさん2010/04/28(水) 20:03:23
使える。
0079デフォルトの名無しさん2010/04/28(水) 23:06:25
ダイアログから受け取ったオブジェクトはDisposeしたあと消えちゃいますか?
object obj=frm2.Obj;
こんな感じで受け取ったら消えているんだけど
0080デフォルトの名無しさん2010/04/28(水) 23:07:49
全部大文字でインテリセンスきくがなんか意味あるんだろうか・・・
たとえばMessageBoxはMBでインテリセンスがMessageBoxを候補してくれるが・・・
0081デフォルトの名無しさん2010/04/28(水) 23:10:22
>>79
受け取り方による。
オブジェクトのコピーが作られるような受け取り方をすれば、ダイアログがどうなろうと
消えないんだけど、そのやり方は型によって違う。
0082デフォルトの名無しさん2010/04/28(水) 23:22:09
>>79
それはfrm2の実装によるので一概には言えない
frm2を作った奴に聞け
0083デフォルトの名無しさん2010/04/28(水) 23:24:03
TreeNode node=frm2.RootNode;
だとどうですか?
0084デフォルトの名無しさん2010/04/28(水) 23:28:46
>>83
消えないとしても保持する意味ないだろ。
0085デフォルトの名無しさん2010/04/28(水) 23:29:59
Microsoft Visual C# 2008 ExpressEdition を使っていて、参照の追加でSystem.Linqを追加しようとしても見つからないのですが、
これはどうすればいいのでしょうか??
0086デフォルトの名無しさん2010/04/28(水) 23:34:12
System.Core.dll
ターゲットフレームワークは3.5にしないとダメ
0087デフォルトの名無しさん2010/04/28(水) 23:35:24
>>85
System.Coreを参照しる
で、Using System.Linq
0088デフォルトの名無しさん2010/04/28(水) 23:35:58
using書けばいいだけじゃないの?
0089デフォルトの名無しさん2010/04/28(水) 23:38:48
>>86-88
レスありがとです
System.Coreを追加、v2.0.50727からv3.5に変えてみた所、Linqなんちゃらエラーはなくなりました
ありがとうございました
0090デフォルトの名無しさん2010/04/28(水) 23:41:13
>>84
どうしてですか?
0091デフォルトの名無しさん2010/04/29(木) 00:03:11
デジタルクロックを作ってみようと思い、フォーム上にラベルとタイマーを追加しコードを以下のようにすると
ビルドやデバッグ開始ではエラーも警告もなく起動するのですが、コンパイルしようとすると「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();
}
}
}
0092デフォルトの名無しさん2010/04/29(木) 00:12:53
EEのダウンロードページが勝手にリロードしてカチカチうるさい
0093デフォルトの名無しさん2010/04/29(木) 00:19:09
ダウンロードページなんて閉じよw
0094デフォルトの名無しさん2010/04/29(木) 03:40:07
>>91
Designer.csだかないかい?
それとも訳分からないうちに消しちゃった?
またはForm1にTimerとLabelをついかしてないとか」
ttp://www.dotup.org/uploda/www.dotup.org847078.lzh.html
pass:csharp

こんな構成になってるはず
コンパイルすれば動くよ〜

VSでコンパイルしてるけど大丈夫だよね…うん
0095デフォルトの名無しさん2010/04/29(木) 03:43:02
理由はそのまま
Form1というクラスの中に
label1という変数と
timer1という変数がなくて
InitializeComponent()という関数が定義されてない
まぁ〜Designer.cs消したかそもそもコンソールアプリとか…
0096デフォルトの名無しさん2010/04/29(木) 09:40:53
2008のプロジェクトを2010でビルドしたら
いつのまにか、ソリューションをクリックすると
アクティブ構成という項目が追加されていて
前だとDebugとReleaseをF5,F6を押すことで
自動で切り替わっていたのに
アクティブ構成でdebugとなっているとF6を押しても
Releaseフォルだの方にビルドされてくれない

ツール>オプション>ソリューション>「ビルド構成の詳細を表示」はチェックは入っていない
試しにチェックしてビルド、外してビルドとしてもこの項目が消えてくれなくて
不便なんだけど前のようにF5,F6で自動でフォルダを分けてコンパイルしてくれるように
できないでしょうか?
0097デフォルトの名無しさん2010/04/29(木) 10:06:00
Labelコンポーネントで
文字を斜めとか縦書きで表示したいんだけどどうすればいい?
0098デフォルトの名無しさん2010/04/29(木) 10:14:39
LayoutTransformとかRenderTransformとか
0099デフォルトの名無しさん2010/04/29(木) 11:11:04
WinFormsのLabelでは不可だな
WPFなら>>98だけどWPFだったらそういうのはLabelじゃなくてTextBlock使うべき
0100デフォルトの名無しさん2010/04/29(木) 12:54:05
WinFormだってLabelのOnPaintオーバーライドして必要なら2,3プロパティ
追加するだけなわけで、「不可」とか言い切っちゃうのはどうかと....
0101デフォルトの名無しさん2010/04/29(木) 12:57:24
それLabel関係ないじゃん
0102デフォルトの名無しさん2010/04/29(木) 13:02:59
WAMLとかいうのやってみたけど
なんで数字まで""がついてるんだよ

なんとか.width = "200"とか
text = "Hello"ならわかるが
数字が単なる文字列みたいで気に入らないな。
0103デフォルトの名無しさん2010/04/29(木) 13:05:51
XANLか?
そりゃXMLの仕様だ。
0104デフォルトの名無しさん2010/04/29(木) 13:06:24
実際XMLのフォーマット上は特に区別はない
型はスキーマで決まる
0105デフォルトの名無しさん2010/04/29(木) 13:11:28
>>101
じゃあFormを派生して書くコード(毎日やってるはずだが)は
「Form関係ない」わけね。

よくわからない思考法。
0106デフォルトの名無しさん2010/04/29(木) 13:21:38
Formを表示するのに基底のFormの機能を使ってるだろ
文字を表示するだけだったらLabelから派生する必要はない
0107デフォルトの名無しさん2010/04/29(木) 13:36:11
質問者の質問が読めてないのかな。(>>97)
"Labelから派生する必要"があるかないか、どうして分かるんだろう。

例えばBorderStyleやAutoSizeといったプロパティが必要かもしれないし、
Labelと透過的に扱える必要があるのかもしれない。
0108デフォルトの名無しさん2010/04/29(木) 17:30:40
>>94-95
レスありです
http://www1.axfc.net/uploader/Img/so/80908.jpg
アップロードしていただいたもの(上記画像→)をそのままコンパイルしてみましたが、
左上のようなエラーが出ます。 Designer.csは消えてないはずです。
何をどういじればちゃんとコンパイルできるようになりますでしょうか??
0109デフォルトの名無しさん2010/04/29(木) 17:39:26
死ねよ。
0110デフォルトの名無しさん2010/04/29(木) 17:54:19
>>108
う〜ん
何故かpartialが効いていないような…
あんまりあれな方法ですけど右のDesiner.csを右クリック→コードを表示
カット&ペーストで
最初の
<summary>
〜
private System.Windows.Forms.Timer timer1;
までをForm1.csにうつせば通るんじゃないかなぁ〜
0111デフォルトの名無しさん2010/04/29(木) 17:55:37
何言ってんだお前。

cscで、そのファイルだけコンパイルできるわけないだろ。
0112デフォルトの名無しさん2010/04/29(木) 17:58:00
Form1.Designer.csの中身をここに貼ってさらせw
http://ideone.com/

どこかからコピーしたソース使ってるとかしてる感じ・・・・
0113デフォルトの名無しさん2010/04/29(木) 18:00:01
コピーとか関係ないんだが。
0114デフォルトの名無しさん2010/04/29(木) 18:01:56
あのよ、プロジェクトをcscでコンパイルしようってんなら、cscで
プロジェクト内のすべて.csを指定して、参照してるアセンブリを/referenceで指定して・・・
ってやんないと無理。

普通、そんなことはやらん。せいぜい、msbuildを使うくらい。
0115デフォルトの名無しさん2010/04/29(木) 18:01:58
コピペ君って馬鹿だな、を地で行ってみました、まで読んだ。
0116デフォルトの名無しさん2010/04/29(木) 18:06:03
ああ
できねーって騒いでたのはcscで個別にやってたのか
なんでIDEのビルドを使わないのw
F6押せばいいじゃん
0117デフォルトの名無しさん2010/04/29(木) 18:08:06
>>108
プロジェクト落としてそのままコンパイルしたはずなのに
フォルダのファイルおかしくね?
0118デフォルトの名無しさん2010/04/29(木) 18:32:18
>>110-117
レスありがとです

>>94氏にUPしていただいたフォルダで皆さんの全ての.csを指定というご指摘通りに
「csc Form1.cs Form1.Designer.cs Program.cs」とコンパイルしてみたら無事Program.exeが出来ました

ありがとうございました!
0119デフォルトの名無しさん2010/04/29(木) 20:09:26
何でわざわざプロンプトからコンパイルしているんだろう?
0120デフォルトの名無しさん2010/04/29(木) 21:05:16
>>119
すみませんそれ以外のコンパイル方法がわからなくて・・・
0121デフォルトの名無しさん2010/04/29(木) 21:06:00
>>120
F6キー
0122デフォルトの名無しさん2010/04/29(木) 22:32:25
>>121
レスありです
F6キーを押すとプロジェクトフォルダ\bin\Release\の中にコンパイルされるんですね
活用していこうと思います
0123デフォルトの名無しさん2010/04/29(木) 22:35:07
>>122
F5キー押せばその場でデバックもできるよ
0124デフォルトの名無しさん2010/04/29(木) 22:55:56
上の方にある緑色の右向きの三角形クリックで実行できる…
その前に何でcscを先に知った
0125デフォルトの名無しさん2010/04/29(木) 23:04:35
>>123-124
レスありです
今までファイル名を指定して実行→cmd→・・・ってやってた自分がバカみたいです。。
ビルドとかデバッグはしたことあったのですが、あまり意味がわかっておらず、
cscでコンパイルする前の動作確認のためだけのものかと思ってました・・
プロジェクトフォルダに出力されてるのにも全く気付かなかったです
cscは読んでいたサイトでこうやってコンパイルしますーみたいに書いてあったので使ってました・・
0126デフォルトの名無しさん2010/04/29(木) 23:13:59
そんなことあんのかよ…と思ったが
本当にcmdからcscでコンパイルすると解説しているところもあるんだな。
俺はVS使った後にcscの存在を知ったと言うのに。
0127デフォルトの名無しさん2010/04/30(金) 10:20:29
前にそのクラス内でのみ使えるプロパティの質問でできないと言われたけど
できるじゃない
public int Hoge {private get; private set; }
0128デフォルトの名無しさん2010/04/30(金) 10:32:48
入門書一冊買った方がいいかと・・・
0129デフォルトの名無しさん2010/04/30(金) 10:33:38
private int Hoge{get;set;}となんか違うの?
0130デフォルトの名無しさん2010/04/30(金) 10:51:36
本なんて面倒で読む気しないぞ
PCなら寝ながらでも暗がりでも見れる
出版側も本作るより楽なはずなのにな
0131デフォルトの名無しさん2010/04/30(金) 11:55:11
本を読むのが面倒ってどんだけゆとりなんだよ。
0132デフォルトの名無しさん2010/04/30(金) 11:57:08
本とかネットがどうたらの前に>>127に対して以前回答した奴が悪いw
0133デフォルトの名無しさん2010/04/30(金) 12:00:14
>>129
>>127両方private付きなのであれだがたとえば片方だけとか考えてみ
0134デフォルトの名無しさん2010/04/30(金) 12:07:37
>>133
君よく空気読めない奴だなって言われないかw
0135デフォルトの名無しさん2010/04/30(金) 12:08:44
適当に進んでるスレで空気読む必要あるのか?
0136デフォルトの名無しさん2010/04/30(金) 12:19:23
言ってるそばからなんと「空気読めない」発言....

落語のオチを説明するようで情けないが、空気読めない、っていうのは別に
その場の雰囲気を読めないとか何とか、そういう特殊日本的な能力のことを言ってるわけじゃない。

>>129なんか、誰が読んでも明らかに半分以上「嫌味」で言ってるに決まってるのに
そんなことも読み取れない読解力のなさのことを言ってる。
0137デフォルトの名無しさん2010/04/30(金) 12:20:57
嫌味で言ってるのにマジで答えてどうするんだよ
そんなにしてまで「人に教えを垂れる自分」に酔いたいのかねw
しかもこんな低レベルな話でさ。
かなりおめでたすぎるだろう
0138デフォルトの名無しさん2010/04/30(金) 12:21:16
え、ちゃんとした回答だったの?
0139デフォルトの名無しさん2010/04/30(金) 12:25:47
どうでもいい
0140デフォルトの名無しさん2010/04/30(金) 12:26:38
文字だけの世界で真意なんて完全に読み取れるわけねーだろ
01411292010/04/30(金) 12:36:25
なんか俺のせいで荒れてるみたいでごめんよ

別に嫌味で聞いたんじゃなくて目から鱗の何かがあるのかと思ったんだ
01421272010/04/30(金) 12:37:12
http://pc12.2ch.net/test/read.cgi/tech/1269018938/395
>395 :デフォルトの名無しさん :2010/03/24(水) 22:17:27
>自クラスのprivateフィールド変数もプロパティを
>通してでないとアクセスできないようにする方法ありますか?


あ、ごめんごめん、質問の内容違うかったわwww
01431292010/04/30(金) 12:38:19
>>142

しかもその質問したの俺じゃね?
0144デフォルトの名無しさん2010/04/30(金) 12:39:53
>>142
自分の勘違いを人のせいにするとか最低な奴だ
0145デフォルトの名無しさん2010/04/30(金) 12:41:27
春だねえ〜
0146デフォルトの名無しさん2010/04/30(金) 12:42:31
>>143
それはお前の勘違い
この質問の時そういうのがあればというレスはいくつかあったから
そのうちの一人だろ

privateフィールド変数

みたいな書き方するの俺ぐらいだしw
0147デフォルトの名無しさん2010/04/30(金) 12:52:22
空気嫁と叫んだやつが空気悪くした件
0148デフォルトの名無しさん2010/04/30(金) 13:00:19
空気読めてなかったのは誰だよってやつだな
0149デフォルトの名無しさん2010/04/30(金) 13:03:42
空気読めなんて言ってないけどなだから。
得意になって教え垂れてるけど、「それ」が本当にマジな質問かどうか考えてるのか、
って言っただけだが。
0150デフォルトの名無しさん2010/04/30(金) 13:06:41
ソッスネw
0151デフォルトの名無しさん2010/04/30(金) 13:09:28
寒いギャグで皆沈黙したときに
そのギャグに被せたのが>>129
それに真顔でつっこむ天然アイドル>>133
つまらないと死にゼリフを吐く>>134

一番空気を悪くする人物は間違いなく>>134
0152デフォルトの名無しさん2010/04/30(金) 13:14:22
個人の人格叩いてるわけじゃないので、勘違いして続けないよーに。
さあ、もうやめましょうね。
0153デフォルトの名無しさん2010/04/30(金) 13:18:43
空気読めないって人格攻撃の一つだろ
0154デフォルトの名無しさん2010/04/30(金) 13:21:47
スレを憎んで人を憎まずってやつよ。 続けるなっつーの。
0155デフォルトの名無しさん2010/04/30(金) 13:23:42

イギリス人には 「紳士はこういうときにスルーするものです」
ドイツ人には 「規則ではスルーすることになっています」
イタリア人には 「さっき美女がスルーしました」
アメリカ人には 「スルーするとヒーローになれますよ」
フランス人には 「スルーしないで下さい」
北朝鮮人には「将軍様がスルーしろと仰っています」
日本人には 「みんなもうスルーましたよ」
0156デフォルトの名無しさん2010/04/30(金) 15:24:26
>>154
今年一番感動した名言

として登録した
0157デフォルトの名無しさん2010/04/30(金) 20:53:28
>>129
全然違う!>>129なんかと一緒にするな!
>>127は、なんとCS0274になるんだぞ!凄いだろ!



まあ何というか、そろそろネタバレしてもいいかなあと
初心者スレだから見た瞬間にコンパイルエラーと分からない人もいるだろうし、
あまり放置しすぎるのもどうかと思うわけだ
0158デフォルトの名無しさん2010/04/30(金) 21:13:09
C#2010容れて見た。ツールボックスにChartが追加されてる!
で、どうやって使うんだコレ?
0159デフォルトの名無しさん2010/04/30(金) 21:58:12
ところでみんなC#で何作ってるの?
0160デフォルトの名無しさん2010/04/30(金) 21:59:48
業務アプリ
0161デフォルトの名無しさん2010/04/30(金) 22:30:49
人工知能
0162デフォルトの名無しさん2010/04/30(金) 22:36:11
クローラー+ダウンローダー+重複チェッカー
0163デフォルトの名無しさん2010/04/30(金) 22:38:46
>>160 奴隷

>>161 ニート

>>162 ハカー
0164デフォルトの名無しさん2010/04/30(金) 22:47:37
ただのオナニーマスターだよ
0165デフォルトの名無しさん2010/05/01(土) 02:09:42
フォームにチェックボックスをつけ、CheckedChangedのイベントでチェック時はウィンドウを最前面に表示するようにしたのですが、
チェックボックスのプロパティのCheckedをTrueにしてプログラム起動時からチェックが入ってる状態にしても、
一度チェックし直さなければ最前面表示されないんですが何か解決策はありますか?
01661652010/05/01(土) 02:12:30
すみません
上の方にthis.TopMost = true;をもう1行追加することで自己解決しました
駄レス申し訳ないです
0167デフォルトの名無しさん2010/05/01(土) 02:15:39
できるだけ書かずにデザイナのプロパティいじれ
01681652010/05/01(土) 02:40:43
>>167
レスありがとです
フォームのLoad時にCheckedChangedのイベント設定することで書かずになんとかなりました
0169デフォルトの名無しさん2010/05/01(土) 15:56:25
"reverse".Reverse() => "esrever"
とできるように既存のクラス、コンポーネントのメソッドを
外部から拡張する技ってあります?
0170デフォルトの名無しさん2010/05/01(土) 15:57:51
拡張メソッド
0171デフォルトの名無しさん2010/05/01(土) 16:08:24
そのまんまか
トン
0172デフォルトの名無しさん2010/05/01(土) 16:09:02
こんな感じか。

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();
}
}
0173デフォルトの名無しさん2010/05/01(土) 19:41:11
>>169
StringはIEnumerable<char>だからStringに対するReverse自体は可能だよ
"reverse".Reverse().Aggregate("", (s, c) => s + c)
Aggregateが嫌なら>>172みたいに個別に実装するより
IEnumerable<char>を引数にとって連結した文字列を返す拡張メソッドを書いた方がスマート
0174デフォルトの名無しさん2010/05/01(土) 21:32:35
c#のウェブブラウザーコンポーネントってIE入ってない環境でも動作する?
0175デフォルトの名無しさん2010/05/01(土) 21:38:37
IE入ってない環境ってWin95とかか?
0176デフォルトの名無しさん2010/05/01(土) 21:39:46
しない
0177デフォルトの名無しさん2010/05/01(土) 22:29:06
>>176
マジすか・・・ありがとうございます
0178デフォルトの名無しさん2010/05/01(土) 23:43:55
>>177でガッカリしてることにビックリした俺はおかしいか?
0179デフォルトの名無しさん2010/05/01(土) 23:44:33
ああ、頭おかしいね
0180デフォルトの名無しさん2010/05/01(土) 23:47:07
ウェブブラウザーコンポーネントってIEコアを使ってるだけだしなあ
0181デフォルトの名無しさん2010/05/01(土) 23:48:54
>>178
スレタイ読んでも納得いかないなら別のスレいくといいよ
0182デフォルトの名無しさん2010/05/01(土) 23:49:08
>>179==177
0183デフォルトの名無しさん2010/05/01(土) 23:50:54
EUとかクンコカ向けWindowsはIEがバンドルされてないんだっけ?
そういや7からは日本版にもメールクライアント入ってないのな。
0184デフォルトの名無しさん2010/05/02(日) 05:38:27
c#でcの関数、例えばfgetsとかって使えないのですか?
使えたら方法を教えてくだしあ
0185デフォルトの名無しさん2010/05/02(日) 05:42:53
>>184
(σ・∀・)σ<fgetsぽいことはできるよ
c# StreamReader関連かな
一行ずつ
http://dobon.net/vb/dotnet/file/readfile.html#section3
一文字ずつ
http://dobon.net/vb/dotnet/file/readfile.html#section4
0186デフォルトの名無しさん2010/05/02(日) 05:53:07
>>185
ありがとうございます
ぽいことと言うか、c++で作ったメソッドの(charやDirectXの関数を使ってる)コピペをそのまま貼り付けたのですが
エラーが出まくったので、とりあえずchar[]の[]を消して、stringにしたりしたのですが
#includeもできないみたいですし、Cの関数を使ったり、DirectXのライブラリを、オプションとかで設定して使えるようにできないのですか?
全くC#の機能を使って同じ動きがするように書き直すしか無いのでしょうか?

0187デフォルトの名無しさん2010/05/02(日) 05:56:11
>>186
DirectX使いたいならXNAにするとかすればいいんじゃないかな?
あれはDirectXのラッパーのはずだし

それにC++のchar配列はC#の場合Stringで対応かな
文字とか入れてるんでしょ?
0188デフォルトの名無しさん2010/05/02(日) 06:01:10
あーごめんぼけてた
>全くC#の機能を使って同じ動きがするように書き直すしか無いのでしょうか?
そうです。
言語の仕様が違うので書き直しです。
c#の方がスマートに書けるのでそんなに苦労しないと思うけどね
0189デフォルトの名無しさん2010/05/02(日) 06:03:49
>>187
数字です(数字を文字と言ってもいいのかさえわからないレベル)
フォームアプリを作りたかったので、その場合C#が良いと聞いたのでC#で始めようと思ったのですが
使えないならC++/CLIかなんかそんな感じのC++でフォームアプリを作れるのだと多分コピペできるのでそっちでやりたいと思ってます
つか、C++/CLIかなにかとC#はドットネットだから同じ物だよみたいな事を聞いていたので、てっきりcharとかfputとかc用のライブラリとか、使えると思ってました
0190デフォルトの名無しさん2010/05/02(日) 06:05:47
フォームアプリとDirectXがなんで一緒に・・・・
0191デフォルトの名無しさん2010/05/02(日) 06:10:23
C++/CLIはC++とC#を同じソースに同時に書けるといった感じの
二階建て言語だからね〜
0192デフォルトの名無しさん2010/05/02(日) 06:12:32
>>191
あれってそんな仕様なの?w

まあ>>189がどういうものを移植しようとしてるのかが
もうちょっと明確になればなあ
0193デフォルトの名無しさん2010/05/02(日) 06:20:43
使えないんでつか…
C++/CLIでやりまつ(`・ω・´)
ありがとうございまつた
0194デフォルトの名無しさん2010/05/02(日) 06:23:07
いや・・・・
ちょっと書き直せばいいだけでしょw
実際そんな手間じゃないと思うよw

どういうアプリを移植しようとしてるの?
0195デフォルトの名無しさん2010/05/02(日) 07:03:06
>>192
まあ大げさに比喩で言ってみたんだけど
/clr:safeでエラーになら内書き方をすればC#相当ということ。
0196デフォルトの名無しさん2010/05/02(日) 08:09:30
C++/CLIなんか手に負えないと思うけどなw
あれはC++とC#の両方がちゃんとわかってる人が嫌々使うもんだ
0197デフォルトの名無しさん2010/05/02(日) 09:19:12
C/C++の方はDLLにして、P/Invokeする方が楽。
0198デフォルトの名無しさん2010/05/02(日) 10:33:05
C#はC++の拡張じゃねぇ…
C#はC#だ
0199デフォルトの名無しさん2010/05/02(日) 11:39:24
XMLシリアライズでクラスを復元するメソッド内ではクラスの中身が復元されてるんですが
メソッドを出ると消滅するのはなんでですか?
0200デフォルトの名無しさん2010/05/02(日) 11:41:36
>>199
シリアライズは使わない方がいいよ今後のために
普通にXML Documentで吐いたほうがいい
0201デフォルトの名無しさん2010/05/02(日) 11:45:36
INIファイル最強伝説
0202デフォルトの名無しさん2010/05/02(日) 11:47:04
INIとか忘れかけてたwwww
そう言えばあったな・・・・

つうか、設定クラスをバイナリにして保存→復元
てのもあり?
0203デフォルトの名無しさん2010/05/02(日) 11:48:52
プロパティの変更に弱い方式はウンコ
0204デフォルトの名無しさん2010/05/02(日) 11:50:33
XmlSerializerはまだマシ
それ以外のシリアライザは最悪
保存じゃなくて通信に使うもんだあれは
0205デフォルトの名無しさん2010/05/02(日) 12:14:04
DataContractSerializer最強
XmlSerializerは柔軟性なさ過ぎてまじゴミ
0206デフォルトの名無しさん2010/05/02(日) 12:39:02
XmlSerializerはシリアライザというよりXML文書の読み書きに使うものだからなあ
逆にDataContractSerializerはフォーマット固定なのでシリアライズにしか使えない
シリアライズ方式はXmlSerializerに近くて変更の影響を受けにくいのでシリアライザとしては最強
0207デフォルトの名無しさん2010/05/02(日) 12:41:15
オーノー
.netではシリアライズが標準なのかと思って勉強しまくってます
0208デフォルトの名無しさん2010/05/02(日) 13:04:17
メソッドを出ると消滅、とか、何のことだか俺にはサッパリなんだけど
このスレはエスパーが揃ってるのか
0209デフォルトの名無しさん2010/05/02(日) 13:08:43
ローカル変数に入れててスコープから抜けてるんだろ
0210デフォルトの名無しさん2010/05/02(日) 13:09:22
単にスコープはずれたとかそんなんじゃないの?
0211デフォルトの名無しさん2010/05/02(日) 13:20:59
スコープ外れたらアクセスできないし
どうやって消滅してることを確認するんだよ
0212デフォルトの名無しさん2010/05/02(日) 13:25:18
確認したわけじゃなくてデバッガのウォッチペインから消えただけとか予想
0213デフォルトの名無しさん2010/05/02(日) 13:30:37
ほんとに確認しようと思ったらWeakReferenceで追跡するとか
COMでCLRホストしてコールバックさせるとかくらいしないと
0214デフォルトの名無しさん2010/05/02(日) 13:33:56
すいませんメソッドの外にひとくくりにする時にメソッド内の宣言部分を消し忘れてました
シリアライズ関係ありませんでしたすいません
0215デフォルトの名無しさん2010/05/02(日) 13:45:08
お前はまずC#の仕様を勉強してこい
0216デフォルトの名無しさん2010/05/02(日) 13:49:20
すいません
0217デフォルトの名無しさん2010/05/02(日) 13:59:33
吸います
0218デフォルトの名無しさん2010/05/02(日) 20:36:17
.netFramework4.0って劇的に変わったところあるんすかね
0219デフォルトの名無しさん2010/05/02(日) 20:37:21
あんまりない。
0220デフォルトの名無しさん2010/05/02(日) 20:45:08
dynamicとoptional parameterでついにExcelを操作するのにVBがいらなくなった
0221デフォルトの名無しさん2010/05/02(日) 20:45:16
parallel関係は面白そうだけど目を見張るほどではないね
0222デフォルトの名無しさん2010/05/02(日) 20:50:05
>>220
C#から容易にExcel操作できるん?
0223デフォルトの名無しさん2010/05/02(日) 20:51:49
>>220
どっちも.NET Frameworkの新機能じゃなくてC#の新機能だけどなw
0224デフォルトの名無しさん2010/05/02(日) 20:54:21
>>220
ニワカ乙
0225デフォルトの名無しさん2010/05/02(日) 21:06:58
dynamicは.NETの新機能だぞ
DLRがないと動きません
0226デフォルトの名無しさん2010/05/02(日) 21:13:27
どーせ社内システムとかでしか使わんのでバージョン揃ってるから、事前
バインディングで問題なかった。
0227デフォルトの名無しさん2010/05/02(日) 21:16:47
勘違いしてる人が多そうだけどdynamicはリフレクションじゃないよ
でもCLRにそういう命令が追加されたわけでもない
対象の操作を行うメソッドを動的に生成してデリゲートで差し替えてるの
0228デフォルトの名無しさん2010/05/02(日) 22:23:14
SortedListから値を取り出すときに、求めるキーそのものがなくても一番近いインデックスを教えてくれるような機能が欲しいんですが
そういうのってないですか?
0229デフォルトの名無しさん2010/05/02(日) 22:24:55
>>222
元から出来るじゃん
簡単にってのが引っかかるが
0230デフォルトの名無しさん2010/05/02(日) 22:29:02
>>228
List<T>使う
追加や検索は常にBinarySearchで
0231デフォルトの名無しさん2010/05/02(日) 22:54:22
>>230
なるほどありがとうございます
0232デフォルトの名無しさん2010/05/03(月) 02:58:37
>>229
C#だと引数の省略ができなくて大変だったんだよ
0233デフォルトの名無しさん2010/05/03(月) 04:48:39
System.Web.dllを追加したく「参照の追加」の.NETタブの一覧を探したんですが、
見つからないので参照タブにて直接DLLを指定したら
「アセンブリ "System.Web" を解決できませんでした。このアセンブリは、現在のターゲット フレームワーク ".NETFramework,Version=v4.0,Profile=Client" 内にありません。
ターゲット フレームワーク内にないアセンブリへの参照を削除するか、プロジェクトを再ターゲットしてください。」
とエラーが出たのですがこれはどうすれば解決できますか?
0234デフォルトの名無しさん2010/05/03(月) 04:54:02
IDEのバージョンは何を使っててターゲットバージョンは.netバージョンいくつなの?
0235デフォルトの名無しさん2010/05/03(月) 04:58:55
2010Expressです
すみませんターゲットバージョンっていうのはどれのことでしょうか??
0236デフォルトの名無しさん2010/05/03(月) 05:05:11
VC#2010Express?
VWD2010Expressとかいわないよね?
0237デフォルトの名無しさん2010/05/03(月) 05:07:12
Visual C# 2010 Expressです
0238デフォルトの名無しさん2010/05/03(月) 07:05:17
いまいち状況がよくわからんが余計な参照入れたのならはずすだけじゃないの?
02392232010/05/03(月) 07:32:15
>>238
もちろん削除したらエラーは消えるんですが、System.Webはどのように追加すればいいでしょうか?
02402332010/05/03(月) 07:33:36
すみません>>223じゃなくて>>233です
0241デフォルトの名無しさん2010/05/03(月) 07:35:32
コードの上に
using System.Web;
って入れるだけちゃうの?
どんな機能を使いたかったの?
02422332010/05/03(月) 08:30:38
>>241
具体的には下記URLの「より高度な電子メール送信」の部分をやりたかったのですが、
using System.Web;って入れてもエラーが出て、下記記事の中に
「このクラスは、クラス・ライブラリのDLLであるSystem.Web.dllの中に含まれているので、
これが参照されていない場合は参照をプロジェクトに追加する必要がある。」
とあったので、System.Web.dllを追加しようとしたら見つかりませんでした・・
*ttp://www.atmarkit.co.jp/fdotnet/dotnettips/017sendmail/sendmail.html
0243デフォルトの名無しさん2010/05/03(月) 08:46:08
System.Web.dllって.net2.0が最新かな・・・いれてる?
VC#2008Expressでみたら参照にはあるねえ・・・
ttp://tsushima.2ch.at/s/news2ch61959.png
0244デフォルトの名無しさん2010/05/03(月) 08:53:22
>>242
その方法は古いみたいね。
新しい方はこっちでやるみたい
http://dobon.net/vb/dotnet/internet/smtpmail.html
0245デフォルトの名無しさん2010/05/03(月) 09:00:54
これなら動くんじゃないかな
http://ideone.com/UCjUS
02462332010/05/03(月) 09:03:14
>>243-244
.NET3.5とか4.0のほうばかり見てました
2.0のフォルダにあったSystem.Web.dllを入れてみたら正常に追加されました
ただ今度は「古い形式です」と出たので1.1の方のフォルダにあったものを追加したら無事コンパイル出来ました
多分2.0の方だと>>244さんが書いてくださった方法が使えるんですね
ありがとうございました!
0247デフォルトの名無しさん2010/05/03(月) 09:05:36
>>246
.netもなんだかんだで歴史あるしネットのサンプルコードが書かれた時代と
仕様が変わってるケースがあるので、掲載年月日とかも見た方がいいね
02482332010/05/03(月) 09:06:47
>>245
すみませんレスかぶりました・・
書いていただいたソースを使ってみたらコンパイル出来ました
System.WebじゃなくSystem.Netというのもあるんですね
また機会があったら使ってみたいと思います
ありがとうございましたー!
0249デフォルトの名無しさん2010/05/03(月) 09:13:04
.NETのメール関連のクラスは、日本特有のメール文化からくる
エンコードの問題に対処できないので業務ではぶっちゃけ使えない
0250デフォルトの名無しさん2010/05/03(月) 13:35:21
フォトショップをジャバスクリプトとDOMで制御するのを始めて1年目の者です。
職場の生産システムに導入して、効率を上げる事を目的にしています。
(金にならない自主作業ですが)

DOM利用のドキュメント処理はもちろん、ファイルの扱い、GUIも
一応理解して、システムを構築できるレベルにあります。

しかしだんだん欲が出てきて、もっと速く画像処理できる
プログラムを開発できないかと考えるようになりました。
それで、現在言語を物色中なのです。

それで、C#が取っ付きやすそうだと単純に思ったのですが、
C#で、2Dの画像処理を開発経験のある方のご意見を伺いたいのです。
フォトショップのDOMは理解しやすくて簡単なのですが、
C#で2D処理する場合、DOMみたいなものを利用できるのでしょうか
その辺りの情報が初心者なので皆無なのです。

C#の2D処理に関する、学習の筋道をお教えください。
お願いします。
0251デフォルトの名無しさん2010/05/03(月) 13:47:42
そんなんないし、そもそもC#で画像って、どこかでライブラリ買ってこないと
話にならないと思うよ。
0252デフォルトの名無しさん2010/05/03(月) 13:50:19
何がしたいかによる
写真に特殊効果かけたりするようないわゆる画像処理は大変だし
そもそもPhotoshopの速度を超えるのはまず不可能だけど
図形や文字描いたりするだけなら簡単だよ
0253デフォルトの名無しさん2010/05/03(月) 14:26:41
現状では

JavaScript→AdobeのDOMレイヤー→ソース

ってアクセスしてるのでしょう?
レイヤーがないんだからソースを直に読めるかどうかによるが
ソースが何なのか書いてないからできるとも言えない
0254デフォルトの名無しさん2010/05/03(月) 14:39:20
>>251
>>252
早速、ありがとうございます

DirectXは、確か画像処理用のライブラリ(なのでしょうか?)
だったかと思いますが、それを利用するというのはできませんか?

やりたい事の一つは、大量の画像をトリミングする作業です
被写体の位置と大きさを一定にするのが条件です。
なので、必要な機能は、以下になります。

1:ウインドー上の画像をマウスで位置調整できる
2:画像のどの位置にマウスポインタがあるか把握できる
3:拡大縮小による画像の補完機能。

スクリプトでしか処理し得ない部分と
フォトショップの基本機能による手作業を分離すれば
できる事ではあるのですが、専用のソフトで一括処理できれば
よいなと考えています。
0255デフォルトの名無しさん2010/05/03(月) 14:42:45
余裕
.NETの標準のライブラリの範囲(System.Drawing/WPF)でできる
DirectXはリアルタイム処理のためのものなのでこの場合はいらん
0256デフォルトの名無しさん2010/05/03(月) 14:57:30
それって画像認識が必要じゃないの?
0257デフォルトの名無しさん2010/05/03(月) 15:04:03
手作業だろ
0258デフォルトの名無しさん2010/05/03(月) 15:09:18
>>255の通りだが
>DirectXはリアルタイム処理のためのものなのでこの場合はいらん
これに関しては古い知識なので相手にしないように
0259デフォルトの名無しさん2010/05/03(月) 15:12:35
>>253
ソースはjpgメインで、時々tiffという感じです。

(psdも扱えたらいいのですが、贅沢ですね)

>>255
希望が出てきましたー。
0260デフォルトの名無しさん2010/05/03(月) 15:19:38
>>256
>>257
手作業の部分がどうしても残ります。
画像認識による自動トリミングは、夢ですね。
0261デフォルトの名無しさん2010/05/03(月) 15:23:47
自動化するにしても認識(recognize)する必要はないな
検出(detect)する必要はあるけど
0262デフォルトの名無しさん2010/05/03(月) 15:38:13
> やりたい事の一つは、大量の画像をトリミングする作業です
> 被写体の位置と大きさを一定にするのが条件です。

なら、被写体の位置と大きさを検出して、画像を切り取り&拡大&縮小、
だろ? 検出が一番大変だと思う。
0263デフォルトの名無しさん2010/05/03(月) 15:59:33
例えば、大量に直立不動の人が立っている画像が沢山あるとします。
それぞれの人の身長はまちまちですし、フレーミングも変動している
とします。これを以下のようにします

1:一定の画像サイズ
2:人物を中心に配置する
3:頭上の空間と、足の下の空間の幅を一定にする
 (画像内における人寸を一定にする)

なので、一番欲しい情報は、
1:人物の高さの情報(座標情報)
になります。

座標情報をマウスポインタを使い検出できれば
高さ情報を元に必要な拡大縮小率を導き出せます。

これは難しいですか?
0264デフォルトの名無しさん2010/05/03(月) 16:01:55
どこからどこまでがプログラムの処理で、
どこからどこまでがユーザーの操作なのか、
その辺をきっちり考えた方がいいよ。
0265デフォルトの名無しさん2010/05/03(月) 17:39:07
難しく考えなくてもこれだけだと思うが

1. 群集が収まる最小矩形を手動で選択 → R
2. 矩形Rを上下に一定の比率で拡張 → R'
3. アスペクト比が一定になるように矩形R'を左右に拡張 → R''
4. 矩形R''で切り出して、サイズが一定になるように拡大縮小

とりあえず、アドバイスとしては

・Rを保存しておくと何かと都合が良い (2,3の比率を変えたくなったときとか.)
・4は専門のアプリ・ツールに任せるのが良い (拡大縮小は特に)
0266デフォルトの名無しさん2010/05/03(月) 21:25:06
間が空いてしまいました。すみませんでした。

>>265
ありがとうございます。
C#では、取り敢えず3までの選択範囲の設定が可能ということですね。
問題は4なのですが、そのような機能を提供してくれるライブラリー
は、無いのでしょうか。(>>255情報もあります)

あればすぐにでも、C#の勉強を始めようと思うのですが。
0267デフォルトの名無しさん2010/05/03(月) 21:26:38
あるよ。.NET Frameworkってライブラリが。
0268デフォルトの名無しさん2010/05/03(月) 21:30:46
4もC#でいいよ
ごく一般的なアルゴリズムが使えるから他のツール使っても同じ
0269デフォルトの名無しさん2010/05/03(月) 21:56:21
>>267
>>268
msdnの.NET Frameworkを検索してみました。
「イメージ、ビットマップ、アイコン、およびメタファイルの操作」
のグループに、画像の補間に関する情報がありました。
これなら、いけそうです。

決意しました。C#を勉強します。

そこでなんですが、お勧めの書籍があったら
お教えください。
0270デフォルトの名無しさん2010/05/03(月) 21:59:09
ある程度スクリプトとかの経験があるなら、MSDNだけで十分だと思うよ。
0271デフォルトの名無しさん2010/05/03(月) 22:26:18
C#の勉強=ドトネトの勉強だから
C#の勉強はVB.netの勉強にもnaる
0272デフォルトの名無しさん2010/05/03(月) 22:55:48
>>271
.NET Frameworkを共通に使うからですね
0273デフォルトの名無しさん2010/05/03(月) 23:47:17
93%同じ言語
0274デフォルトの名無しさん2010/05/03(月) 23:48:07
えw
VB.netなんて糞構文でしょ
なんで存在するのかわからない言語
0275デフォルトの名無しさん2010/05/04(火) 00:02:48
VB6の人達向けに、あるいは混乱させるために
0276デフォルトの名無しさん2010/05/04(火) 00:05:11
別に言語でどうのこうの言いたくないんだけど
VBはネストが深いと読む気が失せる
0277デフォルトの名無しさん2010/05/04(火) 00:16:04
>>276
それはむしろ逆。
よく知らずに何かを貶すのは馬鹿っぽいよ。
0278デフォルトの名無しさん2010/05/04(火) 00:19:25
>>274
既存のVBerを逃したくないという、マーケティング上の理由でしょ
0279デフォルトの名無しさん2010/05/04(火) 00:21:08
>>277
知らんがな。俺が読みにくいと思っただけだよ
0280デフォルトの名無しさん2010/05/04(火) 00:34:55
VBとC#なんて、言語で言えば五十歩百歩だろ。
0281デフォルトの名無しさん2010/05/04(火) 00:45:42
>>280
C#にしかない機能も結構あるし、総合的に見ればC#の方が使いやすいのは確かだとは思うけどね。
まあ構文についてはどっちもどっちでしょ。
それぞれ利点と欠点があるから、一概にどっちが良いとは言えんと思う。

ただ今の20代以下だとC系の言語から入ってる人が多いからC#の方が読みやすいんだろうな。
0282デフォルトの名無しさん2010/05/04(火) 00:47:19
俺も>>280と同意見
匿名メソッドやその辺が違うとしても
結局やれることに差は無い
0283デフォルトの名無しさん2010/05/04(火) 00:48:06
Javaとかも含めた手続き型オブジェクト指向言語なんて、
どれも大して変わらんよ。
0284デフォルトの名無しさん2010/05/04(火) 00:49:24
新Ver提供延び延びになってるJavaなんかもうどうでもいい
0285デフォルトの名無しさん2010/05/04(火) 00:52:54
伸び伸びBoy
0286デフォルトの名無しさん2010/05/04(火) 01:17:25
>>283
静的型と動的型
クラスベースとプロトタイプベース
全然違うと思う
0287デフォルトの名無しさん2010/05/04(火) 07:00:17
.NET4でManaged DirectX使おうとすると、
FileLoadExceptionが出たり、デバッガで止まったり、.NETじゃない例外が出て落ちたりするんですが
一番いい回避策はSlimDXですか?
ジョイパッド読みたいだけなのでDirectInputが使えればいいんですが。
0288デフォルトの名無しさん2010/05/04(火) 07:03:13
vistaで管理者権限で動いているプロセスから、
別のexeを標準権限で実行するにはどうすればよいでしょうか?

Process.Start(パス)で実行すると権限を継承してしまいます><
0289デフォルトの名無しさん2010/05/04(火) 07:52:06
>>287
>ジョイパッド読みたいだけなのでDirectInputが使えればいいんですが。

joyGetPosをP/Invokeじゃだめなの?
「C# joyGetPos」で検索したら色々でてくるよ。
0290デフォルトの名無しさん2010/05/04(火) 08:23:20
>>289
DirectX使わなくても読む方法があったとは
ありがとうございます
0291デフォルトの名無しさん2010/05/04(火) 11:27:54
すくしょをとるめそっどってどれだけあるの?
描画のサーフェスを取得するってことにはぜんぶかわりないの?
02922872010/05/04(火) 11:42:31
>>289
リモコン的操作に使いたいのでリアルタイムじゃないほうがいい
→joySetCaptureを使おうと送られてくるメッセージを調べる
→どうやらボタンは4つまでしか認識できないらしいので使えない
とラッパーライブラリを作った後で気づきました
0293デフォルトの名無しさん2010/05/04(火) 11:47:50
XNA使えばいいじゃん
簡単だよー
0294デフォルトの名無しさん2010/05/04(火) 11:58:27
>>288
DuplicateTokenEx()でトークンを複製して、CreateProcessWithTokenW()とかで
実行、で行けるみたい。
0295デフォルトの名無しさん2010/05/04(火) 12:33:55
>>293
シェーダ縛りがあるので却下
0296デフォルトの名無しさん2010/05/04(火) 12:34:14
>>283
主旨違うかもしれないけど
プロパティなかったら未だにget,setアクセサ殆ど作らなかったと思う
GetValue,SetValue面倒くさかった
0297デフォルトの名無しさん2010/05/04(火) 12:48:30
>>286
Javaの語でいきなりJavaScriptの話にするのはちょっと
0298デフォルトの名無しさん2010/05/04(火) 13:58:09
ファイルが存在するかどうか調べるメソッドは?

たとえば、C:\新しいファイル
の中にエロ画像.jpgがある場合

exist(@"C:\新しいファイル\エロ画像.jpg");
でtrueを返して
エロ画像が無い場合falseを返すようなメソッドは
どこにありますか?
0299デフォルトの名無しさん2010/05/04(火) 14:00:22
FileInfo.Exists
0300デフォルトの名無しさん2010/05/04(火) 14:06:25
ファイル操作なんだから、System.IO から辿っていけばそのうち見つかるわな。
0301デフォルトの名無しさん2010/05/04(火) 14:15:26
2010でコマンドラインパラメータの解析を簡単にやる方法ないですか?
相変わらずループまわして地道にやるんですかね。
0302デフォルトの名無しさん2010/05/04(火) 14:18:18
Splitするくらい?
0303デフォルトの名無しさん2010/05/04(火) 14:18:22
ない
みんな作ってるから適当にweb漁ってパクれ
03042872010/05/04(火) 14:56:35
XNAはXBOX360コントローラしか使えないらしいのでだめ
Windows API Code PackにはDirectInputが入っていないらしい
ということでSlimDXを試そうとしたのですが、
配布されているdllをそのまま使おうとするとやはりFileLoadExceptionが出る

ということで原点に返りこれの例外対策をキーワードを変えながらいろいろググって
app.configのstartup にuseLegacyV2RuntimeActivationPolicy="true"を追加すれば回避できる
ことがやっとわかったので当面これで行くことにしました。

ttp://nky-tech-sdt.blogspot.com/2010/02/net-framework-40.html
ttp://msdn.microsoft.com/ja-jp/library/bbx34a2h.aspx
0305デフォルトの名無しさん2010/05/04(火) 15:01:13
対応はしていないが、認識はちゃんとする
ボタン配置がめちゃめちゃなだけ
0306デフォルトの名無しさん2010/05/05(水) 11:06:22
>>292
>>304
扱えるボタンの数ならjoyGetPosExで増えてるよ。
ttp://msdn.microsoft.com/en-us/library/dd757108.aspx
ttp://msdn.microsoft.com/en-us/library/dd757112.aspx

一定時間ごとにjoyGetPosEx呼んで状態変化を見ればいいんじゃないかな。
joySetCaptureも内部的にはタイマでポーリングだったりするんじゃないの?
どうせUSBレベルでは結局はポーリングなんだし。
0307デフォルトの名無しさん2010/05/05(水) 12:25:29
今までプログラミング経験もない今日から始めた超絶初心者なんですが
C#を学ぶのに良いサイト・書籍を教えてください

ちなみに今はここを見てるんですが難しい…
http://ufcpp.net/study/csharp/index.html
0308デフォルトの名無しさん2010/05/05(水) 12:31:27
そこは初心者向けというよりはある程度慣れてきた人が
辞書的に使うところかも

お題に沿ってとりあえずやれる方がいいんだけどなあ・・・
0309デフォルトの名無しさん2010/05/05(水) 12:48:12
十分初心者向けだと思うけどな
0310デフォルトの名無しさん2010/05/05(水) 12:54:59
>>307
僕も学習中ですがとりあえず大まかに学んで、プログラムらしいものを作ってみる方がいいんではないでしょうか?
秀和システム:作って覚えるVisual C# 2008 Express Edition入門
ttp://www.shuwasystem.co.jp/products/7980html/2109.html
これが一番とっつきやすかったです。

逆に日経プログラミングの入門コーナーとか読んじゃダメですね。はしょりすぎてわかりにくい。
プログラミングの雰囲気を味わうにはとっつきやすい雑誌ではあるけど。
0311デフォルトの名無しさん2010/05/05(水) 12:57:29
>>307はプログラマとしての基礎体力がある人向けな気がする
ifって何?くらいのレベルの人のための解説ってC#には少ないと思う
0312デフォルトの名無しさん2010/05/05(水) 13:26:12
>>308-311
レスありがとうございます

うーむ、ifとかさっぱり分からないですねw
入門用の解説が少ないとなるとまずは言語選択から考えなきゃいかんのかなー…
なにかソフトを作るってレベルじゃなくてPC上の操作(ファイルの移動やリネーム)をやりたいだけだから
単純で分かりやすいのが良いんだけれども
0313デフォルトの名無しさん2010/05/05(水) 13:31:15
C#の絵本 とか
0314デフォルトの名無しさん2010/05/05(水) 13:34:04
ifわからないってのなら言語はどれ選ぼうが関係ないw
C#で勉強しろw
0315デフォルトの名無しさん2010/05/05(水) 13:42:47
>>313
C#の絵本とか欲しすぎる…

甘えすぎてた、四の五の言わず勉強します
0316デフォルトの名無しさん2010/05/05(水) 13:52:55
VBだと結構良書があるんだが
C#になると入門者向け良書がビックリするほど少なくなるね
言語初心者は出来るだけGUIを使ったサンプル作成を主眼に置いた
テキスト使った方が視覚的にコードの結果が分かるので良いと思う
GUIの無駄なコードが増えるけどCUIでいきなり勉強してもつまんないし

「Visual C# 2005 [実践]プログラミングテクニック 応用できる基本の書き方」

.NETの代表的な機能をテキストエディタや画像ビューワと言った
具体的なサンプルコード書きながら説明されていてイメージを掴みやすかった
この後にオライリー買い増したけどね
0317デフォルトの名無しさん2010/05/05(水) 16:34:31
独習C#でいいじゃん
0318デフォルトの名無しさん2010/05/05(水) 16:52:43
俺もC++始めたときにC前提にしてるのが多くて躓いたのを思い出した
0319デフォルトの名無しさん2010/05/05(水) 16:53:02
まず軽くCをやったらいいのかもね
0320デフォルトの名無しさん2010/05/05(水) 16:54:54
C++に進まないんだったらJavaのほうが
0321デフォルトの名無しさん2010/05/05(水) 17:12:16
Cのソースを読む機会は多いからCをやっといて損はない。
0322デフォルトの名無しさん2010/05/05(水) 19:31:14
他スレから誘導されてきたんだけど、
C#のおすすめの学習サイトある?
0323デフォルトの名無しさん2010/05/05(水) 19:31:53
MSDN
0324デフォルトの名無しさん2010/05/05(水) 19:35:12
初心者向けのサイトをヨロ
0325デフォルトの名無しさん2010/05/05(水) 19:46:06
@ITに腐るほどあんだろ……
0326デフォルトの名無しさん2010/05/05(水) 19:48:35
後出しで申し訳ないですけど
ブログっぽいサイトや広告が気になるサイトはNGでつ
0327デフォルトの名無しさん2010/05/05(水) 19:54:42
>>307を分かるまで見てろ
0328デフォルトの名無しさん2010/05/05(水) 19:57:30
>>322
そのスレにスクリプト打ち込んでやるから教えろ
0329デフォルトの名無しさん2010/05/05(水) 19:58:37
>>327
かなり内容が充実してそう
読んでみます
ありがとう
0330デフォルトの名無しさん2010/05/05(水) 19:59:29
いやどう考えても誘導元は相談室だろ。
0331デフォルトの名無しさん2010/05/05(水) 19:59:54
>>328
C#, C♯, C#相談室 Part58
http://pc12.2ch.net/test/read.cgi/tech/1269261310/
0332デフォルトの名無しさん2010/05/05(水) 20:01:58
これなんかは〜
http://wisdom.sakura.ne.jp/programming/cs/index.html

APIスレでの評価は良くないが
0333デフォルトの名無しさん2010/05/05(水) 20:09:45
>>332
おっ、そっちのほうがとっつきやすそう
どうもカムサハムニダ謝謝Danke
0334デフォルトの名無しさん2010/05/06(木) 08:53:07
DataTableと連結してるデータグリッドビューのセルに下のように直接値を設定すると
カレントセルを上下に移動しないとDataTableに反映されないんだけど
どうしたらいいですか?

dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value = newForm.textBox6.Text;
03353342010/05/06(木) 10:29:31
dataGridView1とDataTableの間にBindingsourceを入れて
値設定後に、bindingSource1.EndEdit();をすると解決しました。
0336デフォルトの名無しさん2010/05/06(木) 17:07:42
C#っていうのとC#.NETっていうのは別物?
0337デフォルトの名無しさん2010/05/06(木) 17:27:06
>>336
一緒
0338デフォルトの名無しさん2010/05/06(木) 17:35:36
VB.NETの.NETと C#.NETの.NETではニュアンスというか、
多く使われている例の数が違う気がする。 C#.NETって、開発環境指すことあるでしょ。
0339デフォルトの名無しさん2010/05/06(木) 17:38:53
一緒か、ありがと☆
0340デフォルトの名無しさん2010/05/06(木) 18:33:51
そういう言い方をしてたのは2003まで。
0341デフォルトの名無しさん2010/05/06(木) 18:34:40
初期の商品名がC#.NET。
C#.NET(2002) / C#.NET 2003 / C# 2005 Express 〜
0342デフォルトの名無しさん2010/05/06(木) 18:45:40
正式には、「Visual C# .NET」ね。
0343デフォルトの名無しさん2010/05/06(木) 20:08:51
OS/2の頃のIBMが何にでも/2付けてたのと一緒だな
0344デフォルトの名無しさん2010/05/06(木) 20:34:12
.net framework2.0向けにコンパイルされた実行ファイルは
4.0だけがインスコされてるPCでは実行できない?
0345デフォルトの名無しさん2010/05/06(木) 20:39:03
もちろん
0346デフォルトの名無しさん2010/05/06(木) 20:40:02
4.0を使って動くはず。
0347デフォルトの名無しさん2010/05/06(木) 20:48:57
MSは異常なほどに後方互換を重視する会社
0348デフォルトの名無しさん2010/05/06(木) 20:51:53
注:XP以降に限る
0349デフォルトの名無しさん2010/05/06(木) 20:55:05
もともと.NET4はXP以降でしか動かん
0350デフォルトの名無しさん2010/05/06(木) 21:11:36
技術的には互換はあるが、マーケティング上の理由で動かないようにするMS。
0351デフォルトの名無しさん2010/05/06(木) 21:15:48
>>350
サポートのコストばかになんないもん。
Apple なんかほんとバッサリ切るし。
0352デフォルトの名無しさん2010/05/06(木) 21:15:49
注:Zガンダム以降に限る
0353デフォルトの名無しさん2010/05/06(木) 21:18:56
10年サポートしてくれれば充分だろ。
0354デフォルトの名無しさん2010/05/06(木) 21:31:52
なるほどさっきエラー吐いて動かなかったのでびっくりしたがやっぱ動かんのね
readme.txtには.net2.0以降が必要ですじゃなくて
.net2.0が必要ですと書く必要があるな
0355デフォルトの名無しさん2010/05/06(木) 21:35:23
ちなみに、どんなエラーを吐いたん?
0356デフォルトの名無しさん2010/05/06(木) 21:37:56
そっか。app.config で

<configuration>
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
</configuration>

とかってしないといかんのね。
0357デフォルトの名無しさん2010/05/06(木) 21:40:36
>>347
後方重視があるからここまで繁栄してるんだと思うよw
切り捨てする会社なら他も選択肢になるからねえw
0358デフォルトの名無しさん2010/05/06(木) 21:46:47
>>355
おぼえてないけど英語でたぶん.nef framework2.0が必要ですとかそんな感じのダイアログが出た

>356
それやれば動いたのか、どうせなら試せばよかったな、もう3.5sp1まで入れちゃった
0359デフォルトの名無しさん2010/05/06(木) 22:22:17
面倒くさいんで複数並べてるよ。
<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"の指定はいらなくなったんだっけ?
0360デフォルトの名無しさん2010/05/06(木) 22:23:35
というか、プロジェクトのプロパティにターゲットバージョンの設定があるやろが
0361デフォルトの名無しさん2010/05/06(木) 22:32:30
それは最低バージョンの指定だから違う
0362デフォルトの名無しさん2010/05/08(土) 15:29:50
キャストのとき、あるクラスのプロパティの型を取得して、その型にキャストするにはどう書けばいいでしょうか?

int a = 1;

public string b{ get; set; }

b = (string)a; // stringへのキャストの部分を、bの型を取得して指定したい
0363デフォルトの名無しさん2010/05/08(土) 15:51:01
日本語でおk
サンプルだとキャストじゃなくて型変換になってるようだが、
int型をstring型に変換する方法を聞いてるの?
0364デフォルトの名無しさん2010/05/08(土) 15:51:17
>>362
プロパティの型(のTypeオブジェクト)の取得
PropertyInfo.PropertyType

Typeオブジェクトの型へのキャスト
Convert.ChangeType

でも、君は単に何か勘違いしてるだけだと思うなw
コンパイル時に「あるクラスのプロパティの型」は確定してるんじゃないの?
だったら素直にその型へキャストするコード書くだけだと思うけど
0365デフォルトの名無しさん2010/05/08(土) 16:29:22
>>363
型変換とキャストて同じ意味だと思ってました
intをstring〜というのではありません。うまく伝えられなくて申し訳ないです

>>364
>コンパイル時に「あるクラスのプロパティの型」は確定してるんじゃないの?
>だったら素直にその型へキャストするコード書くだけだと思うけど

確かに確定しているのですが、ループで回したいので・・

正直、どう説明したらいいか自分でも分かってないので書いたものを上げました。
http://ideone.com/L97Ih 後出しになってしまいすいません。
詰まってるのは38行目です。
0366デフォルトの名無しさん2010/05/08(土) 16:37:55
PropertyInfo.SetValueの第二引数はどうせobjectじゃん
0367デフォルトの名無しさん2010/05/08(土) 17:16:39
>>366
わざわざキャストしなくてOKてことでいいのでしょうか..

キャストせずそのままで書いてみましたが、foreachが回らないんです。
コメントアウトすると回るんですが。
0368デフォルトの名無しさん2010/05/08(土) 17:21:07
だから、Convert.ChangeTypeじゃダメなの?
0369デフォルトの名無しさん2010/05/08(土) 17:25:36
> 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ってどういうことさ。
0370デフォルトの名無しさん2010/05/08(土) 17:58:38
>>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);
0371デフォルトの名無しさん2010/05/08(土) 19:01:03
p.GetType() == typeof(PropertyInfo)

何がしたいんだ?ちゃんと、MSDN読めよ
0372デフォルトの名無しさん2010/05/08(土) 20:06:15
馬鹿にリフレクションを与えるな
0373デフォルトの名無しさん2010/05/09(日) 00:17:22
引数を書き換えるメソッドって作らないほうがいいんだっけ

void 書き換え(MyClass MC){
MC.val=20;
}

みたいな
0374デフォルトの名無しさん2010/05/09(日) 02:33:35
それって引数を置き換えてるの?
0375デフォルトの名無しさん2010/05/09(日) 04:10:38
おそらく、ガイドラインにあるref/out使うなという話しのことじゃないのか
0376デフォルトの名無しさん2010/05/09(日) 04:19:46
>>373
そういうことやると混乱を招くには招くけど、OOP ってオブジェクトの状態が書き換わっちゃうもんだからねぇ。

MC の中身を書き換えられたくないんなら、MyClass を immutable に作っておくべき
プロパティを全部 get だけにして、コンストラクターでしかメンバーの初期化しないようにしとく)。

MyClass が単純なデータを表すものなんだったら immutable に作っておくこと推奨。
本質的に中身がコロコロ変化するようなものなんだったら、メソッドの中で書き換わることはしょうがない。
0377デフォルトの名無しさん2010/05/09(日) 06:53:01
オブジェクトの書き換えはそんなに前じゃないここか初心者で
すでに質問もでてて理想のコードがでてたような気がする
ただし、数値型を方みてごにょごにょするコードだったけど
0378デフォルトの名無しさん2010/05/09(日) 12:26:27
ごにょごにょとか気持ち悪い言葉遣いだなw
ご〜にょご〜にょごにょヲタクの子〜
0379デフォルトの名無しさん2010/05/09(日) 23:49:45
int.MaxValueがint型ってどういうこと
0380デフォルトの名無しさん2010/05/09(日) 23:51:32
intの最大値がintより大きかったらまずいだろ。
0381デフォルトの名無しさん2010/05/10(月) 00:02:50
>>379
上界(inferimum)ならともかく、最大値が int で何かまずい?
0382デフォルトの名無しさん2010/05/10(月) 00:54:03
上界(upper bound)
下界(lower bound)
上限(supremun)
下限(infimun)
0383デフォルトの名無しさん2010/05/10(月) 01:16:18
>>382
いや、ポイントはそこじゃなくて・・・
といいたいけど、要所で単語間違えた自分も悪いな。
0384デフォルトの名無しさん2010/05/10(月) 10:25:26
MemoryMappedFileてどんなケースで有効な使い方ができるの?
0385デフォルトの名無しさん2010/05/10(月) 10:40:25
マルチスレッドとか
0386デフォルトの名無しさん2010/05/10(月) 10:45:16
>MemoryMappedFile
こんな機能が.net4.0から標準で入るんだね

これって読み込みキャッシュとしては当たり前すぎる機能だけど
書き込みとか変更かけてもOSなりクラスなりがやってくれるので
あればかなり便利だよね
0387デフォルトの名無しさん2010/05/10(月) 12:32:12
便利そうだな。
自前で作ったやつを置き換えようかどうしようか・・・
0388デフォルトの名無しさん2010/05/10(月) 12:53:59
APIのMemoryMappedFileとの整合性はあるんだろうか
0389デフォルトの名無しさん2010/05/10(月) 13:02:19
>>385
あるファイルのReadとかを
物理ファイルから各スレッドが読み出しを行うのではなく
メモリマップドファイルから各スレッドが読みだすってこと?
0390デフォルトの名無しさん2010/05/10(月) 13:05:34
マルチスレッドでどう使うのかはわからんが、プロセス間通信って言えば分かるかな
0391デフォルトの名無しさん2010/05/10(月) 13:06:19
>>389
そうみたいだね
まあ直接読みにいくよりはアクセスロスを減らせるんじゃないかな?
0392デフォルトの名無しさん2010/05/10(月) 13:12:00
>>390
内部的な動きってどうなってるんだろう

ページに対する変更があった場合はストレージへのフラッシュを
行うスレッドとかがいるんだろうか?

フラッシュをメインスレッドでやってると意味ないだろうし
0393デフォルトの名無しさん2010/05/10(月) 13:14:59
>>388
メンバにSafeHandleがあるから単なるラッパーだろう
0394デフォルトの名無しさん2010/05/10(月) 13:21:48
>>392

メモリマップドファイルって、大抵はファイル使わないでメモリ空間で使うっぽい

ファイル使う場合はどうなんだろうな
0395デフォルトの名無しさん2010/05/10(月) 13:31:59
ファイルへはファイルマッピングオブジェクトを明示的にフラッシュしない限り遅延書き込みされる
アクセスはビューを介して行われるので、変更のあったビューだけ記録しておけば現在値を返せるようになっている
0396デフォルトの名無しさん2010/05/10(月) 13:39:47
>>395
じゃああれか
専ブラのようにちまちましたデータを扱うけど最終的にアプリ終了時に
全部書き込まれてればいいような場合だとメモリマップドは有効かな?
0397デフォルトの名無しさん2010/05/10(月) 13:56:30
いやいやいや、、、
メモリマップドファイルってのはメモリ上にエリアを確保して、そのエリアに自分で名前を付ける。
その名前がわかってればどのアプリからでも自由に読み書きできる、って仕組みだから、
物理ドライブに対するディスクキャッシュとはちょっと違うぞ。
ファイルが1つしかないRAMディスクって考えた方がイメージとしては近い。
0398デフォルトの名無しさん2010/05/10(月) 14:17:56
いやいやいや、、、
それは直接ファイルを指定しないからそういうふうに動くように見えるだけだ。
そもそも厳密には、メモリ上に確保するというよりページングファイル上に確保する。
0399デフォルトの名無しさん2010/05/10(月) 14:21:01
>>397
アクセス用の名称さえちゃんとわけておけば複数使えるんじゃないの?
使い方次第では自前でbyte配列に入れてどうこうするより便利そうじゃん
0400デフォルトの名無しさん2010/05/10(月) 14:27:46
下手な比喩ごっこほど有害なものはない
0401デフォルトの名無しさん2010/05/10(月) 14:31:59
いやいやいやいやいやいやいやいやいや、、、、、、、、、

えっ
0402デフォルトの名無しさん2010/05/10(月) 14:47:36
ところでさ
MS製品はなんでインストール先ドライブをC以外にさせてくれないんだ?
ユーザーの自己責任でDとかにさせてよ
0403デフォルトの名無しさん2010/05/10(月) 14:49:21
カスタムインストール選べばたいてい選べるだろ
0404デフォルトの名無しさん2010/05/10(月) 14:49:33
自己責任でいいならファイル移動させて
パスつなぎ直せばいいんじゃない?
0405デフォルトの名無しさん2010/05/10(月) 14:51:36
>>403
選べるのもあるけど.netの基礎部分とかはCじゃないと入らないとか
いろいろあるのよ
0406デフォルトの名無しさん2010/05/10(月) 15:20:08
System32にゴニョゴニョしてるんだから無理というもの
0407デフォルトの名無しさん2010/05/10(月) 15:59:48
読み間違えてるひと多いみたいだから指摘しておく
x メモリマップドファイル
o メモリマップトファイル
0408デフォルトの名無しさん2010/05/10(月) 16:00:59
>>402
そもそもいつまでもOSがドライブレター依存なのをなんとかして欲しいんだがw
0409デフォルトの名無しさん2010/05/10(月) 16:05:06
>>408
最近のWindowsはダイナミックボリュームにすれば
ハードディスクのパーティションからドライブ名ではなく
ディレクトリ名にマウント出来るようになってる

>>402
どうしてもCの容量が足りなくなって困るときは
C:\Program Files\Hoge 以下全部を
別のパーティションに割り当てていけばいい
0410デフォルトの名無しさん2010/05/10(月) 16:32:05
あれ
XP Homeってダイナミックボリュームできないとか調べるとでてくるんだが
管理機能使うとマウントできるなw
これは違うんだっけ?
0411デフォルトの名無しさん2010/05/10(月) 16:36:06
いまどきHDD不足で悩むようなしょぼPCで開発すんなよ
0412デフォルトの名無しさん2010/05/10(月) 17:28:25
こんにちは。
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に表示できません。
よろしくご教示お願いします。
0413デフォルトの名無しさん2010/05/10(月) 17:32:18
VisualC#2010の導入方法について教えてください。
現在、.NET1.1、2.0、3.0、3.5とそれぞれのサービスパック、VisualC#2008が入っています。
このうち、削除する必要があるものはありますか? or 削除したほうがいいものはありますか? or 削除してもよいものはありますか?
ご意見お聞かせください。
0414デフォルトの名無しさん2010/05/10(月) 17:37:02
HTMLを動的に生成するのに良い方法はありますか?

メインPCで簡易ローカルサーバ?(2010のヘルプとかkkcaldのような)を立て
自宅LAN内のクライアントからちょっとした確認と操作をできるようなツールを作ろうと思っています。
HttpListenerを使えば比較的簡単に作れるのを確認したのですが
HTMLを動的に生成するのが結構面倒くさそうです。
今はStringBuilderを使い、生のHTMLを直接作っています。

IIS入れてWeb Developer+ASP.NETにするのが開発は一番楽そうですが
そこまで大袈裟な運用をする予定はいまのところないので。
0415デフォルトの名無しさん2010/05/10(月) 17:38:31
xml+xslt
0416デフォルトの名無しさん2010/05/10(月) 17:39:11
>>413
別に消す必要はないし消した方がいいものもないと思う
.NET4はランタイムから変わってるから
.NET4でしか作らないのなら全部消しても良かったような
0417デフォルトの名無しさん2010/05/10(月) 17:39:32
>>412
pictureBox.ImageをRotateしてpictureBox.Invalidateで再描画要求とか

>>413
別に削除しなくていいし数十Mぐらいけちけちするな
HDD容量に心底困ってるならVC#2008からだけど
それならマイドキュメントとかどうでもいいデータを適当に外部に移動した方がいい
0418デフォルトの名無しさん2010/05/10(月) 17:40:51
>>413
なし、なし、あり

2008は消してもいいけど2010のVSが読めるとは限らない
読めると思うけど、バグがないとも言い切れない

.NET使うのは別にVSに限らないからこの話の流れで消すのは不適切だろう
0419デフォルトの名無しさん2010/05/10(月) 17:41:10
>>414
簡易でも自分でHTTPd作る方がよほど大袈裟な気がせんでもない
0420デフォルトの名無しさん2010/05/10(月) 17:47:01
>>417
ありがとうございます。
できました。
0421デフォルトの名無しさん2010/05/10(月) 18:00:12
このスレもRotateFlipしっちゃうぞ★
0422デフォルトの名無しさん2010/05/10(月) 18:10:27
やってみろよこの野郎ッッッッッッッッッッッッッッッッッッッッ!!
0423デフォルトの名無しさん2010/05/10(月) 19:28:19
妙なテンション
0424デフォルトの名無しさん2010/05/10(月) 19:29:41
classの中に入ってるのがゴローバル変数
メソッドに入ってるのがローカル変数なの?

class Sample{
int a;
void func(){
int b;
}
}

この例だとaがゴローバル変数、bがローカル変数
って感じ?
0425デフォルトの名無しさん2010/05/10(月) 19:31:57
>>424
悪い事言わないから入門書嫁
0426デフォルトの名無しさん2010/05/10(月) 19:33:10
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ [ゴローバル変数]
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
0427デフォルトの名無しさん2010/05/10(月) 19:35:23
ゴロ-バルでもプロパピーでも察してやれよ
0428デフォルトの名無しさん2010/05/10(月) 19:36:26
プロパピーww
ゴローバルじゃなくグローバルね
0429デフォルトの名無しさん2010/05/10(月) 19:47:05
ゴローニャ
0430デフォルトの名無しさん2010/05/10(月) 20:44:52
>>246
念のため言っとくけど解決方法が思い切り間違ってるぜ。
原因は .NET 4のClient Profile をターゲットにしてるからだ。
Client Profileを外せば問題なく参照設定できる。
もちろんClient Profileだけの環境では動作しなくなるけどな。

とはいえ、.NET 4はClient Profileでもフルでも対してサイズが変わらないので、
あえてClient Profileだけを入れるメリットはあまりないと思う。
0431デフォルトの名無しさん2010/05/10(月) 20:54:09
>>410
ややこしいことしないでもジャンクションで十分じゃん。
0432デフォルトの名無しさん2010/05/10(月) 20:58:16
>>414
System.Web.Hosting.ApplicationHost
0433デフォルトの名無しさん2010/05/10(月) 20:59:30
>>415
なるほど。XslCompiledTransformってのがあるんですね。考えてみます。
0434デフォルトの名無しさん2010/05/10(月) 21:27:22
>>429
スプーンおばさん乙
0435デフォルトの名無しさん2010/05/10(月) 21:40:51
質問です

ドラッグアンドドロップの処理を行うアプリを作成しています。
やりたいのは画面のテキストボックスに表示しているファイルパスをドラッグして、
MicrosoftExcel等の既成品の画面にドロップするとそのファイルを表示できるというものを作りたいんですが
ドラッグは出来てもドロップができません。(カーソルがドロップ不可の状態です)

ドロップされる側のアプリを作って確認したところドロップは出来てもDragEnterイベントにはDataObject型で渡されていないようでした。
あと、同じアプリ同士でドロップした場合は何故かきちんと渡されていました。

ドロップする側はMouseMoveイベント内でボタンが押されたらDoDragDropメソッドを作って、
その中にはDataObjectにパスを設定したものを渡しています

長くてすいません何かわかる方がいるなら教えていただきたいです
0436デフォルトの名無しさん2010/05/10(月) 21:44:02
> ドロップされる側のアプリを作って確認したところドロップは出来てもDragEnterイベントにはDataObject型で渡されていないようでした。
勘違いか変なことしてるかどっちかだ
0437デフォルトの名無しさん2010/05/10(月) 22:15:12
つまりドロップが上手くいっていないってことなんでしょうか?

ドロップする側はMouseMoveイベント内でDoDragDropメソッドにDataObjectとenumを渡すだけで良いのですか?
0438デフォルトの名無しさん2010/05/10(月) 22:19:53
C#でも、細かくWindowsの制御したいなら結局Win32の勉強必須なんだね。
なら最初からC++やったほうがよさそう
0439デフォルトの名無しさん2010/05/10(月) 22:22:18
受け取る側がどう解釈するかはまた別の問題だがね。
つかenumて。ちゃんと型名出してくれよ。

ま、なんにせよこれ以上は実際のソースがないとどうにもなんないな。
ソースがあってもどうにかなるとは限らないけど。おいらはOffice持ってないし。
0440デフォルトの名無しさん2010/05/10(月) 22:28:29
>>433
Linq to Xmlで作るのも手。
StringBuilderでHTML作るよりは数億倍良い。
0441デフォルトの名無しさん2010/05/10(月) 22:28:46
頭が凄く良いならC++からでも良い
そうでなければC#からがオススメ
0442デフォルトの名無しさん2010/05/10(月) 22:30:58
なんだその分類は
0443デフォルトの名無しさん2010/05/10(月) 23:02:18
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);
}
}

一応簡単なソースなんですがドロップする側はこれだけで十分なんですかね?
0444デフォルトの名無しさん2010/05/10(月) 23:09:15
FileDropはstring[]
0445デフォルトの名無しさん2010/05/10(月) 23:12:03
唖然
0446デフォルトの名無しさん2010/05/10(月) 23:12:22
くだらなすぎワロタ
0447デフォルトの名無しさん2010/05/10(月) 23:17:19
あ、すいませんありがとうございました
0448デフォルトの名無しさん2010/05/11(火) 07:34:11
クラスや構造体の配列を初期化する場合ってどうかけばいいんだろう
0449デフォルトの名無しさん2010/05/11(火) 09:41:41
クラスは何も悩むことないだろ
フィールドを直接初期化するなりコンストラクタでやればいい

構造体の配列の場合引数なしのコンストラクタでは初期化できない
適当に引数を与えてオーバーロードする
0450デフォルトの名無しさん2010/05/11(火) 10:10:57
つ Struct1 struct1 = new Struct1 { v1 = 1, v2 = 2 };

3.0以降かな

配列も型省略できるようになったんだ

string[] strs = new[] { "あ", "い" };;
0451デフォルトの名無しさん2010/05/11(火) 10:12:39
それの配列だからこうだ

Struct1[] structs = new[] { new Struct1 { v1 = 1, v2 = 2 }, new Struct1 { v1 = 3, v2 = 4 } };
0452デフォルトの名無しさん2010/05/11(火) 10:16:17
俺的には可読性悪すぎだろ と思う
0453デフォルトの名無しさん2010/05/11(火) 10:16:24
>>449>>450>>451
ありがとうございます。
0454デフォルトの名無しさん2010/05/11(火) 10:35:14
>>452
どっからみてもJava並みだよな
0455デフォルトの名無しさん2010/05/11(火) 12:51:10
クラスのときはオブジェクト初期化子使うけど
構造体に対してはコピーが発生するのがどうにも気持ち悪くて使ってない
>>451の場合はstructsへの代入がアトミックだからコピーしなくていい気がするけど
実際どんなコードにコンパイルされるんだろ
0456デフォルトの名無しさん2010/05/11(火) 17:48:20
多分C#の可読性ってVC#の機能含みで考えられてると思う
0457デフォルトの名無しさん2010/05/11(火) 18:04:25
(キリッ
0458デフォルトの名無しさん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 へ変更した場合に限り、表示の継続が可能。

などを見る限り出来そうな感じがします。
しかし、書いてあるように設定してみましたがうまくいきませんでした。

枠線を消しつつウィンドウサイズを変更出来るようにすることは出来ますか?
0459デフォルトの名無しさん2010/05/11(火) 18:15:22
「オブジェクト」と「変数」は違うんですか?

Form frm = new Form();
があったとしたら
frmがオブジェクトですか?それとも変数?
0460デフォルトの名無しさん2010/05/11(火) 18:16:46
>>459
人それぞれかもしれないけど

frm自体はオブジェクト変数
new された段階でオブジェクト変数に実態が入る

とかじゃだめ?
0461デフォルトの名無しさん2010/05/11(火) 18:38:38
>>458
WM_NCHITTEST 関連で何とかなるかも
0462デフォルトの名無しさん2010/05/11(火) 19:16:15
>>461
http://bbs.wankuma.com/index.cgi?mode=al2&namber=25467&KLOG=47
ここでもそういうことが書かれてますね。
どうもC++をやってなかった人間なので、メッセージというのに少し抵抗があって避けたかったのですが、
やらなければいけないみたいですね。がんばってみます。
0463デフォルトの名無しさん2010/05/11(火) 19:48:31
初歩的なことで悪いんだが、C#でGUIつくろうと思ったらvisualC#でwindowsFormかWPF使って作ればいいんだよね?
0464デフォルトの名無しさん2010/05/11(火) 19:57:57
うん
0465デフォルトの名無しさん2010/05/11(火) 21:14:52
.NET FrameworkがいらないSilverlightというのもある
もともとWebのクライアント用の技術だけど最新版はWebを介さずにインストールできたりファイルアクセスもできたり
0466デフォルトの名無しさん2010/05/11(火) 21:24:05
それどこの Activex
0467デフォルトの名無しさん2010/05/11(火) 21:31:12
ActiveXコントロールの上で動く.NETだよ
Flashみたいなもん
ローカルにインストールして権限昇格モードにしない限りは厳しいセキュリティ制限があるので安全
0468デフォルトの名無しさん2010/05/11(火) 22:43:08
Flashに例えられると危なそうだけどな
0469デフォルトの名無しさん2010/05/11(火) 22:56:31
たかがメディアプレイヤーごときになんであれだけ穴を作り込めるのか不思議だ
0470デフォルトの名無しさん2010/05/11(火) 23:01:56
ネット上で直リン禁止な画像を作ったアプリにダウンロードさせたい場合どうしたらいいでしょうか?
C#上のウェブブラウザでHTMLごと表示して、キャッシュからコピーか画像をクリップボードに貼り付けて保存を考えているのですが
キャッシュの取得の仕方、画像のクリップボードへの貼り付け方がわかりません。

0471デフォルトの名無しさん2010/05/11(火) 23:04:52
もうすこしHTTPとHTNLの仕組みを勉強した方がいいんじゃないの

直リン禁止はリファラ、クッキー、hidden属性を見るくらいのパターンしかない
全部WebBrowserなんか使わずに対応できる
0472デフォルトの名無しさん2010/05/11(火) 23:16:34
C#でデータをPOSTしたいんですが
DOBONさんの所を参考にしてもうまくいきません。

POSTするデータの指定が悪いんだと思うんですが
HTMLがどんなデータをPOSTするか確認する方法はありませんか?
0473デフォルトの名無しさん2010/05/11(火) 23:18:25
Wiresharkとか

ソース晒した方が早いぞ
0474デフォルトの名無しさん2010/05/11(火) 23:18:59
>>471
リファラを設定することで無事ダウンロードできました!!
ありがとうございました!
0475デフォルトの名無しさん2010/05/11(火) 23:23:44
//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!日記のソースも見ないと分からないですかね?
0476デフォルトの名無しさん2010/05/11(火) 23:26:56
application/x-www-form-urlencodedとかちゃんと指定してんの?
まずエンコードしてPOSTしてるのか怪しそうだが
0477デフォルトの名無しさん2010/05/11(火) 23:29:27
http://c.peps.jp/pc/new_diary.php?_ipn=pch
見た感じIDとPASS要求してるくらいだから普通にPOSTしてどうなるもんでもなさげ
ちゃんと認証から書け
0478デフォルトの名無しさん2010/05/11(火) 23:31:22
応答のステータスコードはなんと言ってるのか。
0479デフォルトの名無しさん2010/05/11(火) 23:36:20
>>476
DOBONさんのC#でPOSTの一番上を参照しているので
そこら辺は大丈夫です。

>>477
認証とは…?
0480デフォルトの名無しさん2010/05/11(火) 23:36:47
ログインしていないんじゃないの
0481デフォルトの名無しさん2010/05/11(火) 23:38:18
hidden使う直リン禁止ってどういうの?
0482デフォルトの名無しさん2010/05/11(火) 23:39:41
>>479
IDとパスワードをログインページのフォームが指定する通りにPOSTしてセッションクッキーを受け取ることですよ

と言われて理解できないなら諦めるべし
まだ早い
0483デフォルトの名無しさん2010/05/11(火) 23:42:34
ブラウザで認証を含めた通信中のログをWiresharkでとって研究しろ
それしか言えない

あとログは絶対晒すなよw
0484デフォルトの名無しさん2010/05/12(水) 00:12:11
Formを最大化して表示しているのですがWindowsキーやAlt+Tabで
他のプロセスに移動されたり出来ないようにするにはどうするのが良いですか?
Win32APIでキーボードフックする以外に方法があったら教えてください
0485デフォルトの名無しさん2010/05/12(水) 00:15:25
スクリーンセーバーにしてしまう
0486デフォルトの名無しさん2010/05/12(水) 00:38:53
>>484
KeyDownで
e.SuppressKeyPress = true;
とかやればいいじゃないの?試してないから出来るかわからないけど。
0487デフォルトの名無しさん2010/05/12(水) 00:44:52
そんなオレオレなアプリが2つ以上あったらどうなっちゃうことやら。
タスクバーがチカチカしまくり千代子ってか
0488デフォルトの名無しさん2010/05/12(水) 00:58:35
AAAAAのような文字列があった時に、AAABAのように右から2番目のAだけを置換することって出来ますか?
開始から何文字目というような指定ではなく、どんな文字列でもとにかく右から2番目だけ置換というふうにしたいのですが・・
04894882010/05/12(水) 01:02:00
すみません読み返してわかりにくかったので例を・・
右から2番目のAをBに置換
ABCABC→BBCABC
AAAAAB→AAABAB
みたいな感じです
0490デフォルトの名無しさん2010/05/12(水) 01:10:22
ToCharArrayして最後から走査して置換すれば
0491デフォルトの名無しさん2010/05/12(水) 01:16:42
位置決めうちなら走査も必要ないな
0492デフォルトの名無しさん2010/05/12(水) 01:17:53
位置は決め打ってないだろ
0493デフォルトの名無しさん2010/05/12(水) 01:22:21
糞グラマーが書いた

string 対象文字列 = "AAAAAAA"; // 調べる文字列
char cTok = 'A'; // 対象文字
char cRp = 'B'; // 置換文字
int iPos = 2; // 後ろから2文字目

if ( 対象文字列[対象文字列.Length - iPos].CompareTo(cTok) == 0 )
{
 対象文字列[対象文字列.Length - 2] = cRp;
}

koredeii?
0494デフォルトの名無しさん2010/05/12(水) 01:34:25
>>489
string 置き換え前 = "ABCABC";
string 置き換え後 = "";
if (置き換え前.Length >= 2)
{
StringBuilder sb = new StringBuilder(置き換え前);
置き換え後 = sb.Replace('A', 'B', 置き換え前.Length - 2, 1).ToString();
}
でもできそう。試してないけど・・・
0495デフォルトの名無しさん2010/05/12(水) 01:40:42
正規表現とか

string 置き換え前 = "ABCABC";
string 置き換え後 = new Regex(@"A(?=.*A)", RegexOptions.RightToLeft).Replace(置き換え前, "B", 1);
04964882010/05/12(水) 01:57:56
レス下さった皆様ありがとうございます
無事望んだ通りの置換が出来ました
0497デフォルトの名無しさん2010/05/12(水) 05:42:17
>>487
おやじギャグ寒い
0498デフォルトの名無しさん2010/05/12(水) 06:51:10
右から2番目とか言いながら提示したサンプルが左から2番目
寒気がする
0499デフォルトの名無しさん2010/05/12(水) 07:52:39
>>488,489
もう解決したようなのでどうでもいい話だが、
var str = "AAAAAA"; として、

a.Substring(0, a.Length-2)+"B"+a[a.Length-1]
だな。これくらいは1行でできる。
0500デフォルトの名無しさん2010/05/12(水) 07:54:04
ああ、aはstrで置き換えてね。手元では変数aでテストしていた。
0501デフォルトの名無しさん2010/05/12(水) 09:09:56
>>493,494,499は質問者の意図と違うんじゃないの?
それだと、文字列の後ろから2番目の文字が置換されるだけだよ
0502デフォルトの名無しさん2010/05/12(水) 09:10:19
意図分かって無い奴多すぎだろw
0503デフォルトの名無しさん2010/05/12(水) 09:12:10
string str = "ABCABC";
bool looked = false;
for(int i=str.length-1;i>=0;i--)
{
if( str[i] == 'A' )
{
}
0504デフォルトの名無しさん2010/05/12(水) 09:13:13
とちゅうでいったぁあああああ

もういいやめんどい
0505デフォルトの名無しさん2010/05/12(水) 09:17:24
つうかめんどくせぇから

長さのチェック
元のテキストから後ろ2文字までを切り出す
1文字置換するべき文字をつける
元のテキストから最後の1文字だけをくっつける

だけでいいだろ
SubStringとLengthだけあれば十分だ
0506デフォルトの名無しさん2010/05/12(水) 09:21:07
馬鹿ばかり
0507デフォルトの名無しさん2010/05/12(水) 09:44:25
>>501
だって質問者自身が>499のように、
右から2番目の文字を置換するだけでいいって言ってるんだもの。
0508デフォルトの名無しさん2010/05/12(水) 09:50:39
>>489の例見れば右から2番目の文字じゃないのは一目瞭然だろ・・・
0509デフォルトの名無しさん2010/05/12(水) 09:53:04
放っておけ
今までに出した例で出来なかったらもう一回質問してくるでしょ
0510デフォルトの名無しさん2010/05/12(水) 10:04:40
アホな答えばかりだったからあきらめてお礼言って他行ったと思われるw
0511デフォルトの名無しさん2010/05/12(水) 11:00:50
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;
}
}
泥臭く書いてみた。もっと短かく書けたらよろしく
0512デフォルトの名無しさん2010/05/12(水) 11:13:19
>>508

ではなんなのだ?
右から2番目と言って、全然違う例出されても困る
0513デフォルトの名無しさん2010/05/12(水) 11:14:08
よーしパパもベタベタに書いちゃうぞ
エラーチェックは無いけど

string str = "AAAB";
int len = str.Length;
string res = str.Substring(0, len - 2) + "B" + str.Substring(len - 1);
05145112010/05/12(水) 11:17:43
よくみたら495でできてるし、これが一番いいな
0515デフォルトの名無しさん2010/05/12(水) 11:31:55
>>512
文字列中のAの中で右から2番目に出現するAをBにする

だよ
0516デフォルトの名無しさん2010/05/12(水) 11:33:57
迷走ぶりにワロタ
0517デフォルトの名無しさん2010/05/12(水) 11:33:57
>>512
�A �@
ABCABC→BBCABC
↑
右から数えて2回目に出てくるA
0518デフォルトの名無しさん2010/05/12(水) 11:34:57
日本語初心者スレだな。
0519デフォルトの名無しさん2010/05/12(水) 11:36:19
>AAAAAB→AAABAB

この点だけ見ても>>499の回答は導かれませんな
酔ってんのかおめーは
0520デフォルトの名無しさん2010/05/12(水) 11:37:43
498のレスに悪寒を覚えた
0521デフォルトの名無しさん2010/05/12(水) 11:41:13
その辺にしておきなさい。
0522デフォルトの名無しさん2010/05/12(水) 11:45:25
おい!
ここは初心者が初心者にレスするスレだぞ気にしたら負けだ

俺? へっぽ子PGですよ
0523デフォルトの名無しさん2010/05/12(水) 12:03:59
いくらなんでも低レベル過ぎるぞ
495先生以外のレスはなかったことにしとけ
0524デフォルトの名無しさん2010/05/12(水) 17:44:30
あれ、C#のジェネレータって実行を途中で中断できないのかな。
コルーチン的に。
0525デフォルトの名無しさん2010/05/12(水) 17:45:44
yield break; とかそういうことではない?
0526デフォルトの名無しさん2010/05/12(水) 20:48:35
C#のyieldはまんまコルーチンだよ
コンパイラが勝手にステートマシンを作ってくれる
0527デフォルトの名無しさん2010/05/12(水) 20:55:45
コルーチンなんて単語初めて聞いた

ぐぐってみたが便利そうな機能だなー
こういうことも参考書とかに書いてくれればいいのにな
0528デフォルトの名無しさん2010/05/12(水) 20:58:15
コルーチンの一種
0529デフォルトの名無しさん2010/05/12(水) 21:01:57
名古屋名物だよな
05304882010/05/12(水) 21:18:13
なんか荒れてるみたいですみません
文字列にある指定した文字の中で右から2番目にあるものという意味でした
うまく説明できずにすみません(↑もちゃんと説明出来てるか・・
>>495氏のRegexを使って解決することが出来ました
たくさんのレスありがとうございました
0531デフォルトの名無しさん2010/05/12(水) 21:21:29
>>529
それはコーラン
0532デフォルトの名無しさん2010/05/12(水) 21:22:44
>>531
断食して来い
0533デフォルトの名無しさん2010/05/12(水) 22:02:06
>>532
それはラマダーン
0534デフォルトの名無しさん2010/05/12(水) 22:45:35
コチーン
0535デフォルトの名無しさん2010/05/12(水) 23:09:20
10回連続で言ってみ
0536デフォルトの名無しさん2010/05/13(木) 02:00:02
チンコーチンコーチンコーチンコーチンコーチンコーチンコーチンコーチンコーチンコー
0537デフォルトの名無しさん2010/05/13(木) 13:05:07
名古屋チンコー
0538デフォルトの名無しさん2010/05/13(木) 13:05:51
「じゃあここは?」
0539デフォルトの名無しさん2010/05/13(木) 13:30:57
こーひー
0540デフォルトの名無しさん2010/05/13(木) 14:20:27
やったーまんこーひーらいたー
0541デフォルトの名無しさん2010/05/13(木) 14:35:39
すかぽんちれさく
0542デフォルトの名無しさん2010/05/13(木) 14:37:14
Formアプリで全ての全テキストボックスをロードした後特定のテキストボックスをアクティブにして入力待機状態にするにはどうすればいいですか?
0543デフォルトの名無しさん2010/05/13(木) 14:40:20
テキストボックスをロードって何?
最初にフォーカスが当たってるコントロールを設定するのはActiveControlで
0544デフォルトの名無しさん2010/05/13(木) 14:49:41
>>542
TextBox.Select() か Shown イベントで TextBox.Focus() とかいう話?
0545デフォルトの名無しさん2010/05/13(木) 14:50:31
>>542
Form.Shownイベントでフォーカスを設定してやればいいんじゃね?
0546デフォルトの名無しさん2010/05/13(木) 14:51:08
テキストボックスを4つ並べて4個目をアクティブにした場合
FormのLoadとShownのどちらも期待通りの動作
this.ActiveControl = textBox4;

FormのShownの時期待通りの動作
textBox4.Focus();
0547デフォルトの名無しさん2010/05/13(木) 14:51:20
>>544
うは……。1分負け。おみそれしました。
0548デフォルトの名無しさん2010/05/13(木) 15:14:34
できましたありがとう!
0549デフォルトの名無しさん2010/05/14(金) 08:34:48
てす
0550デフォルトの名無しさん2010/05/15(土) 09:21:48
BandObjectを使い、IEのツールバーを作ってみたいと考えています。
下記のように参考にできそうなサイトでは新規作成の画面で
「Windowsコントロールライブラリ」
を選択するよう記載しているのですが、VS2010ではコントロールライブラリがありません。
どのような回避策をとればいいのかわからず困っております。
http://codezine.jp/article/detail/58
http://mobiquitous.com/programming/ietoolbar.html
ご教授願えませんでしょうか。
0551デフォルトの名無しさん2010/05/15(土) 09:55:53
むり
0552デフォルトの名無しさん2010/05/15(土) 22:30:11
「VS2010では」じゃなくて「VC#2010EEでは」じゃね?
コンソールアプリケーションあたりで取り敢えずプロジェクト作って
既存のファイル消してユーザコントロール追加して
プロジェクトの出力をクラスライブラリにすればいいんじゃないかな
0553デフォルトの名無しさん2010/05/15(土) 23:07:08
ご教授をご教示って言い直せば願いを叶えてやる
0554デフォルトの名無しさん2010/05/15(土) 23:10:37
なんでコンソールなんだよ
EEにもクラスライブラリプロジェクトはある
0555デフォルトの名無しさん2010/05/15(土) 23:22:53
あ、そうなんか
0556デフォルトの名無しさん2010/05/16(日) 01:58:40
あ、そうなんよ
0557デフォルトの名無しさん2010/05/16(日) 12:53:00
いまどきコンソールってw
0558デフォルトの名無しさん2010/05/16(日) 12:56:37
俺はよく使うよ。
0559デフォルトの名無しさん2010/05/16(日) 12:58:46
マジカ!!
結構使う人多いのかなぁ…・
0560デフォルトの名無しさん2010/05/16(日) 14:22:15
.batなんかよりいろんな事出来るし
GUIなんか必要ないプログラムはコンソールの方が便利だが
0561デフォルトの名無しさん2010/05/16(日) 17:30:49
>>559
君は変人か?
普通使うっしょ
0562デフォルトの名無しさん2010/05/16(日) 17:57:56
そもそも GUI ってちゃんと作ろうとすると面倒くさいしね。
0563デフォルトの名無しさん2010/05/16(日) 19:46:30
http://dotnetzip.codeplex.com/
ここのライブラリを使ってるかたいますかね?

解凍してそのままファイルを再圧縮する際に登録はうまくいくんだけど
saveでこけるんだけどどうすればいいんだろw
0564デフォルトの名無しさん2010/05/16(日) 20:22:17
簡単なのだとGUIの作成の方が本体より時間かかったりしてね
特にC#は…
0565デフォルトの名無しさん2010/05/16(日) 20:24:56
VC#はGUIが簡単に作れるトップクラスの環境だろ
0566デフォルトの名無しさん2010/05/17(月) 05:48:33
お仕着せのGUIならすぐ作れるけど、ちょっと凝ったことをやろうとするととたんにハマる
0567デフォルトの名無しさん2010/05/17(月) 12:11:44
凝ったGUIってたいてい使いにくいよね
0568デフォルトの名無しさん2010/05/17(月) 12:26:11
逆
0569デフォルトの名無しさん2010/05/17(月) 14:17:00
必要な項目が判り易く並んでいればいいだけ
その必要な項目がツリー的に広がるのであれば難しくなってきたりするよね・・・
0570デフォルトの名無しさん2010/05/17(月) 14:46:17
WPFさんはレイアウト得意らしいけどその辺どうなの
0571デフォルトの名無しさん2010/05/17(月) 14:47:50
>>570
htmlのCSSみたいな感じでGUIをいじれる
0572デフォルトの名無しさん2010/05/17(月) 15:01:16
>>566は従来までのC#なら正しい。まさにそれがC#の欠点の一つだった。
だが、今はWPFがあるので、凝ったGUIを自由に作ることができる。
逆に、WPFでも作れないようなGUIがあるなら教えて欲しいくらいだ。

なお、凝ったGUIはたいてい使いにくいという意見については、
使いやすさに重点を置かずに凝るから使いにくくなるというだけの問題だ。
逆に、凝ったほうが使いやすくなる例は、フォーカス位置の記憶、自動補完、
普通はツリー表示できないアイテムのツリー表示などたくさんある。
0573デフォルトの名無しさん2010/05/17(月) 18:00:27
文字列を正規表現で検索して
それを条件に合わせて置換というのをやりたいんですが

例: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を実行して置換するようなやり方はないでしょうか
0574デフォルトの名無しさん2010/05/17(月) 18:23:03
その何倍もstring生成してるくせにそんなこと気にすんなよ
0575デフォルトの名無しさん2010/05/17(月) 18:29:37
>>573
検索文字列がAB、AAで置き換え文字列がそれぞれCA、DBの時、
前から順に発見しだい置き換えると

ABACDの1文字目にABがあるのでCAACDに
CAACDの2文字目にAAがあるのでCDBCDに

ってなるけど良いのかしら

Match→Replaceの方では、この2回目の置き換えが発生しない
(ABACD→CAACDとなるだけ)
0576デフォルトの名無しさん2010/05/17(月) 18:37:19
>>575
その程度は置き換えた部分スキップするようにすればええのじゃあないか?

結局のところ回答は「そんなもん無い」だから自分でロジック書かないといかんが。
もしくは気にしないか、だな。

100万回実行されるメソッドでもなければ気にしないの選択肢を薦めたい。
0577デフォルトの名無しさん2010/05/17(月) 19:34:40
というか Regex.Replace に MatchEvaluator とる
オーバーロードがあるだろ。それ使えよ
0578デフォルトの名無しさん2010/05/17(月) 19:40:04
凝ったGUIで使いにくい代表例はVista、7、アプリではWMP。
0579デフォルトの名無しさん2010/05/17(月) 20:34:28
iTunesもな
05805732010/05/17(月) 21:15:26
すいません、MatchEvaluatorってのは知りませんでした・・・
これ使ったらReplace1回だけでいけますね

str = reg.Replace(str, new MatchEvaluator(func));

string func(Match m) { string m.Value = s; …… return s; }
0581デフォルトの名無しさん2010/05/17(月) 22:17:25
ここが逆だった
×string m.Value = s;
○string s = m.Value;
0582デフォルトの名無しさん2010/05/17(月) 23:29:31
>>580
C#3.0以上ならラムダ式、2.0なら匿名メソッド使おう。
0583デフォルトの名無しさん2010/05/18(火) 00:56:18
ラムダ式はならべく使わないほうがいい。
0584デフォルトの名無しさん2010/05/18(火) 01:11:50
なんで?
0585デフォルトの名無しさん2010/05/18(火) 01:24:43
>>583
お前のとこアレだろ、社内規約で条件演算子( ? : )禁止とかされてるクチの会社だろww
0586デフォルトの名無しさん2010/05/18(火) 02:06:56
”ら”と”る”はなるべく間違わない方がいい
0587デフォルトの名無しさん2010/05/18(火) 02:10:17
俺がわからないから使わないほうがいい
0588デフォルトの名無しさん2010/05/18(火) 02:10:39
ラムダ式使う奴って馬鹿が多い。
0589デフォルトの名無しさん2010/05/18(火) 02:15:58
必ずしも否定できない
0590デフォルトの名無しさん2010/05/18(火) 03:33:38
使っていいだろ。
外部変数のキャプチャを理解してない馬鹿に使わせるべきではないとは思うが。
0591デフォルトの名無しさん2010/05/18(火) 04:04:03
いまだにラムダ式を使えない馬鹿が多いのか。
0592デフォルトの名無しさん2010/05/18(火) 04:54:10
いまだにラムダ式を使えない天才の方が多い。
0593デフォルトの名無しさん2010/05/18(火) 05:17:49
そもそもラムダ計算の概念が生まれたのって何十年も前じゃないか。
関数型言語に触った事すらない天才ねぇ…?それって何の天才なの?
0594デフォルトの名無しさん2010/05/18(火) 05:31:05
馬鹿は知らなくていいよ
0595デフォルトの名無しさん2010/05/18(火) 06:55:40
名前が悪いかもねぇ。
ラムダ式とか言うからラムダ計算とか関数型言語とか過剰に連想して、アレルギー起こす人がいるような。
そんなたいそうなもんでもないのに。
0596デフォルトの名無しさん2010/05/18(火) 08:17:51
お前ら匿名メソッド使わないのかよ
0597デフォルトの名無しさん2010/05/18(火) 08:57:45
別にラムダ使わなくても十分普通に開発できるしな
ヘタに使われると逆に読みにくいいんだよ
0598デフォルトの名無しさん2010/05/18(火) 09:24:07
少なくとも匿名メソッド使う場面ではラムダ使っていいだろ
0599デフォルトの名無しさん2010/05/18(火) 10:35:31
LINQ(ラムダ式利用前提)なしじゃもうプログラム書けない・・・
0600デフォルトの名無しさん2010/05/18(火) 10:53:36
20年前のポインタに似てるな
"ラムダの使い方"じゃなくてこういう場面ではラムダを使ってこんな風に書けるって説明が
……って普通に転がってるな やっぱ似てないわ
0601デフォルトの名無しさん2010/05/18(火) 11:09:01
ラムダ式はなんとなく速記と同じ匂いを感じる
議会速記もはっきり言って無駄
0602デフォルトの名無しさん2010/05/18(火) 14:22:54
ラムダ式でちゃちゃっと書いて、適当なタイミングでリファクタすればいいだけ
アドインの機能を使えば、「匿名メソッドに名前を付ける」で終了
0603デフォルトの名無しさん2010/05/18(火) 14:24:45
納品した後だったらたとえリファクタでもあんまりしたくねぇな・・・
0604デフォルトの名無しさん2010/05/18(火) 14:28:58
どうでもいいよ
0605デフォルトの名無しさん2010/05/18(火) 14:30:47
と、大学生が申しております。
0606デフォルトの名無しさん2010/05/18(火) 14:34:33
いや、納品する前にリファクタしろよw
てか、それは「適当なタイミング」を逃してるだけじゃん
0607デフォルトの名無しさん2010/05/18(火) 14:36:49
ちゃっちゃと書くんなら最初からちゃんと書くわ
デスマで時間が無い時以外ありえねぇ

そしてそのコードはそのままそのソフト終焉の時か、大規模改修まで放置されるのさorz

0608デフォルトの名無しさん2010/05/18(火) 14:37:26
expressionタイプのラムダはどんどん使っていいと思うよ。
statementタイプの場合はメンバ関数のdelegateにしたほうが見やすいケースが多い。
0609デフォルトの名無しさん2010/05/18(火) 16:27:01
どうでもいいけど、ちゃっちゃとって何?方言?
0610デフォルトの名無しさん2010/05/18(火) 16:30:53
手早く とかになるかな
何気なく使ってるけど方言なのかな?

@関西住みより
0611デフォルトの名無しさん2010/05/18(火) 17:33:10

簡単な文字列をユーザーにGUIから打ち込んでもらい、
その文字列、例えば(a+b)*c
などを数式として、計算して、計算結果を表示する様なプログラムを作りたいのですが、
文字列から数式にスムーズに返還する便利な方法とかってありますでしょうか?
それとも、そんなの無くて、文字列を解釈して、計算するプログラムを自分で作るしか
無いのでしょうか?
だとしたら、かなり大変ですよね。特にかっこの辺り。
こんなプログラム俺に作れるか?とか思ったりしますが。
とにかく知ってる人教えてください。
0612デフォルトの名無しさん2010/05/18(火) 17:35:20
例えばInt型なら
int.TryParse
とかでしらべてみては?

小数とかいるならdecimal.TryParse
0613デフォルトの名無しさん2010/05/18(火) 17:38:21
>>612
それは数字だけの話だよね

数式全部を文字列で与えてそれを解析して計算する感じか
ポケコンなんかの関数電卓みたいな感じか
0614デフォルトの名無しさん2010/05/18(火) 17:40:52
そういうことじゃないだろw

流れとしては、文の解析→ツリー構造化→計算

と言うかスレチ?
0615デフォルトの名無しさん2010/05/18(火) 17:41:56
>>そういうことじゃないだろw
は、612に対してね
0616デフォルトの名無しさん2010/05/18(火) 17:42:58
すまん、勘違いしてた
そりゃ自分で解析するしかないだろ・・・

手軽にやりたいなら
JScript.NETかなんかのEval使うって方法もあるんじゃね?
複雑な式でも解析できるかどうかは知らんが
06176132010/05/18(火) 17:43:23
たぶん
>>611がやりたいのはこういうのだと思う
06186132010/05/18(火) 17:44:42
アドレス忘れた
http://tomari.org/main/java/dentaku_kansuu.html
0619デフォルトの名無しさん2010/05/18(火) 17:52:34
とりあえずスタックを上手く使う必要がありそうだとは思った
06206132010/05/18(火) 17:55:57
そのものずばりの内容がMSにあった
http://msdn.microsoft.com/ja-jp/academic/cc998600.aspx
0621デフォルトの名無しさん2010/05/18(火) 18:30:02
>>611
ポーランド記法を逆ポーランド記法に変換してから、スタックで計算するのセオリーだったような気がする
0622デフォルトの名無しさん2010/05/18(火) 18:43:39
中置記法を、だよね?
0623デフォルトの名無しさん2010/05/18(火) 20:52:40
AST作って再帰的に評価するのが綺麗で簡単でしょ
LINQのExpression Treeを吐くようにすればインタプリタ書かなくて済むし爆速
0624デフォルトの名無しさん2010/05/18(火) 23:36:31
専門学校あたりでやってそうなアルゴリズム
0625デフォルトの名無しさん2010/05/18(火) 23:50:05
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(); }
}
構文木に変換できてしまえば評価自体はこんな感じでとっても簡単わかりやすい
そのための解析は再帰下降パーサとか書くことになって結構難しい
0626デフォルトの名無しさん2010/05/18(火) 23:58:26
>>620
関西大学の講座ですねわかります
0627デフォルトの名無しさん2010/05/19(水) 02:19:42
>>620
1.一番最後の(を探して、その直後の)までの文字列を取り出す。
2.1の結果中の*/を検索して計算。*/が無くなるまで。
3.2の結果中の+-を検索して計算。+-が無くなるまで。
4.1の()内の文字列を3の結果の数字で置き換えて1に戻る。

斜め読みだがこんな処理か。
おっと思ったけど、やらせ方が分かればどおってことないな。
0628デフォルトの名無しさん2010/05/19(水) 03:00:20
CSharpCodeProviderを使ったあまりおすすめしないバージョン。
ttp://ideone.com/2sB1Y
0629デフォルトの名無しさん2010/05/19(水) 10:43:11
ふーん
あっそ
へー
0630デフォルトの名無しさん2010/05/19(水) 11:05:18
MessageBoxで出力した文字列はマウスで選択できないしコピーもできないけど,
これをできるようにするにはどうすればいいでしょうか。
めんどくさがらず新しくFormを作るしかないのかな・・
0631デフォルトの名無しさん2010/05/19(水) 11:12:14
え?Ctrl+C押してみなよ
0632デフォルトの名無しさん2010/05/19(水) 11:25:05
おおっ,文字列選択してなくてもCtrl+Cでコピーできるんですね。
ありがとうございます。

ただ自分も含めてこれでコピーできることを知ってる人は少ないと思うので,
マウスで文字列選択→右クリックメニューでコピー
という手順を踏めるようにしたいのですが,
この場合はやはりForm使うしかないでしょうか。
0633デフォルトの名無しさん2010/05/19(水) 11:27:26
教えてあげりゃいいじゃないの
0634デフォルトの名無しさん2010/05/19(水) 11:28:46
Form使わないでメッセージボックスを選択して右クリックできるようにする方法もあるが
独自Form使うほうがはるかに簡単な。
0635デフォルトの名無しさん2010/05/19(水) 11:39:58
どうもありがとうございます。
Formで対応します。
0636デフォルトの名無しさん2010/05/19(水) 12:40:00
>>631
こんな機能あったのか
知らなかった
0637デフォルトの名無しさん2010/05/19(水) 14:15:09
>>636
お気の毒に・・・
0638デフォルトの名無しさん2010/05/19(水) 14:58:42
>>634-635みたいな無駄なことしなくても、>>633がベストだと思うが?
メッセージの最後に「Ctrl-C でこのメッセージをコピーできます」とか書くだけだろ
0639デフォルトの名無しさん2010/05/19(水) 15:00:45
そのメッセージまでコピーされて邪魔かもw
0640デフォルトの名無しさん2010/05/19(水) 15:10:52
メッセージボックスがコピーできることを知らせるメッセージボックスを出せばいいだろ
0641デフォルトの名無しさん2010/05/19(水) 15:49:14
バルーンを出すとかっこいいよ!
「このダイアログの内容はCtrl+Cでクリップボードにコピーできます」
0642デフォルトの名無しさん2010/05/19(水) 15:51:10
でもたまにコピーできないメッセージボックスがあるんだよな。うっとおしい。
ああいうのはやっぱ自前でフォーム出してんのかね。
しょうがないのでコピット!のお世話になる。
0643デフォルトの名無しさん2010/05/19(水) 18:31:44
ALT+スペースや
メニューバーの上の青くなってるラインとかで右クリックしたときに出てくる

元のサイズに戻す
最小化
最大化
移動
閉じる

みたいなポップアップウィンドウを改変したいんだけど
ツールバーの何をやればいいの?
MenuStripじゃできないよね?
0644デフォルトの名無しさん2010/05/19(水) 18:42:51
自分で考えなさい
0645デフォルトの名無しさん2010/05/19(水) 19:07:56
このスレいらねーじゃん
0646デフォルトの名無しさん2010/05/19(水) 19:38:44
>>643
そういうのは普通には変えられないかもね・・・
Formのプロパティとか調べたけどそれっぽいのがなかった
0647デフォルトの名無しさん2010/05/19(水) 19:48:06
>>643
GetSystemMenuとInsertMenuItem
0648デフォルトの名無しさん2010/05/19(水) 19:53:27
>>647
API使わないと駄目なのか
0649デフォルトの名無しさん2010/05/19(水) 20:00:37
Windows.Formも結局Win32APIで動いてたのか。
0650デフォルトの名無しさん2010/05/19(水) 20:02:49
>>649
そうだよw
所詮はラッパー
めんどくさいことをしなくていいようにオブラートに包んでるだけだよ
ただいろいろ表に出してない部分があってそういうのだけ直接
APIたたいたりするしかないってだけ
0651デフォルトの名無しさん2010/05/19(水) 20:08:17
つまり細かいことをしなきゃいけないときは
[DLLimport]だっけ?
みたいなことしなきゃいけないんだな。
結局C++も必要かぁ
0652デフォルトの名無しさん2010/05/19(水) 20:10:27
>>651
まあAPI名とC#をセットにしてぐぐれば同じようなことやってる人がいるので
それほどでもないね

ただAPI関連で開発したことない人は関数名がわからなくて探すまでが
大変だったりするw
0653デフォルトの名無しさん2010/05/19(水) 20:15:34
やってみたら簡単だった。
http://codepad.org/goVtqqUF
0654デフォルトの名無しさん2010/05/19(水) 22:51:48
IME関連を隠してあるのを見ると殺意がわいてくるんだが
0655デフォルトの名無しさん2010/05/19(水) 23:51:56
早めに通報した
0656デフォルトの名無しさん2010/05/20(木) 00:11:53
ttp://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc
これの和文って何処かにありませんか?
0657デフォルトの名無しさん2010/05/20(木) 00:22:33
君のPCの中に・・・
0658デフォルトの名無しさん2010/05/20(木) 00:49:41
>>656
VisualStudio2008を入れてるなら
C:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\1041\CSharp Language Specification.doc
にある
0659デフォルトの名無しさん2010/05/20(木) 01:08:33
>>658
ありがとうございました!
また質問しに来てあげますね
0660デフォルトの名無しさん2010/05/20(木) 06:51:15
二度と来んな
0661デフォルトの名無しさん2010/05/20(木) 06:56:02
EEだと入らないよね?
β2入れてたときにチェックするんだった。
またPro入れるの面倒くさいな
0662デフォルトの名無しさん2010/05/20(木) 15:01:11
c#ってintをとったら、実際には、2バイトだけでなくて、
その他色々と取られたりするのですか?昔、私が使ったデバッガでは、
2002年のだったかな?
トゥストリングメソッドとか、色々とついて来て、
なんか、一つのintだけで4バイト位とってた気がしましたが。
実際にはどうなんでしょうか?
0663デフォルトの名無しさん2010/05/20(木) 15:18:52
CPUのレジスタサイズに関係なく決まってるよ。
byte = 8 / short = 16 / int = 32 / long = 64
0664デフォルトの名無しさん2010/05/20(木) 15:24:03
v-tableの話をしてるのならintなどのプリミティブ型は特別扱いで、
boxingした場合だけ4byte(32bit)以上の領域がキープされる。
0665デフォルトの名無しさん2010/05/20(木) 15:33:39
結構シビアに管理する必要あるのかな?
0666デフォルトの名無しさん2010/05/20(木) 15:36:05
そんな環境ならCとかC++使った方がええんでないの
0667デフォルトの名無しさん2010/05/20(木) 16:03:44
いや、すんません、ただ、ちょっと気になったもんですから。
普通、intって言ったら16ビットですよね。
なのに、昔のデバッガで見たら、なんか、32ビット位で、そんなの必要ないよ
ってのまでついて来て、
俺は、一応、dos時代からのプログラマーなので、
あの頃の感覚からすると信じられない取り方をしてるなと思ったもので、つい聞いておきたくなっただけです。

まあ、今はメモリ空間だけで昔のハードディスクよりも広大な空間があったりする時代なので、
こう言う取り方になるんでしょうね。

量の節約より、便利さを優先した方が色々と結果として効率が良いと言う時代なんでしょう。

ところで32ビットの内、記憶領域以外の16ビットは何のために使っているのですか?



0668デフォルトの名無しさん2010/05/20(木) 16:09:25
つ663
0669デフォルトの名無しさん2010/05/20(木) 16:10:15
過去の普通だな
現代の普通じゃない
0670デフォルトの名無しさん2010/05/20(木) 16:10:54
Cでintはレジスタサイズなのが一般的で
16bit CPUなら short = int = 16bit, long = 32bit だけど
32bit CPUなら short = 16bit, int = long = 32bitになる。
C#ではCPUに関係なく決まっている。
0671デフォルトの名無しさん2010/05/20(木) 16:21:16
ほへー、そうだったのですか。
わかりました。
0672デフォルトの名無しさん2010/05/20(木) 16:23:42
浦島さんですか。
0673デフォルトの名無しさん2010/05/20(木) 16:43:04
64bitCPUならintも64bitになる理屈か
OSが32bitなら?
0674デフォルトの名無しさん2010/05/20(木) 16:49:19
DOS時代からのヘボグラマか
0675デフォルトの名無しさん2010/05/20(木) 16:57:20
CのintはCPUのレジスタサイズが建前だったが、
大抵の事は32bitで間に合い、
64bitにすると無駄にメモリとバス帯域を圧迫するので、
64bit CPUでのintの64bit化は、あまり行われていない。
0676デフォルトの名無しさん2010/05/20(木) 17:17:56
へぇ
0677デフォルトの名無しさん2010/05/20(木) 17:32:33
色の処理とかbyteで間に合っても型あわせるの面倒だからintで宣言しちゃうよ
0678デフォルトの名無しさん2010/05/20(木) 17:44:37
RGB要素が1バイトだなんて決まってないから、
その方がいいんじゃね?
0679デフォルトの名無しさん2010/05/20(木) 17:48:19
色に関してはケースによるとしかいえないだろ
色深度で1色の表現が違うんだし
0680デフォルトの名無しさん2010/05/20(木) 19:19:20
>>676
真に受けるな
0681デフォルトの名無しさん2010/05/20(木) 19:21:30
ほぉ
0682デフォルトの名無しさん2010/05/20(木) 19:50:03
レジスタサイズとかバス帯域ってのが何のことかよくわからんなw
0683デフォルトの名無しさん2010/05/20(木) 19:52:49
CPUに対して型のサイズが決まってるとか妄言もいい所
0684デフォルトの名無しさん2010/05/20(木) 20:13:02
ちがうんか
まあCPUが違ったら数の範囲レベルで挙動が違うとか、正気の沙汰じゃないもんな
0685デフォルトの名無しさん2010/05/20(木) 20:18:40
ああ、C/C++のはなしね
C#は決まってる
0686デフォルトの名無しさん2010/05/20(木) 20:56:52
CPUに合わせてサイズを決めるなんて常識。
それ無視したらJavaみたいに遅くなる。
0687デフォルトの名無しさん2010/05/20(木) 21:05:14
インスタンスメソッドがインスタンスのメモリ領域取るって…
よく今までそれで生きてこられたな
0688デフォルトの名無しさん2010/05/20(木) 21:07:25
何を言ってんだお前は?
0689デフォルトの名無しさん2010/05/20(木) 22:40:27
ストリームの一部分だけを切り出して別のストリームにしたいんだけど
いったんbyte[]に読みだしてMemoryStreamにする以外にスマートなやり方があれば教えてください
0690デフォルトの名無しさん2010/05/20(木) 22:46:52
>>689
ストリームをメンバに持たせたIStream継承の自作クラスを作成する。
IStreamが要求するメソッド/プロパティをそれぞれ定義してやる。
大抵はメンバのストリームのを加工するだけでいいはず。

オレはそうやって自作アーカイブの内容物のストリームを返すクラスを作成している。
0691デフォルトの名無しさん2010/05/20(木) 22:58:29
>>688
何を言ってんだお前は?
0692デフォルトの名無しさん2010/05/20(木) 23:00:41
問1

レス番号687の書き込みにはレスアンカーが抜けています。
正しいアンカーを書き入れなさい。
0693デフォルトの名無しさん2010/05/20(木) 23:16:00
>>690
IStreamはCOMのインターフェイスだw
.NETではStream抽象クラスな
0694デフォルトの名無しさん2010/05/21(金) 00:11:49
JavaとC#がわかる人がいれば教えてください。

Javaで下記のように書く事がありますが
C#ではこのような書き方はできますか?

また、この書き方ができないとしたら
どうやって似たような事を実現しますか?

HashSet<String, String> = new HashSet<String, String>();
0695デフォルトの名無しさん2010/05/21(金) 00:14:39
HashSet<String, String> hs = new HashSet<String, String>();
0696デフォルトの名無しさん2010/05/21(金) 00:16:31
Dictionary<string, string>
Java のジェネリクスと違ってちゃんと型安全。
0697デフォルトの名無しさん2010/05/21(金) 00:19:36
HashSetなら<String>だろ
バージョン3.5以降なら.NETでもHashSet<T>は使える
.NETのジェネリックに慣れるとJavaのジェネリクスに戻ると発狂する
0698デフォルトの名無しさん2010/05/21(金) 00:25:03
696が正解
読むだけで理解しないバカは死ね
0699デフォルトの名無しさん2010/05/21(金) 00:39:40
HashSetとDictionaryは別物
0700デフォルトの名無しさん2010/05/21(金) 00:45:45
<String, String> ってなってたからハッシュテーブルのことかと思ったけど、
Java でもそれは HashTable だな。
0701デフォルトの名無しさん2010/05/21(金) 00:47:44
結局どれが正解?
0702デフォルトの名無しさん2010/05/21(金) 00:50:23
そもそもjavaとして間違ってるのでわからない
0703デフォルトの名無しさん2010/05/21(金) 00:55:31
まあ、HashSet<T>もDictionary<T, T>もあるよって言っとけばそれでいいだろ。
0704デフォルトの名無しさん2010/05/21(金) 01:01:10
javaのジェネリクスはできそうなことができなくて絶妙にイライラする
理屈ではわかってても直感に反する罠だらけ
0705デフォルトの名無しさん2010/05/21(金) 01:15:00
>>695
ミスです

>>696
ありがとう
0706デフォルトの名無しさん2010/05/21(金) 02:22:21
セーブデータなどの事について知りたいのですが、
方法はいくつかあると思います。
例えば、ファイルにして保存するとか、レジストリに保存するとかですが、
エグゼファイルの中に保存するとかって言う方法は無いのでしょうか?
0707デフォルトの名無しさん2010/05/21(金) 02:32:45
ゲーム作りたいのならHSPでもやっててくれ
0708デフォルトの名無しさん2010/05/21(金) 02:51:19
なぜお前らはすぐそういう反応をする。
パパとママの愛情が足りなかったのか?
0709デフォルトの名無しさん2010/05/21(金) 03:45:52
パパには沢山愛してもらいました
0710デフォルトの名無しさん2010/05/21(金) 05:06:10
2008のプロジェクトを2010に変換したら

相互運用型XXXを埋め込むことができません。
代わりに適用可能なインターフェイスを使用してください。

とかエラー吐くんだけど何じゃこりゃ。
CS1752とかアメ公のMSDNにも載ってないんですけどぉぉぉぉ。
0711デフォルトの名無しさん2010/05/21(金) 05:45:45
DataGridView で、データベースのテーブルを参照する部分を実装しているのですが、
DataGridView上でセルの値を変更した際「Enter」キーを押し、
カーソルが一つ下のレコードへ移動すると、DataRowのカラムの値を書き換えた事を示す
RowStateプロパティにDataRowState.Modifiedがセットされます。

しかし、DataGridView1にユーザーが新しい行を追加できないようにする為に

DataGridView1.AllowUserToAddRows = false;

として、かつデータベースレコードが「1件」の場合、「Enter」キーを押しても
フォーカスカーソルが下へ移動できない為、RowStateプロパティにDataRowState.Modifiedが
セットされません。

プログラム上で DataGridView1 から Form上の別のコントロールへフォーカスを移すと、
RowStateプロパティにDataRowState.Modifiedがセットされましたが、
フォーカスを強制的に動かす意外に、DataRowState.Modified がセットされる
方法は無いのでしょうか?
0712デフォルトの名無しさん2010/05/21(金) 06:39:08
ないよ
0713デフォルトの名無しさん2010/05/21(金) 12:15:44
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の変更になったときの処理
}
0714デフォルトの名無しさん2010/05/21(金) 12:22:14
イベントが発生するのはForm1なんだからハンドラはForm1の方に作る
0715デフォルトの名無しさん2010/05/21(金) 12:24:41
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ってどこにあるんでしょう?
0716デフォルトの名無しさん2010/05/21(金) 12:27:02
>>713
ApplicationSettingsならINotifyPropertyChangedで変更通知するから、
Settings.Default.PropertyChangedイベントに+=する
でe.PropertyNameで目的のプロパティかどうか判断
0717デフォルトの名無しさん2010/05/21(金) 12:28:36
>>715
Please see the ICodeCompiler documentation
VsaEngineなんて.NET 2.0からすでにObsoleteだったはずだが、使ってたの?
0718デフォルトの名無しさん2010/05/21(金) 12:50:31
つうかそれぐらいすぐに探せるだろう・・・・

'Microsoft.JScript.Vsa.VsaEngine' は古い形式です: '"

でググったら一撃じゃねぇか

http://msdn.microsoft.com/ja-jp/library/ee461503.aspx

でこれじゃねぇか

http://msdn.microsoft.com/ja-jp/library/ee461503.aspx#jscript
0719デフォルトの名無しさん2010/05/21(金) 15:04:22
>>710
COM使ってるなら参照などの設定をやり直してみたら
0720デフォルトの名無しさん2010/05/21(金) 15:08:50
>>719
一回まっさらにしても変わらんね
COM型の埋め込みには条件があるみたいでそれに引っかかってるっぽい
素直に旧式の相互運用アセンブリ使うことにするよ
0721デフォルトの名無しさん2010/05/21(金) 15:09:52
あるマスタデータをコレクションに保持しようとしています。

このコレクションは
以下のような構造のマスタデータをメモリに保持します。
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を保持 などは出来るだけしないようにしたいと思っています。

よろしくお願いいたします。
0722デフォルトの名無しさん2010/05/21(金) 17:08:14
>>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)]; }
  }
}
0723デフォルトの名無しさん2010/05/21(金) 17:08:43
たかだか最大一万件ぐらいならどうでもいいんじゃね
0724デフォルトの名無しさん2010/05/21(金) 17:12:20
実際に試してみて遅かったら言ってくれると助かるなあ
0725デフォルトの名無しさん2010/05/21(金) 17:35:50
>>721
string にしなくても Dictionary<ushort, string> で良いんじゃない?
var key = (ushort)(key1 << 8 | key2); _values.Add(key, name)
取り出すとき。
var key1 = (byte)(key >> 8); var key2 = (byte)key;
0726デフォルトの名無しさん2010/05/21(金) 22:02:50
じゃあ俺はキーの方を作るか

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;
0727デフォルトの名無しさん2010/05/21(金) 23:24:34
struct ComplexKey<TKey1, TKey2> : IEquatable<ComplexKey<TKey1, TKey2>>
とか作ったな。
0728デフォルトの名無しさん2010/05/22(土) 01:20:28
System.TimerやSystem.Form.TimerってIntervalがdouble型になってるけど
1μsレベルの精度ってあるん?
0729デフォルトの名無しさん2010/05/22(土) 01:21:50
>>725,726
細かいことだけど、整数型を意味もなくushortやbyteにして使うことはお勧めできないよ。
バイナリファイルみたいに固定バイト長でどうしても読み書きしないといけない場合は除いて。

そういうC言語的な発想は捨ててしまった方がいい。
0730デフォルトの名無しさん2010/05/22(土) 01:25:25
>>728
あるわけないじゃないか
あとFormsのほうのTimerはInt32な
0731デフォルトの名無しさん2010/05/22(土) 01:28:09
>>728
System.Form.Timerは50ms単位くらいの精度しかない。
これは.NETができる以前からのWindowsの仕様。

System.Timers系は十分に正確。
だが1μsレベルかどうかは話は別。一言で答えれば、無い。
そもそもそんな精度をリアルタイムOSでない通常のOSに求めることが間違い。
0732デフォルトの名無しさん2010/05/22(土) 01:47:52
OnPaintイベントを処理中に例外が起きるとバツが表示されて、デバッカーで捕捉できない
非常に不便なのでどうにかしたいんだが、補足する方法はある?
0733デフォルトの名無しさん2010/05/22(土) 01:50:44
catchすればいいじゃん
0734デフォルトの名無しさん2010/05/22(土) 01:55:54
MessageBox
を使って、止めたいところで止めて、表示させたい文字を表示させる事が出来る。
0735デフォルトの名無しさん2010/05/22(土) 02:09:58
なぜか発生箇所で捕捉されない例外ってそういえばあるな。
あれ何だろう
0736デフォルトの名無しさん2010/05/22(土) 02:16:29
この辺かな。
DebuggerNonUserCodeAttribute
DebuggerHiddenAttribute
DebuggerStepThroughAttribute

Paintイベントはフレームワークがイベントを投げる前にtry-catchしてるはず。
0737デフォルトの名無しさん2010/05/22(土) 02:30:02
C#をやってる大学ってないかな。
ある程度レベルの高い国立大学はどこの情報学科もCやC++必須なんだよなぁ。
0738デフォルトの名無しさん2010/05/22(土) 02:33:07
>>737
というか、OS開発でもやるっていうんじゃあるまいし、
いまどきCやC++みたいな開発効率の悪い言語を教えててどうするんだろうか。
もっと良い言語がいくらでもあるんだから選んで使えばいいのにね。
0739デフォルトの名無しさん2010/05/22(土) 02:36:19
教えてる方は割とお年を召してるのでそんな最新言語知らない
0740デフォルトの名無しさん2010/05/22(土) 02:41:32
学生の間はCとJavaを勉強したらいいんじゃない
Javaが出来ればC#に乗り換えるのもそんなに苦労しないでしょ
0741デフォルトの名無しさん2010/05/22(土) 02:41:35
C#で覚えたら悲惨だろ
そんな奴いらねぇよ
0742デフォルトの名無しさん2010/05/22(土) 02:43:51
趣味や日曜プログラマならともかく
職業グラマになるんだったら学部レベルのCやC++くらい
できないとバカにされるからな。

プログラムを組むときは「型」があるから注意してくださいー
int と doubleは違いますよー
同じ処理が何度も出てくるときは関数として処理するといいですよー
演算子は優先順位があるから気をつけましょう

みたいなCだろうがJavaだろうがC#だろうがやらなきゃいけないことしか勉強しないし。
0743デフォルトの名無しさん2010/05/22(土) 02:45:41
うーん
C++はともかくCである必要性はイマイチよくわからん
0744デフォルトの名無しさん2010/05/22(土) 02:48:27
C#には歴史が無い。それが全て。

C/C++よりも、言語仕様、ライブラリ仕様などの些末なことに気を取られて、
肝心のプログラミングに割ける脳内メモリが削られるということも無いのは良い点。
なのに、なぜかC/C++の人の方がプログラミングに絡んだ難しい数学の話とかしてることが多い。
このレベルの違いは歴史だと思うよ。例えば、高度な3D処理などの数学が絡んだ
ライブラリは、C#には用意されてないが歴史あるC/C++には充実している。
だから優秀な人はC#の素晴らしさを理解しつつも、C#よりC/C++を選んでしまうということがままある。
0745デフォルトの名無しさん2010/05/22(土) 02:50:09
ベテランがいないわけだからな
0746デフォルトの名無しさん2010/05/22(土) 02:50:35
>>737
宿題スレの質問者にどこの学校か聞いてみたら
0747デフォルトの名無しさん2010/05/22(土) 03:05:18
日本で売ってるキーボードは
打ちやすさを最優先で作られてるとはいえないqwert配列が大多数
みたいなものだな
歴史あるものが優位になるのは仕方ない
C/C++が優位
0748デフォルトの名無しさん2010/05/22(土) 03:12:31
>>747
プログラミング言語と手で触れるデバイスを一緒にするなよ。
例えばメガネだって基本的な機能とデザインは何十年も替わってないだろ。
0749デフォルトの名無しさん2010/05/22(土) 03:55:38
つ コンタクトレンズ
0750デフォルトの名無しさん2010/05/22(土) 03:59:08
つ レーシック
0751デフォルトの名無しさん2010/05/22(土) 06:55:18
WebBrowserでリンク先のURLを取得するとき
Document.Links[0].GetAttribute("href") だと相対パス表記のリンクは相対パスの取得になりますが
絶対パスを取る方法はないでしょうか?
0752デフォルトの名無しさん2010/05/22(土) 07:00:38
試してないけどこんな感じでできない?
new Uri(webBrowser.Url, relativeUri).AbsoluteUri;
0753デフォルトの名無しさん2010/05/22(土) 07:06:50
HTMLに<base href=があるとそれじゃだめだな
0754デフォルトの名無しさん2010/05/22(土) 08:49:44
>>752
ありがとうございます、それで行けました
base href があるときは全部絶対パスになるみたいなので大丈夫そうです
0755デフォルトの名無しさん2010/05/22(土) 12:06:52
IDEでデザインしたフォームの日本語文字列を
他言語の文字列に置き換える楽な方法はないでしょうかorz
やっぱりIDE利用は諦めて、ユーザーに見せる文字列をコードで逐一リソース文字列から引っ張り出すしかない?
0756デフォルトの名無しさん2010/05/22(土) 12:07:49
誤爆したorz
0757デフォルトの名無しさん2010/05/22(土) 12:18:48
>>755
Formsのフォームで使用する文字列リテラルは、デザイナー上で逐一文字列リソースに切り替えられたはず。
0758デフォルトの名無しさん2010/05/22(土) 12:46:49
>>757
�dクスできると分かったので探したら見つかった
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/314winmultilang/winmultilang.html

既存のフォームについて途中からLocalizable=Trueに切り替えて無問題か確認中なう
0759デフォルトの名無しさん2010/05/22(土) 12:48:44
>>758
質問前に調べろよ。
俺を誰だと思ってるんだw。
0760デフォルトの名無しさん2010/05/22(土) 12:52:44
>>759
シャッチョサンワタシホシイモノアルヨ
0761デフォルトの名無しさん2010/05/22(土) 16:36:19
string[] st = {"みかん","りんご","うさぎ"};
のように、
List<string> lt
に一括して代入する方法を教えてください。
0762デフォルトの名無しさん2010/05/22(土) 16:39:45
C#3.0/.NET 3.5以降ならコレクション初期化子 それ以前ならコンストラクタの引数に配列渡すぐらい
0763デフォルトの名無しさん2010/05/22(土) 17:00:06
>>762
ありがとうございました。
ところで、この
List<string> lt = new List<string>{"みかん","りんご","うさぎ"};
の内容を、ファイルに書き出して保存したいのですが、それにはどうしたらよいでしょう?
0764デフォルトの名無しさん2010/05/22(土) 17:02:50
>>763
ちったあ検索サイト使えよ
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&safe=off&tbs=lr%3Alang_1ja&q=C%23%E3%80%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%80%80%E5%87%BA%E5%8A%9B&aq=f&aqi=g3&aql=&oq=&gs_rfai=
0765デフォルトの名無しさん2010/05/22(土) 17:05:02
ファイルの出力くらいはできます。
一括して、
File.Save(filename, lt,);
とかみたいにできないか、という質問です。
0766デフォルトの名無しさん2010/05/22(土) 17:07:50
>>762
コレクション初期化子はC#3.0のみが必要で、.NET 3.5は関係ない。
その証拠に、Visual Studio 2008以降で.NET 2.0ターゲットでビルドできる。
0767デフォルトの名無しさん2010/05/22(土) 17:08:46
住人を激怒されるような質問方法だな
わざとかもしれんが
0768デフォルトの名無しさん2010/05/22(土) 17:09:07
>>765
XMLSerializerを使え。
0769デフォルトの名無しさん2010/05/22(土) 17:16:39
>>765
>>768のいうのはここを参考にしてね
http://dobon.net/vb/dotnet/file/xmlserializer.html

サンプルコード
http://ideone.com/9LA5g

とその結果
<pre name="code" class="csharp"><?xml version="1.0"?>
<moji xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
<lt>
    <string>みかん</string>
    <string>りんご</string>
    <string>うさぎ</string>
</lt>
</moji>
</pre>
0770デフォルトの名無しさん2010/05/22(土) 17:20:57
xml宣言の位置がおかしいぞw

最近はDataContractSerializer押しの声が大きいな
0771デフォルトの名無しさん2010/05/22(土) 18:28:45
>>768
thanks!!
0772デフォルトの名無しさん2010/05/22(土) 18:39:38
申し訳ありませんがご教授願いたいのですが
ユーザコントロールを作り、ボタンを3つ作ります
□ □ □ のような並びです
ユーザコントロールをフォーム上に貼り付ける
ユーザコントロールのサイズを変更する
その時にボタンの大きさ、ボタンの位置をユーザコントロールのサイズに合わせて
□□ □□ □□
□□ □□ □□
のようにボタンの位置と大きさが比例させたいです。

現在考えている処理としては、ユーザコントロールのResizeイベントで
計算すると言う方法を考えておりますが、
他にも何か良い方法がありましたらご教授お願い致します。
0773デフォルトの名無しさん2010/05/22(土) 18:46:12
>>772
コントロールのサイズは計算するほかにうまい手は思いつかないが
位置についてはAnchorを外すという裏技(?)がある
特に縦位置も横位置もフォームサイズに比例させたいなら、Anchorプロパティーを空にする
0774デフォルトの名無しさん2010/05/22(土) 18:47:27
>>772
えーっと、比例計算(小学校の算数だと思うけど)が分からないってこと?

まあ、MSによると非推奨の方法らしいけどテーブルレイアウトパネルを使えば
ユーザーコードなしでもできると思うけど....
0775デフォルトの名無しさん2010/05/22(土) 18:49:58
解像度がまちまちなのがいけないんや〜。゜。゜(ノД`)゜。゜。

windows上で優れたUIがでないのはこの辺にあると思う
07767732010/05/22(土) 18:53:20
>テーブルレイアウトパネル
そうかその手があったorz
これで大きさも位置も解決できる
非推奨なのはテーブルレイアウトパネルを入れ子にして使うこと、
ジャマイカ
0777デフォルトの名無しさん2010/05/22(土) 20:05:49
>>775
プログラムやめていいんだからね
07787722010/05/22(土) 21:34:03
>>773>>774
ありがとうございます
tableLayoutPanelを使って見た所
自分の設定方法が悪いのかもしれませんが
以下の状態からユーザコントロールを小さくした場合
□□ □□ □□
□□ □□ □□
以下の様に右端のボタンサイズが変化する現象が発生致しました
□ □ □□
□ □ □□
Anchorは全方向チェックしております
全方向空だと小さくした際にコントロールが
ユーザコントロールの外側に隠れてしまう為です
何か他に設定するべき項目がありましたらご指摘お願い致します
07797722010/05/22(土) 21:35:14
連投申し訳ありません
訂正
×以下の様に右端のボタンサイズが変化する現象が発生致しました
○以下の様に右端のボタンサイズが変化しない現象が発生致しました
0780デフォルトの名無しさん2010/05/22(土) 22:17:07
「全方向空」ってどういう意味?
っていうか、ボタンはコンテナ(つまりテーブルレイアウトパネルの各セル)に
Dockさせるんだよ。アンカーを使うんじゃなくて。
07817722010/05/22(土) 22:25:58
>>780
説明不足でした 申し訳ありません
各ボタンはtableLayoutPanelにDockをさせております(設定項目はFill)
tableLayoutPanelのAnchorは「Top, Bottom, Left, Right」に設定しております
0782デフォルトの名無しさん2010/05/22(土) 22:54:10
>>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.が必要のでちうい
07837822010/05/22(土) 23:02:34
アンカーミスったorz >>778宛
あと、語弊がありそうなので補足しとくと、>782でtableLayoutPanelの位置とサイズと言っているのは
デザイナ上で与える位置とサイズの意
>782の1.〜4.を済ませた後、プログラムの実行状態でフォームサイズを変更する分には問題無くボタンサイズが比例する
0784デフォルトの名無しさん2010/05/22(土) 23:06:25
そろそろサンプルコードでやり取りしようぜ
0785デフォルトの名無しさん2010/05/22(土) 23:06:53
ListViewのDetail表示とかDataGridViewもダミーのカラム入れないと
いろいろ不都合があったりするけど、MS様のコントロールってそういうの多いのかね。

っていうか、TableLayoutPanelってそんな仕様だったかな....
07867722010/05/22(土) 23:21:02
>>783
動作確認の結果うまく行きました
詳細な説明ありがとうございました

>>784
自分の理解が遅くスレ消費してしまって申し訳ない
0787デフォルトの名無しさん2010/05/23(日) 01:14:27
>>731
>System.Form.Timerは50ms単位くらいの精度しかない。
>これは.NETができる以前からのWindowsの仕様。
>
>System.Timers系は十分に正確。

っていうほどSystem.Form.Timerと変わるとは思えないんだけど。
0788デフォルトの名無しさん2010/05/23(日) 02:37:29
実際にタイマーの精度が上がるのはVista以降
XPまではカーネルの構造上、どんなラッパーを用意したところで精度は期待できない
0789デフォルトの名無しさん2010/05/23(日) 03:24:22
WebBrowserコントロールで表示したページのソース内を検索したくて、ソースをStringに変換したいのですが、
string souce = WebBrowser.Docment.All.ToString();
これで取り出せませんでした。どうすればいいんですか
0790デフォルトの名無しさん2010/05/23(日) 03:25:58
>>789
デバッガで動きを止めて、アクセスできるプロパティを眺めて考えるんだ。
0791デフォルトの名無しさん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で
読み出しできると思うのでエンコード指定すればいいか
0792デフォルトの名無しさん2010/05/23(日) 03:32:52
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            textBox1.Text = webBrowser1.DocumentText;
        }

ごめん
ゴミが付いたw
0793デフォルトの名無しさん2010/05/23(日) 03:38:33
できましたずっとDocmentの中で探してました
ありがとうございます!
0794デフォルトの名無しさん2010/05/23(日) 03:47:06
Stream対応
http://ideone.com/xicFb
0795デフォルトの名無しさん2010/05/23(日) 21:37:37
Twitterクライアントに興味があってOAuth認証にいきついてふと思った
これってクライアント毎に固有のキーを発行して貰ってそれを使ってアクセスする形みたいだけど
ひょっとしてこのキーをそのまま内部に持ったらまずいのかな?

自分は大々的に配布する予定はないから関係ないけど
誰にも偽装されたくなかったらそれなりの対策を考えるのかな?

0796デフォルトの名無しさん2010/05/23(日) 22:59:13
>>795
それ、俺も悩んだけど隠すのは無理が結論だと思う。
リフレクタで見れば秘密キーすぐ分かるもんね……。
0797デフォルトの名無しさん2010/05/23(日) 23:35:00
AWSのSecreatKeyでも似たような問題にあったなぁ
その部分だけC++で書いて事無きを得たけどね
0798デフォルトの名無しさん2010/05/23(日) 23:41:34
>>797
ちょっと気合いの入った人はディスアセンブルぐらいすぐやっちゃうと思うの
0799デフォルトの名無しさん2010/05/23(日) 23:48:40
さすがにそんな人対策でやってんじゃないよw
規約で見えないように努力すれば配布してよし!ってことになってるから
一応対策はしてますよー的な意味合い

漏れたら漏れたで再取得すればいいだけだしキニシナイ
0800デフォルトの名無しさん2010/05/24(月) 00:03:05
簡単な業務アプリでRSACryptoServiceProviderとか使ってPKI……って
作ったことあるけど完全なのは無理だったよね
.netって生産性高いしC#って言語も素晴らしいと思うけど
リバースエンジニアリング対策がむずすぎる
0801デフォルトの名無しさん2010/05/24(月) 00:07:19
カジュアルハック対策に難読化しとけば十分だろ。
それで足りないような機密情報は絶対にクライアントに渡すな。
0802デフォルトの名無しさん2010/05/24(月) 00:08:29
つかどの言語だろうとリバースエンジニアリングからは逃げられないし、
どうしても知られたくないなら外部に持つしかない。
08037992010/05/24(月) 00:11:27
駄目になったら署名だけ外部鯖に移すし問題ないない
0804デフォルトの名無しさん2010/05/24(月) 00:18:22
簡単な方法がある。
暗号を使うコードと暗号をセットするコードを分離しておいて、
DIで結びつければいい。
0805デフォルトの名無しさん2010/05/24(月) 00:28:00
>>804
イミフ
0806デフォルトの名無しさん2010/05/24(月) 00:32:02
俺も昔は秘密鍵も暗号化させたりと頑張っていたが
結局リバースエンジニアリング対策はほぼ無理なんだよな。
MSも難読化ツールは出しているが、あれでも鍵を隠すことは難しいし。
0807デフォルトの名無しさん2010/05/24(月) 00:34:15
まあリバースエンジニアリングは気にしたら負けだな。
0808デフォルトの名無しさん2010/05/24(月) 00:48:51
>>805
Dependency Injection。依存性注入のこと。
暗号を使っている場所がわかっても
使用する暗号コードを定義してる部分や
取り出す部分がわからなければ問題ない。

これら2つの部分を静的、動的に結合するのがDIの概念。
0809デフォルトの名無しさん2010/05/24(月) 00:50:50
>>808
面白そうだな
簡単ならサンプル書いてくれ URLでもいい
0810デフォルトの名無しさん2010/05/24(月) 00:56:50
dllを参照に入れても.の後にいつものtostringしか出てこないんですがどうしてですか?
0811デフォルトの名無しさん2010/05/24(月) 00:57:47
ちゃんとpublicにしてる?
0812デフォルトの名無しさん2010/05/24(月) 01:06:36
>>808
しかし、その「2つを結合する部分」のコードだって見えるのだから、
所詮複雑度を一段増やしただけの意味しか持たないのでは?
0813デフォルトの名無しさん2010/05/24(月) 01:20:21
>>812
確かに、このアイデアは本質的な改善策ではない。
だからこそ一般的に語られるソリューションではないわけで。
たぶん実務的にはそれぞれのコードをインターフェイス化しておいて、
それを繋ぐ形で実装することになるんじゃなかろうか。
(もちろんDIツール使ってもいいけど)

で、実用レベルとしては呼び出し部をIronPythonで書いてあげるだけで十分だったりする。
あれをリバースエンジニアリングするのはかなり無理(試してみた)。
0814デフォルトの名無しさん2010/05/24(月) 01:20:59
>>804
ようは使用時に結合するわけだから結局は結合時のコードを横から保存して横取りするコードを書けばいいだけ
1900年代のパターン乙
0815デフォルトの名無しさん2010/05/24(月) 01:22:42
DIか…
5年前のJavaやってた時に流行ってたなw
今じゃ考えが廃れて他の物に変わってしまったが
0816デフォルトの名無しさん2010/05/24(月) 01:26:12
>>814
で、それを.NET Frameworkに対して可能なんかね、それ。
0817デフォルトの名無しさん2010/05/24(月) 01:29:21
>>808
>暗号を使うコードと暗号をセットするコードを分離
ここが意味不明なんだよ
何を守りたいのかさえわからない
DIの概念ぐらい今時小学生でもわかるわ
0818デフォルトの名無しさん2010/05/24(月) 01:35:20
結局のところ、実行時はバイナリコードになっちゃうんだから、メモリダンプを取って
逆アセンブルすることは技術的には可能。
あとはコストの問題よね。

というか、隠蔽に依存したセキュリティは無意味って、今時専門学校出の新人でも知っとるわ。
0819デフォルトの名無しさん2010/05/24(月) 01:50:46
何万回もループするなかで
string a = "b";
と宣言付きで書く場合はメモリがやばくならないですか?
ガベージコレクションがよくわかってないので不安です
0820デフォルトの名無しさん2010/05/24(月) 01:56:32
stringは変更不可なクラスなので単純な代入でコピーやインスタンスの生成は発生しない。
0821デフォルトの名無しさん2010/05/24(月) 01:56:34
>>819
そのくらいなら心配ないでしょ
0822デフォルトの名無しさん2010/05/24(月) 01:56:45
>>819
リテラルを格納してるだけなら最適化が効くかも。
一応、const 付けとけ。

最適か効いてなくて毎度 new されてる場合、
まあ、GC が働いてる分にはメモリ不足になることはない。
無駄な GC 働く分パフォーマンスは落ちるんで、ループの外に出せるならその方が無難だけど。
0823デフォルトの名無しさん2010/05/24(月) 01:56:55
火病ってるやつがいるな。もっと建設的な議論すればいいのに。

>>819
メソッド内のローカル変数はスタックに積まれるので基本的には問題ない。
ただし文字列変数は各言語、.NETやJavaの場合は仮想マシンのレベルで
特別な扱いをされることが多いのでこの限りではない。

延々と文字列を結合していくならば結合結果の文字列データより多くのメモリを消費することはありうる。
それ以前にstringを生で使うと遅いのでStringBuilderを使うことになるだろうが。
0824デフォルトの名無しさん2010/05/24(月) 02:02:11
>>823
>火病ってるやつがいるな。もっと建設的な議論すればいいのに。
だねえ〜
まあ便所の落書きなので荒れるのも仕方ないけど
0825デフォルトの名無しさん2010/05/24(月) 02:14:03
つまりガベージコレクションは不要になった最速地点で解放されるのではなく
解放される前に積み重なっていくような数万回newした場合はメモリの危険があるかもしれないという考えは
捨ててもいいということですか?
これを潔癖にクリアするにはusingで宣言を囲んでその外でループするかループ外に宣言するしかないんでしょうか?
0826デフォルトの名無しさん2010/05/24(月) 02:17:08
>>825
PC上でやる上ではメモリの空きについては気にしなくていいよ
むしろ>>823>>824あたりが言ってるように速度面かなあ

差し支えない範囲で気になる部分のコードをさらしてみなよ
>>1のコード晒しサイト使って
0827デフォルトの名無しさん2010/05/24(月) 02:27:56
>>825
C/C++で有効な高速化手法と.NET(C#)で有効な高速化手法はかなり違うので注意。
例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、
カウンタ(int i)の判定条件はローカル変数で受けるよりも
毎回arr.Lengthと直接比較した方が却って動作が早くなる、とか。

総じて素直に書いた方が却って早くなる。
基本的には素直に書いてみて、遅いようなら高速化手法を考える程度でいいはず。
0828デフォルトの名無しさん2010/05/24(月) 02:36:22
> 基本的には素直に書いてみて、遅いようなら高速化手法を考える程度でいいはず。
これは言語に係わらない基本だろう
0829デフォルトの名無しさん2010/05/24(月) 02:39:41
>>822
constが無理な場合があるとして、そのアプリでメモリ不足になることはなくても
他のアプリのメモリ不足を考慮してるとはおもえないんですが、
GCには完全に頼れないから外で宣言するとして
その分岐点は何ですか?GCに頼るのは動けばいいやプログラミングなんでしょうか?
0830デフォルトの名無しさん2010/05/24(月) 02:46:19
おいおい、今時のPCで他のアプリのメモリ不足とかなんの話だよ
0831デフォルトの名無しさん2010/05/24(月) 03:23:16
>>830
数ギガ単位のファイルを扱う用途だと問題になる
0832デフォルトの名無しさん2010/05/24(月) 03:41:48
>>831
数ギガ単位のファイルをメモリに読み込むのか?それってGCあってもなくてもメモリ不足になるだろw
0833デフォルトの名無しさん2010/05/24(月) 04:19:22
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;
}
0834デフォルトの名無しさん2010/05/24(月) 04:24:10
>>833
char[]は外で一回だけ作るようにした方が検証として正しい気がする
0835デフォルトの名無しさん2010/05/24(月) 06:09:42
ループの中でhoge[i]のプロパティなりメソッドなりに何回もアクセスする場合は
毎回インデックス位置を計算されたりインデクサにアクセスされるんじゃないかと思って
そのまま書かずに、一旦
var item = hoge[i];
みたいに保存してから使ってるんだけどやらなくてもいいの?
最適化ONにしたら勝手にキャッシュしてくれる?
0836デフォルトの名無しさん2010/05/24(月) 06:19:24
hoge[i]をキャッシュしても誤差程度の違いしかない。
最適化はプロファイル取ってからボトルネックになってる箇所を重点的にやれと
0837デフォルトの名無しさん2010/05/24(月) 08:57:14
string a = "b"; の話、今コンパイル結果の IL 見てみたけども、
ldstr "b" って命令になってるな。
new されてない。JIT 結果もたぶん、定数領域のポインター代入だけになると思う。
GC 働かない。
0838デフォルトの名無しさん2010/05/24(月) 09:02:16
>>837
そりゃあそうだ。stringはimmutableなオブジェクトだから
定数リテラルをそのまま指せるし。
あくまで文字列演算を大規模にループでおこなうという意味で書いてたんだが、
string a = "b";
を繰り返すことだけを質問してたの?
0839デフォルトの名無しさん2010/05/24(月) 09:08:15
>>838
一番大元の質問が、ループ中の string a = "b"; はどういう結果招きますか
1. GC かかって大変になる?
2. GC かかった場合のパフォーマンスってどうなの?他のアプリに迷惑かけない?
だったかと。
0840デフォルトの名無しさん2010/05/24(月) 09:12:07
これもテンプレ質問だよなー
完成して実用に耐えなかったら言えと
空が落ちてくる心配をした昔の人みたいだよ
0841デフォルトの名無しさん2010/05/24(月) 11:49:07
XElementを初めて使ってみた
なんだこれ
なんでXmlDocumentなんて使ってたんだ
0842デフォルトの名無しさん2010/05/24(月) 12:25:31
>>840
趣味マか?
0843デフォルトの名無しさん2010/05/24(月) 12:36:28
プロが初心者スレで質問してたら笑うだろ
0844デフォルトの名無しさん2010/05/24(月) 12:47:05
いえてるw
0845デフォルトの名無しさん2010/05/24(月) 13:19:54
身分がプロでも心が主人公ならば問題ありません(青春18きっぷ的に)
0846デフォルトの名無しさん2010/05/24(月) 13:44:10
プロと初心者は相容れない概念じゃないな
0847デフォルトの名無しさん2010/05/24(月) 14:10:47
じゃないな
0848デフォルトの名無しさん2010/05/24(月) 14:11:38
じゃね
0849デフォルトの名無しさん2010/05/24(月) 14:32:26
じゃ
0850デフォルトの名無しさん2010/05/24(月) 14:33:10
>>GCに頼るのは動けばいいやプログラミング
>>GCに頼るのは動けばいいやプログラミング
>>GCに頼るのは動けばいいやプログラミング
0851デフォルトの名無しさん2010/05/24(月) 14:37:20
箱の中で何やってんだかw
C#では戦争も終わらないし食糧不足も解決できない
そもそもプログラムで解決できること自体が箱の中の事象でしかない
趣味もプロも糞もない
どこからが企業の戦略なのかを読み違えるのは良くない
0852デフォルトの名無しさん2010/05/24(月) 14:46:07
動けばいいやの前に動くもの作ってみろよ
口だけが
0853デフォルトの名無しさん2010/05/24(月) 14:48:35
たとえば、ソフトを作っても何も生み出さない。株の売買が仕事だと思ってるのと同次元。
生み出しているものは失業率の増加と貧富の格差でしかない
人間が時間と交換に取り組むようなことじゃない
これを踏まえた上で初心者スレであえて聞いているのでは?
0854デフォルトの名無しさん2010/05/24(月) 14:50:21
そのうち人間の労働時間は一日4時間程度になる
0855デフォルトの名無しさん2010/05/24(月) 14:59:42
読み取り専用のプロパティが定義されてる基底クラスを継承したクラスに、
同じ名前のプロパティで書き込みを可能にすることって出来ないのかな
0856デフォルトの名無しさん2010/05/24(月) 15:05:46
>>853
一体何の話してんの?
0857デフォルトの名無しさん2010/05/24(月) 15:11:45
痛い子にいちいち構うなって
0858デフォルトの名無しさん2010/05/24(月) 15:28:33
>>855
override new
すればいけるが、そんなインターフェイスはお勧めできないな。
0859デフォルトの名無しさん2010/05/24(月) 15:58:20
>>858
やらないほうがいいから出来ないってことか。ありがとん

>>856
分からないなら黙ってればいいのに
0860デフォルトの名無しさん2010/05/24(月) 16:03:21
>>856
彼によれば2chの初心者質問スレを荒らすのが、人間が時間と交換に取り組むようなことらしい。
0861デフォルトの名無しさん2010/05/24(月) 16:06:32
ごめんなさい以下は無視してください

>>>>856
>>分からないなら黙ってればいいのに
0862デフォルトの名無しさん2010/05/24(月) 16:10:55
嵐だと無職は引きこもるしかないだろうからな
0863デフォルトの名無しさん2010/05/24(月) 16:26:23
>>861
アンカー先もろくにみないで書いたんだろうが
そういう間抜けなとこを無視はできないな
0864デフォルトの名無しさん2010/05/24(月) 16:28:35
( ゚д゚ )
0865デフォルトの名無しさん2010/05/24(月) 17:00:20
VSC2008で開発しています。
webBrowserについて質問です。
Form1にwebBrowserを設置して使うと、普通はa hrefタグの場合はクリックでそのウィンドウ内でリンクを開きますが、new windowなどのタグにかかわらず、リンクをクリックしたら、別のForm2を開くようにしたいです。
どのようにしたらよいか皆目見当がつかないので、どなたかご教示いただけないでしょうか。
0866デフォルトの名無しさん2010/05/24(月) 17:03:01
NewWindow2 またはNewWindow3
0867デフォルトの名無しさん2010/05/24(月) 17:10:02
>>865
http://cs2ch.blog123.fc2.com/blog-entry-68.html
サンプルコードの113行〜139行までがそれぽく使えるかな
System.Diagnostics.Process.Start(link);
のところをForm2なりを起動するコードに書き換えて置けばいいかも
0868デフォルトの名無しさん2010/05/24(月) 17:34:58
>>867
HtmlElement clickedElement = this.Document.GetElementFromPoint(e.MousePosition);
'Form1.Form1' に 'Document' の定義が含まれておらず、型 'Form1.Form1' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
と出るんですが、どうしたらいいですか?
0869デフォルトの名無しさん2010/05/24(月) 17:37:26
そのサンプルコードはwebBrowserクラスを継承した別クラスにしてあるから・・・
というかその辺も説明しないと駄目なレベルなの?
0870デフォルトの名無しさん2010/05/24(月) 17:43:36
thisをWebBrowserのインスタンスに変えて味噌
0871デフォルトの名無しさん2010/05/24(月) 17:49:26
この調子だとイベントハンドラの設定も説明しないと動かないんでけど〜
とか言ってきそうだな
0872デフォルトの名無しさん2010/05/24(月) 17:57:19
「皆目見当がつかない」というのはそういうことかとw
0873デフォルトの名無しさん2010/05/24(月) 18:04:41
まあできないならできないで早めにギブアップした方がいいぞ
0874デフォルトの名無しさん2010/05/24(月) 18:09:11
諦めたら試合終了だけどまずルールブックよめ
0875デフォルトの名無しさん2010/05/24(月) 18:17:27
ですね
0876デフォルトの名無しさん2010/05/24(月) 18:30:02
アマゾンの出品価格更新がつらいので自動で更新したいんですが、
テキストボックスに金額入れて更新ボタン押しても変更はありませんとでるんですが
DomElement.InnerText と SetAttribute のどっちで入力しても変更できません
どうなってるんですか?
0877デフォルトの名無しさん2010/05/24(月) 18:30:54
起動してから一番最初の処理をしたいんだけど、
コンストラクタからだと、まだ、他のコントロールの作成が終わって居なくて、
処理できないって時は、どうしたら一番自然ですかね?
0878デフォルトの名無しさん2010/05/24(月) 18:32:30
InitializeCompornetの後に書けばいいんじゃね?
0879デフォルトの名無しさん2010/05/24(月) 18:38:25
その場所だと、
this.ActiveControl.TabIndex
このプロパティにアクセスできないんですよね。

起動した直後に、アクティブコントロールは設定されてて、実際、文字入力できるように
カーソルが出てくるのにな。
なんでだろ?

0880デフォルトの名無しさん2010/05/24(月) 18:40:08
表示される前にアクティブもクソも

いや何でもないです
0881デフォルトの名無しさん2010/05/24(月) 18:41:12
フォームだったらShownでいいんじゃね
0882デフォルトの名無しさん2010/05/24(月) 18:42:58
>>876
どうなってるといわれてもわからねえ

>>877
>>878のいうようにコンストラクタの中で呼び出してる
InitializeComponent();
の後ならデザイナーで貼り付けたコントロールの実体はできてる
呼び出し前だとできてない
でもこのタイミングだとうまくいかない場合は
Loadイベントかその後のShownイベントとかでやるといいかも
0883デフォルトの名無しさん2010/05/24(月) 18:44:07
>>882
あなたには言ってません
0884デフォルトの名無しさん2010/05/24(月) 18:48:34
おれもわからねえ
0885デフォルトの名無しさん2010/05/24(月) 18:49:03
エスパーでお願いします!
0886デフォルトの名無しさん2010/05/24(月) 18:50:48
HtmlElementで取り込んだ後、値を変更したら戻さないとだめじゃね?
0887デフォルトの名無しさん2010/05/24(月) 19:00:21
>>882
ありがとうございました。
0888デフォルトの名無しさん2010/05/24(月) 19:00:24
>>870
できました。ありがとうございます。
で、次のようにして、ブラウザでリンクをクリックしてみましたが、

if (link != null && link != "")
{
MessageBox.Show("test");
System.Diagnostics.Process.Start(link);
}
普通にリンクをおなじウィンドウ内で開いてしまいます。
MessageBoxも表示されないということは、この
void WebBrowserExDocument_Click(object sender, HtmlElementEventArgs e)
のイベントハンドラをどこかで作る必要があるのかなと思うのです。
[デザイン]のwebBrowserでイベントハンドラを見ても、DocumentConpletedとかはあるのですが、それらしいものがありません。
どのようにしたらよいですか?
0889デフォルトの名無しさん2010/05/24(月) 19:51:44
>>888
ご所望の動作ぽいのはできた
http://ideone.com/uFKR0

でもなぜかイベントが3回呼ばれるw
0890デフォルトの名無しさん2010/05/24(月) 20:27:56
クリップボードにttp://***.com/のような文字列があった場合、ttpをhttpに書き換えてくれるような
ツールを作りたいのですが、クリップボードの内容の変更を検知するにはどうするのがいいのでしょうか?
0891デフォルトの名無しさん2010/05/24(月) 20:32:09
>>890
クリップボード C#
でググれ
0892デフォルトの名無しさん2010/05/24(月) 20:32:35
タイマー使って一定サイクルで監視して・・・とかになるんじゃないの?
イベントがあったかはわからんw
0893デフォルトの名無しさん2010/05/24(月) 20:40:47
クリップボードビューアチェイン
08948892010/05/24(月) 21:06:50
思い出した
DocumentCompletedだとメインのhtmlで1回、jsがあればその個数分イベントが起きるんだった
Navigatedだと多分1回になると思う
0895デフォルトの名無しさん2010/05/24(月) 21:21:00
>>890
確かイベントがあったはず
Clipboard C#でくぐれ
0896デフォルトの名無しさん2010/05/24(月) 21:28:47
>例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、
でたらめもいいとこ。
0897デフォルトの名無しさん2010/05/24(月) 21:29:57
>>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だとだめなんです。
なぜでしょう?
0898デフォルトの名無しさん2010/05/24(月) 21:30:29
>>896
コードで示せ
0899デフォルトの名無しさん2010/05/24(月) 21:33:35
>例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、
必ずしも間違いじゃないよ
forだと回し方によっては最適化が効かないけどforeachは確実に最適化される
09008892010/05/24(月) 21:34:11
gmailはajaxだからなあ
2chの場合js使ってるといっても基本的にはhtmlよりのことしかしてないはず
0901デフォルトの名無しさん2010/05/24(月) 21:35:41
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;
}

どっちが速いん
0902デフォルトの名無しさん2010/05/24(月) 21:37:46
forとforeachは途中でエラーが出たときに安全かどうかも違うのかな
0903デフォルトの名無しさん2010/05/24(月) 21:38:19
GMailのフル機能版じゃなくて、モバイル向けのやつでやってみれば?
09048892010/05/24(月) 21:38:41
>>901
それなんかおかしくね?
0905デフォルトの名無しさん2010/05/24(月) 21:45:59
for( int i ; i < iForeach.Length; i++)
{
ibuff += iForeach[i];
}

こうか。これだとForの方が遅い気はする
0906デフォルトの名無しさん2010/05/24(月) 22:01:17
IL見りゃ一目瞭然。コード示せとか、なに馬鹿言ってんだか。
0907デフォルトの名無しさん2010/05/24(月) 22:02:31
実際>>901のforeachと>>905のforはほぼ完全に同じコードになる
forはfor(int i = 0; i < iForeach.Length; i++)の形が崩れると途端に遅くなる
基本的に自由度が低い方が最適化しやすいんだよ
0908デフォルトの名無しさん2010/05/24(月) 22:09:24
>>890-893
昔、ClipboardWatcherとか作ったなぁ
SetClipboardViewerとNativeWindow使うやつ
0909デフォルトの名無しさん2010/05/24(月) 22:19:41
>>906
一目瞭然だから突っ込まれてんだろ
馬鹿か
0910デフォルトの名無しさん2010/05/24(月) 22:37:58
こんな感じのコードで試してみた。

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)");
0911デフォルトの名無しさん2010/05/24(月) 22:39:24
結果

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のほうが少し速いようだ
0912デフォルトの名無しさん2010/05/24(月) 22:44:34
i < SIZEはダメ
forは絶対にfor(int i = 0; i < array.Length; i++)の形を崩してはいけない
0913デフォルトの名無しさん2010/05/24(月) 22:49:11
SIZEを外に出すと配列の範囲チェックで最適化効かなくなるからね。
0914デフォルトの名無しさん2010/05/24(月) 22:50:38
効かなくなるね
0915デフォルトの名無しさん2010/05/24(月) 22:54:47
なるね
0916デフォルトの名無しさん2010/05/24(月) 22:55:44
なるね
0917デフォルトの名無しさん2010/05/24(月) 22:57:02
array.Lengthにしても結果はほとんどかわらなかった。
SIZE=100のとき
00:00:00.0000023(for)
00:00:00.0000006(foreach)
0918デフォルトの名無しさん2010/05/24(月) 22:58:02
forの方が早いって言ったら馬鹿にされたので逆恨みして荒らしてるのか
0919デフォルトの名無しさん2010/05/24(月) 22:59:39
>>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という名前しか入らないのです。
0920デフォルトの名無しさん2010/05/24(月) 23:00:35
最低だな
0921デフォルトの名無しさん2010/05/24(月) 23:02:41
100は少なすぎる
forがforeachを超えられないのは事実だけど
きちんと書けば同じコードになるのも事実なので絶対にそんなに差は出ない
0922デフォルトの名無しさん2010/05/24(月) 23:09:56
なんとなく俺もやってみた。

俺の環境だと何か 10000 以上の配列に対しては
for の方が何故か早かった。
それ以下はforeach
まあ、(1000, 10000)の範囲内で正確に測ってみないと具体的な長さはわからんが。
0923デフォルトの名無しさん2010/05/24(月) 23:14:29
>>919
その辺になってくるとスレチだからJavascriptやhtml関連を勉強した方がいいよ
その辺を理解してないと無理
0924デフォルトの名無しさん2010/05/24(月) 23:46:09
もうだめ(´・ω・`)
0925デフォルトの名無しさん2010/05/24(月) 23:49:12
よしあきらめろ
そして二度と来るな
0926デフォルトの名無しさん2010/05/25(火) 07:18:28
C#の勉強を昨日始めた者です。
Javaとよく似てるので順調に参考書を半分ほど読み進めましたが、
下のサンプルの実行結果が納得できません。
09279262010/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();
}
}
}
09289262010/05/25(火) 07:22:23
実行すると、

○
○○
○○○
○○○○
○○○○○
○○○○○○
○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○
○○○○○○
○○○○○
○○○○
○○○
○○
○

と表示されます。
丸が増えていって8つに達するのは理解できますが、
その後なぜ減っていくのでしょうか?
0929デフォルトの名無しさん2010/05/25(火) 07:25:36
Stack(0); の動作は

valueを0で初期化
valueに1を足し、1にする
○をvalue個(1個)出力する
Stack(1);を実行する
○をvalue個(1個)出力する

だから
これを続けていけばそうなる
0930デフォルトの名無しさん2010/05/25(火) 07:51:49
>>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)の続き、というように・・・。
難しいですね。
0931デフォルトの名無しさん2010/05/25(火) 07:58:13
>>927
そりゃStack(int value)が受け取ってるのは値渡しされたコピーだからでしょ
0932デフォルトの名無しさん2010/05/25(火) 07:59:34
>>930
難しくないだろw
0933デフォルトの名無しさん2010/05/25(火) 08:02:36
>>930
ブレークポイント設定して動かしてみ
よく分かるから
0934デフォルトの名無しさん2010/05/25(火) 08:04:50
Javaはほとんど知らないんだけど、intも参照渡しされたりするのか?
0935デフォルトの名無しさん2010/05/25(火) 08:07:47
>>899
状況によってというか処理によってはそうなりうることはわかってる。

でも
>例えば配列の列挙はfor文よりforeachの方が圧倒的に早いとか、
「配列の列挙」にもいろいろあるかもしれんが、普通に読んだら普通の列挙処理だろ。

まあ試してみればわかるけど、誤差レベル。
圧倒的なんてことにはならない。

>>917
100回て、今どきのマシンなら数100ナノ秒以内で終わるぜ。
ちなみにStopwatchで時刻を取得するのにかかる時間は目安としてマイクロ秒オーダだw

あと極端に差があるなら測る順番を変えてみ、逆転したりするから。
09369262010/05/25(火) 08:10:55
>>931
それは理解してましたが、
Stack(1)〜Stack(7)が終わらずに残っていることを
見落としてました。

>>932
理解すれば簡単なことだったんだなと思いますけど、
自分で>>927のような風に書けるようになる気がしません…。

>>933
ブレークポイント設定して確認してみました。
これわかりやすいですね。
今後困ったときはまた使ってみます。

>>934
いえ、Javaでもintは値渡しです。
0937デフォルトの名無しさん2010/05/25(火) 08:12:28
>>936
これって再帰のサンプルでしょ?
0938デフォルトの名無しさん2010/05/25(火) 08:12:35
>>930
>Stack(8)より先に実行していたStack(7)が
>「if (value < Depth) Stack(value);」のところで止まったままになってて、
>Stack(8)が終わったとたんに続きが動き出すってことでしょうか?

典型的な、オブジェクト指向のいろんな記述を変な風に理解してしまったクチだろう。
オブジェクトや、あるいはメソッドの呼び出しを、なんというか完全に独立した実行単位というか、実行主体というか、
そんな風に思ってしまってる感じ。
ただ一連の処理の流れ、内部的には単なるサブルーチン呼び出しという感覚が分かっていない。
0939デフォルトの名無しさん2010/05/25(火) 08:14:27
ああ、つまり、止まってるとかじゃなくて、今まさにStack(8)を実行中なんだ。
0940デフォルトの名無しさん2010/05/25(火) 08:18:12
>>937
クラスのメンバの部分のまとめのサンプルです。
突然再帰を使って例示されてます。

>>938
そうですね。
他のメソッドを呼び出してそっちが一通り動いた後で戻ってきただけですよね。
オブジェクト指向に初めて触れるわけでもないのに、こんなのがわかってなくて恥ずかしいです。
このサンプルでよく理解できたので、その意味ではよくできたサンプルかもしれませんね。
0941デフォルトの名無しさん2010/05/25(火) 08:20:40
>>940
いや、どっちかっていうとオブジェクト指向から入った人間が勘違いしやすい。
手続型から入った人間はそういう勘違いはないんだよね。
0942デフォルトの名無しさん2010/05/25(火) 08:21:36
とりあえず言語の勉強と並行してアルゴリズム・データ構造の勉強もした方がいいと思うよ
09439352010/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
0944デフォルトの名無しさん2010/05/25(火) 08:22:57
ref つけるとintも参照渡しできたっけ?
09459262010/05/25(火) 08:25:48
>>942
アドバイスありがとうございます。
悲しいことに、昔Cをやったときにアルゴリズムの勉強もしたことがあるんです。
身についてないってことですよね。
横に「Cによるはじめてのアルゴリズム入門」っていう本が転がってるので
読み直してみます。
0946デフォルトの名無しさん2010/05/25(火) 08:26:37
Cやってたんかいw
0947デフォルトの名無しさん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();
        }
    }

続く
09489472010/05/25(火) 08:31:07
○
○○
○○○
○○○○
○○○○○
○○○○○○
○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○

こうなる
09499352010/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ナノ秒。
0950デフォルトの名無しさん2010/05/25(火) 08:52:25
俺の00.001900
だった

まぁどっちにしろそこまで敏感になる問題じゃないな
0951デフォルトの名無しさん2010/05/25(火) 09:11:42
>>927
> for(int i = 0; i < value; ++i) Console.Write("○");
どこのサンプルか知らんけど、アホなことしてるな
.NETならstring(char, int)コンストラクタ使えと
0952デフォルトの名無しさん2010/05/25(火) 09:52:40
昨日のコマ大の問題

各桁の数字が相異なり、どれも0でないような3桁の正の整数nがある。
nの各数字を並べて出来る6つの数の最大公約数をgとする。
gとして考えられる最大の値を求めよ。
0953デフォルトの名無しさん2010/05/25(火) 10:38:06
18
0954デフォルトの名無しさん2010/05/25(火) 10:38:17
("○")
(^○^)
(-○-)
0955デフォルトの名無しさん2010/05/25(火) 10:59:29
C#初心者です。
マウスの右クリック(コンテキストメニュー)と右ドラッグ(ダウン-移動-アップ)で、
異なる処理を割り当てるにはどうしたらよいですか?
0956デフォルトの名無しさん2010/05/25(火) 11:14:34
どのレベルで処理するのかわからんけど、
ダウン後移動があったらドラッグ扱いでいいんじゃないかな
0957デフォルトの名無しさん2010/05/25(火) 11:35:37
C#つうかPG初心者と言ったところか・・・

1.マウスダウンでフラグセット・マウス位置記憶

2.マウス移動で移動量を記憶

3.アップで
 A.移動量が既定の移動量に達していない場合はコンテキストメニューを表示
 B.移動量が既定の移動量に達している場合、右ドラッグの処理

みたいなんじゃいかんのかな?

コントロールの移動とかからむとめんどくさそうだけど
0958デフォルトの名無しさん2010/05/25(火) 11:57:55
>>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が開かず、コンテキストメニューが開いてます。
0959デフォルトの名無しさん2010/05/25(火) 12:03:53
コンテキストメニューを割り当てないようにしたらいいんじゃないかな・・・・
0960デフォルトの名無しさん2010/05/25(火) 12:11:41
ContextMenuStripプロパティにセットするのをやめて
イベント時にShowするとかかな
0961デフォルトの名無しさん2010/05/25(火) 12:22:25
>>935
配列に対してfor文でカウンタを回しながら要素アクセスを行うと、
添字の範囲チェックが行われる。
これはtry〜catchの例外処理が挟まれることに相当するので、単独でこの部分だけを見ると差は大きい。

処理時間の差が大きくなるかどうかはループあたりの処理量とループ回数の比によって異なる。
ベンチマーク的な空ループに近い処理や、巨大なbyte[]に対する処理などではバカにならないぞ。

>>949,950
ちげーよ。Stopwatchは計測にパフォーマンスカウンタを使用する。

パフォーマンスカウンタは一般的に精度がシステムごとに固定値(例えば100万分の1秒)になっているか
CPUのクロック数に依存するかなので、
それ未満の経過時間の場合はそんなふうに固定時間ずれているように見える。
実際はそうじゃないかもしれないんだぞ。
.NETの場合はどういう実装になっているのかは誰か調べといてください。
0962デフォルトの名無しさん2010/05/25(火) 12:24:19
>>958
ContextMenuプロパティを設定するのをやめて、MouseDown/MouseUpを独自に実装するのはどうだ?
0963デフォルトの名無しさん2010/05/25(火) 12:28:26
>>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();
}
とかですか?
コンテキストメニューって、どこでプロパティにセットしているんでしょう?
0964デフォルトの名無しさん2010/05/25(火) 12:32:16
>>963
マウスの位置はMouseButtonEventArgsに入ってるべ?
ContextMenuStripはそのコントロールのプロパティの動作あたりに無いか?
0965デフォルトの名無しさん2010/05/25(火) 12:38:31
>>961
QueryPerformanceCounterの替りに実装できるて書いてるくらいだから
内部でそれつかってんじゃね?
0966デフォルトの名無しさん2010/05/25(火) 13:21:32
>>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();
}
こんな感じでしょうか。
09679472010/05/25(火) 13:24:42
面倒なことやってるねw

なんで左を使わないの?
0968デフォルトの名無しさん2010/05/25(火) 13:28:05
好きにやってみて思った通り動かないところを聞いてくれ
マウスアップがコントロールから外れると来なくなるから
Captureプロパティも使った方がいいかも

メニュー表示はこんな感じかな
ContextMenu.Show(img.PointToScreen(e.Location));
0969デフォルトの名無しさん2010/05/25(火) 13:30:44
>>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
を参考にしてます。
09709472010/05/25(火) 13:32:27
>>969
なるほど〜なんだけどさw
WinFormじゃなくてWPFなの?
0971デフォルトの名無しさん2010/05/25(火) 14:07:18
確かにMouseButtonEventArgsはWPF用のイベント引数だったなw

<ContextMenu>は<Window.Resources>辺りで宣言
C#のコードからはthis.Resources[]で取得
とかする

あとWPFでそのページはあんま役に立たんと思うぞ
0972デフォルトの名無しさん2010/05/25(火) 14:21:07
>>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で、よい入門ページってご存じありませんか?
09739472010/05/25(火) 14:24:24
>WPFで、よい入門ページってご存じありませんか?
ない

<Grid Name="img"

とかやって名前付けておけば従来のwinformのように

img.

ってやれば候補がでてくるので自分でそれっぽいの探してがんばるしかない
0974デフォルトの名無しさん2010/05/25(火) 14:30:25
>>973
Gridには名前つけましたが、Windowにも名前が必要ってことでしょうか?
09759472010/05/25(火) 14:32:54
>>973
MSDNで調べてもいいけどざっくり見る場合の手段なだけだよw

XAMLの方でも候補は見えるけどやりにくいので
XAML側にはとりあえずNameつけておいてC#側で何が使えるか見るってだけ
0976デフォルトの名無しさん2010/05/25(火) 14:34:35
んー、WPFの基礎もできてない…
<Window.***> はWindowの***プロパティにセットする記述
C#のコードでWindow.*** = ...って書くのと同じ
だから
<Window.Resources>
  <Window.ContextMenu>
はイミフ
WindowのContextMenuにしたいわけじゃないんだからWindow.ContextMenuは関係ない
0977デフォルトの名無しさん2010/05/25(火) 14:40:06
>>969のイベントハンドラはXAMLに書かない方がいいんじゃね?
0978デフォルトの名無しさん2010/05/25(火) 15:12:46
VC#2010で同じことやろうとしたらGridのContextMenuがでねえw
0979デフォルトの名無しさん2010/05/25(火) 16:02:02
yieldを使用した反復子methodで、外部から入力を受け取ることは可能でしょうか?
Pythonにおけるgenerator.send(value) のようなものが欲しいんですが。
0980デフォルトの名無しさん2010/05/25(火) 16:48:06
>>979
IEnumerable<int> f(int i)
{
for (int j = 0; j < 10; j++)
{
yield return i * j;
}
}
こういう話?
0981デフォルトの名無しさん2010/05/25(火) 16:50:25
>>976
基礎がないから初心者ってことで…。

<Window.Resources>
あたりで宣言ってのはどうやるんですか?

>>977
イベントハンドラを、C#側に書くにはどうしたら?
0982デフォルトの名無しさん2010/05/25(火) 17:00:40
>>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);
0983デフォルトの名無しさん2010/05/25(火) 17:04:50
>>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コンパイル時点で、オーバーすることはないことが確認できた場合は省かれるんだよ。
最初から、そうなるから差なんてないって話なのに今更何言ってるの?
0984デフォルトの名無しさん2010/05/25(火) 17:11:24
だから最初から状況によってって書いてあるじゃねえか
0985デフォルトの名無しさん2010/05/25(火) 17:12:30
あとパフォーマンスカウンタの話だが、まあ>>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ナノ秒程度しかかからない処理の時間を計測すること自体があほだってこと。
0986デフォルトの名無しさん2010/05/25(火) 17:19:05
>>984誰に言ってるのかわからないけど、
>>961はこう言ってる。

>>935
配列に対してfor文でカウンタを回しながら要素アクセスを行うと、
添字の範囲チェックが行われる。
これはtry〜catchの例外処理が挟まれることに相当するので、単独でこの部分だけを見ると差は大きい。

処理時間の差が大きくなるかどうかはループあたりの処理量とループ回数の比によって異なる。
ベンチマーク的な空ループに近い処理や、巨大なbyte[]に対する処理などではバカにならないぞ。
0987デフォルトの名無しさん2010/05/25(火) 17:21:09
>>982
〜〜の◯◯みたいな、だけじゃなくて具体的にどういう動作させたいのか書いてくれよ
その例もよく分からんが、fの第二引数にFunc<int, bool>でも持たせるとかするのはどう?
f()の中でi*jを計算してFunc<int,bool>を呼び出しyield breakする
0988デフォルトの名無しさん2010/05/25(火) 17:30:47
>>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);
}
0989デフォルトの名無しさん2010/05/25(火) 17:30:54
>>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ナノ秒かかってる。
0990デフォルトの名無しさん2010/05/25(火) 17:36:40
>>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());
}
0991デフォルトの名無しさん2010/05/25(火) 17:43:14
>>988
http://ideone.com/l1Ypn
こういう感じに、状態を持ちつつyield returnするクラスが作りたいっていう話なんだろうか
0992デフォルトの名無しさん2010/05/25(火) 17:50:02
>>991
すばらしい!
まさにこういう事がしたかったんです。
ありがとうございます。
0993デフォルトの名無しさん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らしい記述に直すとか
0994デフォルトの名無しさん2010/05/25(火) 18:15:39
xaml側でとりあえず名前付けてC#側でなんとかしなよ
って書いたのは理解してなかったのね・・・
0995デフォルトの名無しさん2010/05/25(火) 18:32:50
初心者スレでこんな議論が起きようとはw
0996デフォルトの名無しさん2010/05/25(火) 18:36:45
>>995
よくあるよw
最近は行ってないけどC/C++関連でもよくあった
0997デフォルトの名無しさん2010/05/25(火) 18:39:00
次たててくるわ
0998デフォルトの名無しさん2010/05/25(火) 18:42:59
ふらっとC#,C♯,C#(初心者用) Part60
http://pc12.2ch.net/test/read.cgi/tech/1274780512/
0999デフォルトの名無しさん2010/05/25(火) 18:46:49
>>998
乙
1000デフォルトの名無しさん2010/05/25(火) 18:54:29
うめ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。