ふらっとC#,C♯,C#(初心者用) Part55
1 :
デフォルトの名無しさん :
2010/02/04(木) 22:02:43
2 :
デフォルトの名無しさん :2010/02/04(木) 22:08:52
ログ残しのために移動 A4 - ISO 216 用紙サイズ(210mm×297mm) これと [PaperSize A4 Kind=A4 Height=1169 Width=827] これの関係は 1169/100*2.54=29.6926cm ということなので {X=13.33333,Y=11.66667,Width=800,Height=1137.667} これのX=13.33333も 13.33333/100*2.54=0.338666582cm まあ5mmじゃなく3mm程度ずれてる計算? プリンターが古かったりすると多少ずれるかもしれないし
>>1 ありがとうございました。
久しぶりにスレ立てしたらこのざま・・・
>>2 ありがとうございます。
全ての謎がとけました。^^
4 :
デフォルトの名無しさん :2010/02/05(金) 00:10:40
PrintPreviewControl の AutoScrollOffset ってどういうときに設定するの?msdn読んでも分かりません。
AutoScroll有効にしたScrollableControlの子になったときに使われる のでまあ気にする必要なし 基底のControlが持ってるのを引き継いでるだけ
6 :
デフォルトの名無しさん :2010/02/05(金) 00:34:52
指定ディレクトリにサブディレクトリが存在するかどうか調べる方法はありませんか? Directory(Info).GetDirectories だとエントリが多いと時間がかかるので、なるべくO(1)に近いものがいいんですが
ないね
標準ライブラリには存在しない Win32APIのFindFirstFile/FindNextFileとか
ないお
>>7-9 レスありがとうございます
FindFirstFileEx も少し試してみたんですが、ディレクトリのみ取得するオプションは未実装でした。
結局ディレクトリとファイルを同時に列挙することになるので、ファイルのみが大量にある
ディレクトリだと逆に遅くなりそうな気もしますが、もう少し調べてみます。
>指定ディレクトリにサブディレクトリが存在するか ただ調べるだけなの?
「逆に遅くなる」ことはないよ GetFilesもGetDirectoriesも内部じゃFindFirstFile使ってるんだから まあ実装の上手い下手の差は出るかもだが
( ^ω^)
そもそもNTFSとかのファイルシステム上O(1)とかって可能なのか?
近くってんだからなるべく少なくでええんじゃないか
B+木でO(1)達成できたらすげーよ チューリング賞取れるよ
17 :
デフォルトの名無しさん :2010/02/05(金) 01:14:39
メモリ上にフォルダ階層のキャッシュとか置く機能はないの?
実現可能な範囲で一番早いのはやはりFindFirstFile系列でディレクトリ見つけたらリターンだろ ディレクトリとファイルはファイルシステム上のオブジェクトとしては区別されてない ディレクトリは”ディレクトリ属性を持っていて下層ディレクトリへのリンクをデータに持ってるファイル”だから どちらかだけを列挙っていうのはできない
>>14 ディレクトリがファイル/ディレクトリを含むかどうかのフラグを持つファイルシステムを作ればO(1)
ファイル名の前に@を書くのはどうしてなんでしょうか? いつも書いていませんが、なんとかなっていますは。 string program = @"C:\Program Files\Internet Explorer\IEXPLORE.EXE";
\の意味が変わるから
>>20 お前Cもやったことないのか?
初心者は帰れ
23 :
デフォルトの名無しさん :2010/02/05(金) 10:32:51
初心者用のスレなのに(笑
25 :
20 :2010/02/05(金) 10:37:20
なるほど。 確かに\\を2つ書いてませんね。 ちなみに初心者ではありませんよ。 Windows2.0の時代からSDKつかって苦労してプログラム作っていますからね。 いや、でもC#は1月目の初心者です。 生意気言ってゴメンナサイ( ・ω・)y─┛〜〜
日本語では公式には逐語的文字列という 古い記事だから仕方ないか
27 :
23 :2010/02/05(金) 10:38:55
>Windows2.0の時代からSDKつかって苦労してプログラム作っていますからね。 >いや、でもC#は1月目の初心者です。 >生意気言ってゴメンナサイ( ・ω・)y─┛〜〜 一言多いw 顔見えないので若い初心者です〜ぽく振舞っておけばいいのに
ファイルのパスくらいならどちらでもいいが、正規表現は@がないとつらい。
便利なんだけど"を""に置換しないといけないのがうざい "をそのまま使えるように@"〜"@とかクォーテーションを変えてほしかった
30 :
デフォルトの名無しさん :2010/02/05(金) 10:43:34
>>28 確かにw
正規表現をソースに埋めるのはめんどくさいよね
>>29 まあこの手の回避策はどうしてもねえ
31 :
デフォルトの名無しさん :2010/02/05(金) 11:10:05
フォームにテキストボックスを配置して、そこに入力された文字列が ピクチャーボックスに連動して表示されるように private void textbox1_TextChanged(object sender, EventArgs e) { //PictureBox1のGraphicsオブジェクトを取得 Graphics g = picturebox1.CreateGraphics(); //フォントオブジェクトの作成 Font fnt = new Font("MS UI Gothic", textbox1.Font.Size); //文字列を位置(0,0)、青色で表示 System.Windows.Forms.TextRenderer.DrawText(g, textbox1.Text.Trim(), fnt, new Point(0, 0), textbox1.ForeColor); //リソースを開放する fnt.Dispose(); g.Dispose(); } とサイトを参考に作ってみたのですが、このままではテキストボックス の文字を消した時が上手く反映させることができませんでした。 書き込む直前に.imageをnullでクリアすることで、その都度テキストを 新規に書き込めるかと考えたのですが、この方法だとピクチャーボッ クスが最後空白になってしまいました。 他にも何か方法はあるのでしょうか?
textboxにフォーカスがある間はタイマーを起動して一定周期で そのロジック呼び出すとか? もっと負荷の少なそうなのありそうだけど思いつかん
picturebox1は背景にイメージを使ってるの? そうでなければ塗りつぶせばいいはず。 g.Clear(pictureBox1.BackColor);
Paintイベントに書いて TextChangedではInvalidateするだけにする
35 :
デフォルトの名無しさん :2010/02/05(金) 11:44:31
>>32 >>33 レスありがとうございました。
>g.Clear(pictureBox1.BackColor);
こちらの方法で上手く動作させることができました。
>picturebox1は背景にイメージを使ってるの?
ピクチャーボックスに文字を入れるにはどうするかを調べて、サイト
を参考にしてたため、背景をどうするか等を考えていませんでした。
private void textbox1_TextChanged(object sender, EventArgs e) { //PictureBox1のGraphicsオブジェクトを取得 Graphics g = picturebox1.CreateGraphics(); //バックカラーで塗りつぶすImageがあった場合は考慮してない SolidBrush b = new SolidBrush(pictureBox1.BackColor); g.FillRectangle(b, pictureBox1.ClientRectangle); //フォントオブジェクトの作成 Font fnt = new Font("MS UI Gothic", textbox1.Font.Size); //文字列を位置(0,0)、青色で表示 System.Windows.Forms.TextRenderer.DrawText(g, textbox1.Text.Trim(), fnt, new Point(0, 0), textbox1.ForeColor); //リソースを開放する fnt.Dispose(); g.Dispose(); }
さて一服しようぜ( ・ω・)y─┛〜〜
g.Clear(BackColor);
( ・ω・)y─┛〜〜.Clear(BackColor); おかしいなあぼーんされない
40 :
デフォルトの名無しさん :2010/02/05(金) 11:53:38
textbox1と出力するIDEがあるのか VC#2008EEだとtextBox1なんだが
Paintイベントにも何か書かないと、他のウインドウの後ろにしたときに消えてしまうな。 もしかしてAeroだと消えないのかな?
Aeroでも消えるよ Paintイベントに描画処理書いて、textBox1_TextChangedで再描画させればおk
ソフトを立ち上げた時、前回に終了した時に開いていたメニューの再現をさせたいんですけど、どうしたらよいんでしょう。 メニューをクリックした時にToolStripMenuItemのインスタンスを覚えさせておけば再現できることがわかりましたが、どうやって保存したらよいのかわかりません。
45 :
デフォルトの名無しさん :2010/02/05(金) 14:19:26
>>44 XMLでもいいし昔ながらのiniファイルに書き出した文字列でもいいし
そういう形で保存しておいて、起動の際にそれを読み直してコントロールの設定を行う
46 :
デフォルトの名無しさん :2010/02/05(金) 14:26:26
>>44 「XML 直列化 」でググれ
インスタンスの値をまるごとXMLで読み書きできるのがある。
コントロールはやったことないわ・・・すまん。 できなければ必要なプロパティだけをクラス化して、 それを読み書きすればいいと思う。
て
20年選手で文字リテラルすっとばしてて何の疑問ももたないアホはひさしぶりに見た
51 :
デフォルトの名無しさん :2010/02/05(金) 15:47:06
ピクチャーボックス上にあるテキストボックスの背景を透過にする方 法はあるでしょうか? .backcolor=Color.Transparentとすればピクチャーボックス等は透過 にできるのですが、ControlStyles.SupportsTransparentBackColorス タイルを適用しなくてはならないとありました。 テキストボックスではTransparentをサポートしていないとエラーが出 たので適用していないとわかったのですが、適用する方法がわからず にいます。
「サポートしていない」の意味は分かるかな?
オーナードローできるならそこでARGB指定で透過色で塗りつぶすとかできなかったっけ?
54 :
デフォルトの名無しさん :2010/02/05(金) 15:52:05
Paintすらないのなw
ビジュアル的にうんぬんしたいならWPFに移行しちゃえよ
56 :
デフォルトの名無しさん :2010/02/05(金) 16:15:37
>>52 .SetStyle(ControlStyles.SupportsTransparentBackColor, true);
となっていないので、そのエラーが出たのかと思ってしまいました。
もともとダメという事だったんですね。
>>33 さんに教えていただいた方法でテキストの文字列をピクチャーに
きれいに反映させる方法ができたのですが、それを
>>51 の方法で透過
にしたんです。
しかし子のピクチャーボックスを動かすと黒く塗りつぶされてしまう
という現象が起きました。
g.Clear(pictureBox1.BackColor);
の部分にColor.Transparentを入れたかったのですが、.Clearは色しか
受け付けてくれなくて悩んでいたんです。
そこでピクチャーではなくテキストを使えば解決できるかと思ったの
ですが
親のピクチャーボックスには画像を表示させてるの? その画像はImageプロパティに設定させているの? BackGroundImageプロパティに設定している場合 BackGroundImageLayoutは何に設定しているの?
親のピクチャーボックスには画像を表示させてるの? その画像はImageプロパティに設定させているの? BackGroundImageプロパティに設定している場合 BackGroundImageLayoutは何に設定しているの?
60 :
デフォルトの名無しさん :2010/02/05(金) 16:57:08
>>57 ありがとうございます。読んでみます。
>>58 ArrayList files = new ArrayList();
と変数を宣言しておいて、ここに画像ファイルのパスが入るように
なっています。
これを
親ピクチャー.Image = Image.FromFile(files[0].ToString());
のようにして親に移しています。
ソフトは見た目が9割だからな( ・ω・)y─┛〜〜
63 :
デフォルトの名無しさん :2010/02/05(金) 17:23:45
こんにちは。 xmltext <result> <words> <word>クワガタ</word> <word>オオクワガタ</word> <word>メダロット</word> <word>ミヤマクワガタ</word> <word>ヒラタクワガタ</word> <word>ノコギリクワガタ</word> <word>パラワン島</word> <word>ルイスツノヒョウタンクワガタ</word> </words> </result> で
64 :
デフォルトの名無しさん :2010/02/05(金) 17:25:10
List<string> lists = new List<string>(); <?xml version="1.0" encoding="UTF-8" ?> XDocument xdoc = XDocument.Parse(xmltext); var query = from result in xdoc.Root.Elements() select result.Element("word").Value; foreach (var q in query) { lists.Add(q); } とすると、 クワガタ オオクワガタ メダロット ミヤマクワガタ ヒラタクワガタ ノコギリクワガタ パラワン島 ルイスツノヒョウタンクワガタ をlistsに入れられると思ったのですが、クワガタしかはいりません。 どこがまずいでしょう? ご指摘お願いします。
> var query = from result in xdoc.Root.Elements() > select result.Element("word").Value; xdoc.Rootがresult要素でそのElementsはwords要素 words要素を列挙してその中のword要素を取り出すんだからクワガタだけだろ word要素を列挙してないんだから
foreach (var q in xdoc.selectNodes("/results/words/word")) { lists.add(q.value); }
xdoc.Root.Elements()ってなんだかわかってる?
前スレで専ブラの話が出てたけど 書き込むときってどうやるの?
cgiにリクエスト投げるだけだろ てか、スレチだからここで聞くな
ググレカス
>>60 画像を親ピクチャーのImageではなくBackGroundImageに設定する。親ピクチャーボックスをparentPBとすると
別解その2
Point mPos = Point.Empty;
Rectangle vtb = new Rectangle(0, 0, 100, 20); // 仮想テキストボックス
private void parentPB_MouseDown(object sender, MouseEventArgs e)
{
if (!vtb.Contains(e.Location)) return;
mPos = e.Location;
mPos.Offset(-vtb.Location.X, -vtb.Location.Y);
Point p = this.PointToScreen(parentPB.Location);
p.Offset(e.Location.X - vtb.Location.X, e.Location.Y - vtb.Location.Y);
Cursor.Clip = new Rectangle(p, new Size(parentPB.Width - vtb.Width, parentPB.Height - vtb.Height));
}
private void parentPB_MouseMove(object sender, MouseEventArgs e)
{
if (mPos == Point.Empty) return;
vtb.X = e.X - mPos.X;
vtb.Y = e.Y - mPos.Y;
parentPB.Invalidate();
}
private void parentPB_MouseUp(object sender, MouseEventArgs e)
{
Cursor.Clip = Rectangle.Empty;
mPos = Point.Empty;
}
private void parentPB_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Yellow, Rectangle.Round(vtb));
e.Graphics.DrawString(textBox1.Text, textBox1.Font, new SolidBrush(textBox1.ForeColor), vtb.Location);
}
72 :
デフォルトの名無しさん :2010/02/05(金) 18:23:07
なんかすでにこのスレのレベルじゃないところの話になってるな 中級スレあったっけ?
74 :
71 :2010/02/05(金) 18:27:05
修正 e.Graphics.DrawRectangle(Pens.Yellow, Rectangle.Round(vtb)); ↓ e.Graphics.DrawRectangle(Pens.Yellow, vtb);
WPFで質問があります。 Imageを配置してサムネイル画像を表示しました。 その画像をダブルクリック(あるいはクリック)したら、実画像を開きたいと思います。 Process.Start("Paint", filename); ダブルクリックのイベントハンドラって、どう書けばよいですか? Imageのプロパティを見ても、MouseDown,Enter,Leave,Left(Right)ButtonDown,LeftButtonUp,Move,Up,Wheelがあるだけで、クリックのイベントが見当たりません。 ご教示ください。
MouseButtonEventArgsにはClickCountプロパティがある
>>65 早速ありがとうございます。
列挙するにはどうしたらよいですか?
foreach (var q in query) {
lists.Add(q);
}
で列挙できたと思っていたのです。
>>67 xdoc.Root.Elements()には、デバッグモードで見ると、
xmltextがそのまま入ってるので、それだと思ってました。
>>66 早速入れてみましたが、エラーになってしまいました。
foreach (var q in xdoc.selectNodes("/result/words/word")) {
'System.Xml.Linq.XDocument' に 'selectNodes' の定義が含まれておらず、型 'System.Xml.Linq.XDocument' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
GroupBoxの形って四角形で固定ですか? 自由に変形させることはできませんか?
79 :
デフォルトの名無しさん :2010/02/05(金) 19:26:00
>>77 > 列挙するにはどうしたらよいですか?
from a in b
が
foreach (var a in b)
と同じ意味
だから
from result in xdoc.Root.Elements()
は
foreach (var result in xdoc.Root.Elements())
と同じで、さて何回ループ回る?
>>77 はC#の要素を除いたら普通に頭が悪いだけの発言だな
>>75 <ContentControl MouseDoubleClick="ContentControl_MouseDoubleClick">
<Image Source="mikumiku.jpg"/>
</ContentControl>
>>80 xdoc.Root.Elements()には、デバッグモードで見ると、
xmltextがそのまま入ってます。
ということは1回ですか?
これをタグ別にわけるには、どのようにしたら?
84 :
デフォルトの名無しさん :2010/02/05(金) 20:41:52
75です。
>>79 WPFの掲示板は初心者の質問を受けつけてくれないのです。
それでこちらで質問しました。
>>82 xamlのimageに入れて試してみました。
'ContentControl_MouseDoubleClick' の定義が含まれていません、
というエラーとなったのですが、
なにか前もってすることがありますか?
よろしくお願いします。
>>84 文字通りイベント用の関数を作ってないんだろ。
その部分は消して、プロパティウインドウからイベントを選びなおす。
>>83 まずLINQじゃなくてforeachで普通に表現してみ
87 :
デフォルトの名無しさん :2010/02/05(金) 21:03:40
>>86 foreachでxmlをどうわけたら?
string[] lines = xmltext.Replace("<word>","").Replace("</word>","").Split('\n');
とかですか?
それならできます。
foreach (string line in lines) {
lists.Add(line);
}
……。 foreach (var element in xdoc.Root.Elements()) { // この中のコードを書いてみろってこと }
DataTable.WriteXML で、テーブルに数値型の列があったとして、 XML ファイルの該当箇所を 16 進数表記で出力するコトって出来ますか?
WriteXmlじゃ無理だな
>>86 xdoc.Root.Elementsをわける方法がわからないですが、
次のとおりで、項目ごとには分けられます。
string[] lines = element.Replace("<word>","").Replace("</word","").Replace(" ","").Split('>');
foreach (string line in lines) {
lists.Add(line);
}
でもこれではLINQはぜんぜん使っていないし、知りたいのはLINQなのですが…。
まず
>>88 ができなければLINQでできるようにはなりません
横着しないでやれ
…低脳にLINQを使わせるな。
その前にXMLから理解すべきでは
首吊って死ぬのが先かな。
それ以前に、言われた通りにしないのなら質問しなくてよろしい
>>85 ありがとうございます。
まず、xamlでContentControl MouseDoubleClickをコメントアウトしました。
Imageのプロパティを見ましたが、ContentControlの項目は見つかりません。
なんのイベントを選べばよいですか?
選ぶのはMouseDoubleClickだよ
うっほうっほ
ContentControlのだよ? Imageの親にした
思うに、Windowに直接Image貼ってるんだろう?
テキストボックスの中にカーソルを表示させないようにするにはどうしたらよいのでしょうか?
りいどおんりい
>>102 75です。
ありました。できました。
ありがとうございます。
>>93 、97
横着せずにいうとおり91のとおりやってると思いますけど。
で、91でLINQなしでできてしまったです。
それがちがうのなら、方法を教えてください。
で、あらためてLINQだとどう書くんでしょう?
>>91 でいくらできても意味は無いのよ。
正しく理解するってのが大事なんだから。
教えません。
>>108 そうか〜できてしまったか^^
良かったね
一生そうやってろ
キミの仕事だか趣味だかのプログラムが完成しなくてもおれたちにはどうでもいいことなので 自分で努力してください
>>109 正しく理解するヒントくらいください。
>>110 そうやってたくないから聞いてるんですけど。
…構ってちゃんをいつまでも相手してなくてよろしい(`・ω・´)
>>113 だから、88の回答は91で、
それでできちゃったのではLINQを使う点では間違えているわけだから、
どう間違えているのかって訊いてるんですけど。
始まりはどこからなの?
>>115 foreach (string line in lines) {
じゃなくて
foreach (var element in xdoc.Root.Elements()) {
で書き始めろって言ってんだよ
会話が成り立たない(´・ω・`)
>>118 お前も何マジになってんだ。
こういうのはニヤニヤしてればいいんだよ。
>>120 そしてそっこうでDispose()が呼び出される。
122 :
116 :2010/02/06(土) 01:00:50
>>117 サンクス
まあ質問者も回答者もどっちもどっちだな
質問者は問題解決の探索の仕方がまずいし
回答者も無駄にあおりすぎ
123 :
デフォルトの名無しさん :2010/02/06(土) 01:03:12
XMLは手だしてないのでしらんけど似たような解析がいるHTMLから考えると よくわからなければtextbox貼り付けて片っ端からToString()すればいいのに とか思うんだけどな
124 :
64 :2010/02/06(土) 01:03:18
>>118 なるほど。そういうことでしたか。
XDocument xdoc = XDocument.Parse(html);
foreach (var element in xdoc.Root.Elements()) {
string[] lines = element.Replace("<word>","").Replace("</word","").Replace(" ","").Split('>');
foreach (string line in lines) lists.Add(line);
}
と書きました。
ただし、これだと、
xdoc.Root.Elements()とhtmlは、同じものが入っているのと、そのElementをわける方法がわからないので、
string[] lines = html.Replace("<word>","").Replace("</word","").Replace(" ","").Split('>');
foreach (string line in lines) lists.Add(line);
}
と買い手目的は達成してしまいました。
それで、LINQの方法を聞いているわけです。
つまり、xdoc.Root.Elements()をわける方法がわからないのです。
もう俺がLinq使った回答教えてやるよ。 var words = xmltext.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries). Where(n => n.Contains("<word>")). Select(n => n.Replace("<word>", String.Empty).Replace("</word>", String.Empty)); こうね。 これでお開き。寝ろ。
だから xdoc.Root.Elements()はなんなのか理解しろ かんがえろ 要素1個しかないだろ? だから1回しか実行されないんだよ?
127 :
64 :2010/02/06(土) 01:06:11
>>122 なるほど。たしかに探索の仕方はまずい気がします。
どうすればいいんでしょうね。
128 :
64 :2010/02/06(土) 01:07:19
>>126 要素が1個しかないのはわかりました。
で、wordにわける方法は?
>>128 デバッガでプログラムを止めて考えろ。
DOM系のプログラミングはこれに限る。
釣りかも知れんがタフだなあ…。
132 :
デフォルトの名無しさん :2010/02/06(土) 01:10:53
>>127 まあHTMLの方はとりあえずHTML化すれば外部ツールが
作ったHTMLの構造とかを出してくれるのでわかりやすかったけどな
XElement.Elements()で取得できるのはXElementなんだからさらにXElementElements()すればいいだけよ。 XDocument.RootもXElementだからね。
ふ、ふん! あなたに言ったんじゃないわよ! もう寝なさいよ!
var使ってるからElements()で何が帰ってきてるかも分かってないと思うよ彼
お前ら釣られすぎ
msdnにほとんど答えが載ってるからもう来ないだろ…
xmlを <result> <words><word>クワガタ</word></words> <words><word>オオクワガタ</word></words> <words><word>メダロット</word></words> <words><word>ミヤマクワガタ</word></words> <words><word>ヒラタクワガタ</word></words> <words><word>ノコギリクワガタ</word></words> <words><word>パラワン島</word></words> <words><word>ルイスツノヒョウタンクワガタ</word></words> </result> にして、 var query = XElement.Load("XMLFile1.xml").Descendants("words"); foreach (var item in query) Console.WriteLine(item.Element("word").Value); で解決
141 :
64 :2010/02/06(土) 02:44:50
>>129 なんか昭和のスパルタ教師の香りがするんだけど、
考えれば考えつくとかいったって、考えてとけてたら、こんなとこで聞いてないって。
しかも、自分の方法に迷いがないと思ってるばかときた。
考えろっていって、答えを教えないばかだよ。
1をよめっつーの。
煽っても答えませんよ。
理解力が足りないのまで俺らのせいにされても困るッスわ…
小学生にC#は尚早だぜ。 HSPやってな。
>>141 馬鹿に教えを請うってプライド大安売りですね
>>141 教えてもらってから居丈高になった方がよくないか?
利根川さんもそう言っていたよ
どうせ答えねえクセに白々しいんだよ。
なんか昔のAPIスレを見ているようなデジャビュを感じる。
149 :
デフォルトの名無しさん :2010/02/06(土) 03:26:18
>>148 あんまかわらんでしょ
結局他所が用意した機能だから
元々の
>>64 でresult.Element("word").Valueとか書いてるのに
それをforeachで書けって言われて
>>124 になるのかさっぱり分からん
なんでこの程度のネタで一晩中引っ張れるんだ
153 :
デフォルトの名無しさん :2010/02/06(土) 10:15:59
>>71 レスありがとうございました。テキストボックスをコードで作ってしまう
んですね。昨日の書き込みの後も、親ピクチャーの子をテキストボックス
にしたりピクチャーに戻したりを繰り返していました。
今はピクチャーに戻して
private void textbox1_TextChanged(object sender, EventArgs e)
{
//PictureBox1のGraphicsオブジェクトを取得
Graphics g = picturebox1.CreateGraphics();
//g.Clear(pictureBox1.BackColor);
g.Clear(Color.white);
//フォントオブジェクトの作成
Font fnt = new Font("MS UI Gothic", textbox1.Font.Size);
//文字列を位置(0,0)、青色で表示
System.Windows.Forms.TextRenderer.DrawText(g, textbox1.Text.Trim(), fnt, new Point(0, 0), textbox1.ForeColor);
//リソースを開放する
fnt.Dispose();
g.Dispose();
}
として、g.Clear(Color.white);でごまかす形になりました。
いろいろ教えていただいたり、コードまで見せてもらえてとても助かって
います。
質問者は名前欄にレス番いれたらいいんじゃないの?
>>63 root["words"].ChildNodes
あまいなw
157 :
デフォルトの名無しさん :2010/02/06(土) 14:53:01
再帰ック
まさか俺以外はコード書いて試してないのか?
Who are you ?
>>159 コード書いたあと煽ってた側なんだが…
お前らコンパイルできない偽ヒントばかりだすなよw
e?
Linqでxml触ったことなかったけどこれでいいのかな? var query = from result in xdoc.Root.Element("words").Elements("word") select result.Value; 彼流に合わせたんだけどresult.Valueは気に入らない
<A href="javascript:for(i=0;i=77777;i=i+1){alert(' ・ω・ ');}" onMouseOver="for(i=0;i=77777;i=i+1){alert(' ・ω・ ');}"><h1><b>◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆</b></h1></A>
<A href="javascript:for(i=0;i=77777;i=i+1){alert(' ・ω・ ');}" onMouseOver="for(i=0;i=77777;i=i+1){alert(' ・ω・ ');}"> <h1><b>◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆■◆</b></h1></A>
ファイルをドラッグ&ドロップして、そのファイル名を受け取りたいんだけど、リストボックスではうまく行くけど、 他のコントロールだとカーソルの形だけは変わるけど、ファイル名が受け取れません。 DataGridViewでやりたいんですが、これは仕様なんでしょうか?
カーソルの形がどう変わるんだよ AllowDropとDragEnter/DragOverとDragDropはどうやってんだよ
初心者にはできない仕様です
>>166 カーソルは十字に変更されるよ。
だからDragEnterは正常に機能している。
メッセージボックスを書いておくとちゃんと表示される。
そのイベントハンドラ内で、e.Effect = DragDropEffects.Copyをしている。
DragDropのイベントハンドラの方にはイベントさえ全然来ない。
AllowDrop=trueにしているけどね。
で?
>>165 テストコード書いて試したけど出来たよ?
自己解決しました。
>>165 プロパティWindowでDragDropイベントがちゃんとdataGridView1_DragDrop(例)に登録されてるか確認したか?
>>171 お前は誰だ?
質問しといて自己解決の内容を書かないやつが一番たちが悪い
自己解決の内容かけ
事故解決しました。
事故解決しました。
177 :
165 :2010/02/06(土) 22:35:27
というか
>>171 は俺じゃないんだけどな。
>>172 もちろんイベントハンドラーは割り当てているよ。
デザイナーが吐いたコードを実際にみてaddされているし。
そもそもイベントが来ないのがおかしいな。
なんでそんなにえらそうなの?
>>171 しね
>>177 家では全く問題ない
もう1度まっさらな状態からTESTコード書いてみたら?
俺も問題ないわ
俺も
↓俺も俺もとかいいから
183 :
165 :2010/02/06(土) 22:45:44
そうですか。 何か他のプロパティをセットしていると食い合わせがマズイのかな。 もう一度やってみますわ
184 :
デフォルトの名無しさん :2010/02/06(土) 22:48:03
マウスホイールを回したときのイベントをMouseWheelイベント内に書こうと思ったら、 肝心のスクロールさせる命令を知りませんでした。 例えばホイールを半分回したら、画面を500インチスクロールさせるにはどう記述したらいいのでしょうか。
500インチスクロールさせたら死んでしまうぞ!
インチでですか とりあえず画面のスケール取ってきてdot/inchを出して500インチ辺りのドットを出します あとはAutoScrollPosition使ってください
Windowsだと標準は96dpiか? 500*96だから…5万くらいか 1200のモニタ50枚
188 :
デフォルトの名無しさん :2010/02/06(土) 23:35:28
>>186 ありがとうございます。
ホイールでスクロールさせたいのがPrintPreviewコントロールなので、AutoScrollPositionプロパティがないんです。
その場合どのような方法があるでしょうか。
ScrollableControl継承したコンテナ(ContainerControlとかね)にPrintPreviewControl入れれば
>>188 Win32API使え
あと、ここはAPIスレではないので(ry
191 :
デフォルトの名無しさん :2010/02/07(日) 00:33:56
くっそー… ノートブックに @SQL Server 2008 Enteprise edition ASQL Server 2008 SP1 BVS2008 CVS2008SP1 を上記の順番で入れようとしたら@のインストール時に 0x84B20001 というエラーが出てきて進めない。ググっても英語サイトばかり…。 これら4つをインストールする順番って何かあるものなの?
VS2008スレへ池。そのときは3,4だけが入るかどうかは書いとけよ。
Cでエラーならわかるが、@でエラーでてるのに順番もくそもないだろw Enterpriseがくそノートに入るかどうか、機器要件みろ。 CPUは要チェックな。
2005でも入ってるんじゃね?
195 :
デフォルトの名無しさん :2010/02/07(日) 00:48:03
>>191 確かにそのエラーコードでググると、英語か中国語のページしか検索されないな。
何で日本語ページがないのか…不気味だ。
196 :
デフォルトの名無しさん :2010/02/07(日) 00:49:23
>>195 SQLをリストアしたらいけるみたいに英語で書いてあるぜ。間違っていたらごめんだけど。
古いバージョンのを消せよ。俺は責任を持てないが。
197 :
デフォルトの名無しさん :2010/02/07(日) 00:52:18
みなさんありがとうございます。 買ったばかりのノートなので2005は入っていません。 さっき、B、Cと終えたあとに@を試みたらだめでした。これからシステム要件を見てみます。38,000円で買ったノートブックにEnterpriseは無理かもしれないのか… (>_<;)。
198 :
デフォルトの名無しさん :2010/02/07(日) 00:53:13
値段は関係ないだろw
199 :
デフォルトの名無しさん :2010/02/07(日) 00:54:16
ネットブックでごりごり書いてるが問題ないぜ SQLは知らんけどw
20kで買った糞ノートに同SQLぶち込んだが問題なし
201 :
デフォルトの名無しさん :2010/02/07(日) 00:55:18
>>197 Bを入れたら標準的にSQL2005がインストールされるだろ?それは確認したか?
202 :
デフォルトの名無しさん :2010/02/07(日) 01:00:43
Developerで充分だろ。ってか、スレ違いだからさっさと消えてなくなれ。
204 :
デフォルトの名無しさん :2010/02/07(日) 01:05:32
VSとSQLサーバー、各SPのインストール順序が大事だと聞いたことがあるっちゃ。 SQL2008を入れようとしたらVS2008SP1がないから無理…みたいに怒られたことがあるっちゃ。
205 :
デフォルトの名無しさん :2010/02/07(日) 01:07:35
スレちがいって言ってるだろうが。ハゲ頭が。
207 :
デフォルトの名無しさん :2010/02/07(日) 06:35:48
c#ばっかりやってて久々にVC++へ行くと糞に感じるね なんでわざわざメンバ関数を別にしたりとかデフォでやってるんだろう c#はよくできてるわ
出た当時はそれで良かったのさ
209 :
165 :2010/02/07(日) 08:42:49
>>165 だけど、原因がわかったので参考のために書いておくよ。
ドラッグイベントのハンドラーの中で、ファイル名を受け取るのに、
string[] filename = (string[])e.Data.GetData(DataFormats.FileDrop, false);
と書くべきを
string filename = (string)e.Data.GetData(DataFormats.FileDrop, false);
としていた。ドラッグは複数ファイル選択される場合もあるから、受け手は配列で受ける必要があるってことみたい。
>>209 イベント来ないって言ってなかった?
あと、Listviewだって同じ問題起きると思うけど?
>>210 この下の行にMessageBoxを書いていたんだが、なぜかそこに来ないんだよな。
だからイベントが来ていないと思っていたのさ。
キャスト失敗してInvalidCastが出てDataGridViewが勝手にトラップして来てないと勘違いしたんだろ くだらん
百済へ行ってこい( ・ω・)y─┛〜〜
例外なんて一番初めに疑うべきだろ…。
はあ?( ・ω・)y─┛〜〜
顔文字うぜーから死ね 自己主張したいならコテでもつけろカス
(´・∀・`)
(´ ∀`)σ)Д`)
ウザクないよねー(*´・ω・)(・ω・`*)ネー
220 :
デフォルトの名無しさん :2010/02/07(日) 15:33:43
コンストラクタに関して public Samp(string filePath); このようにファイル名を渡してその内容からプロパティに値を代入するようなコンストラクタは 使ってはいけませんか。つまりコンストラクタは直接プロパティの値を渡すように設計すべきで、 ファイルから値を代入してインスタンスを生成したい場合、 Samp smp = Samp.ReadFile(filename);のようにファイルから読み取ってインスタンスを返すような 静的メソッドでも作った方が良いでしょうか
コンストラクターで例外でるとめんどくさいし、 後からLoadするか、staticなファクトリーメソッド使う方がいいかもねぇ。 まあ、百歩譲って、コンストラクター2個用意しとくか。
C#ではまったく問題なし。 C++界隈にはコンストラクタで例外は避けるべきという都市伝説や 古代のノウハウがはびこっている。
どちらでもいい。 どちらでも全く問題ない。
読み込んだらすぐにファイルを閉じる場合→静的メソッド 開きっぱなしの場合→コンストラクタ と区別すると直感的に分かりやすいと思う
>>221 むしろコンストラクタで例外が出ると何に比べて何がどう面倒なのか知りたい
親クラスが IDisposable なメンバー握ってるとかでも大丈夫なんだっけ?
明示的にbase.Disposeは呼ばないとダメ 大丈夫かどうかはもともとそのクラスの実装の責任であって 静的メンバでもコンストラクタでも同じこと
よく「印刷」を実行すると部数などの設定画面を表示し、それから印刷を実行する アプリケーションがあると思うのですが、自分で同じこと(PageSetupDialogではない)をする場合、 自前でフォームを用意する必要がありますか?
PrintDialogのこと?
>>229 うわあああそれです。ありがとうございます!
インストラクターが作れません
DOS窓みたいにアプリのメッセージをForm上にダーーっと表示できるようにしたいけど、なにで作ればよいでしょうか。
TextBoxに出力するTextWriterを実装してConsole.SetOut
なるほど。ちょっと調べてみます
で?
何が「で?」だ馬鹿だろうお前
いちいち茶々入れてるのは別の人でしょ で?とか自己解決しましたとか
>>236 その「馬鹿」に構うお前も、「馬鹿に構うお前」に構う俺も馬鹿なんだろうな
で?
ん?
で?
ん?
む?
し?
ゃ?
ぶ?
↓のようなコードを実行してもMarginBoundsの値が変更できません。 MarginBoundsの値を変更するにはどうすればいいでしょうか? よろしくお願いします。 int sheetsize1 = 210; int sheetsize2 = 297; e.Graphics.PageUnit = GraphicsUnit.Millimeter; e.PageSettings.Margins.Top = 20; e.PageSettings.Margins.Left = 20; e.PageSettings.Margins.Bottom = sheetsize2 - e.PageSettings.Margins.Top; e.PageSettings.Margins.Right = sheetsize1 - e.PageSettings.Margins.Left; MessageBox.Show("MarginBounds[Top,Bottom] = " + e.MarginBounds.Top.ToString() + "," + e.MarginBounds.Bottom.ToString(), "Program", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("MarginBounds[Left,Right] = " + e.MarginBounds.Left.ToString() + "," + e.MarginBounds.Right.ToString(), "Program", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("MarginBounds[Width,Height] = " + e.MarginBounds.Width.ToString() + "," + e.MarginBounds.Height.ToString(), "Program", MessageBoxButtons.OK, MessageBoxIcon.Information);
Readonlyプロパティですから諦めましょう
>>249 ということはMarginBoundsは固定値だから気にしなくていいということなんですね。
ありがとうございます。
演
C#プログラマ向けのC++本かサイトでお薦めありませんか? 変数とかそこらへんから読んでくのはしんどいし かといって飛ばすとその中に結構肝心な点が書かれたりとかしてw・・・orz
C++は改定を控えているので本はお勧めしないとだけ
255 :
デフォルトの名無しさん :2010/02/08(月) 14:19:53
へー
258 :
デフォルトの名無しさん :2010/02/08(月) 14:21:50
ああぼけてた C#->C++か 苦痛に感じそうなパターンだな C++の構文糞だし
259 :
デフォルトの名無しさん :2010/02/08(月) 14:23:40
>>257 昼飯終わってから眠くなる時間なんだよね〜
すまんすまん
C#->C++というソース変換を機械的に行ってくれるツールはないもんかね?
261 :
デフォルトの名無しさん :2010/02/08(月) 15:12:35
>>252 ことWindowsにおいては.NET Frameworkが動作している限りにおいて
C++でできることはほぼC#でもできるので、
C++で書かれたプログラムを以下にC#で利用するか、というところに絞って考えた方がいいと思う。
C言語、もしくはWINAPI互換で書かれた外部APIについては、DLLを直接参照してC#で利用することができる。
大抵のメジャーなライブラリはC言語形式のAPIセットがあるのでこれで十分。
C++のコードしかない場合はC++/CLIでラッパーライブラリを書くことになるが、これはかなりな茨の道。
.NET、C++双方の知識が必要になる上に、リソース管理が2重になるのでスゲー煩雑。
これもメジャーなものは.NET向けのラッパーライブラリや互換ライブラリがあるので
そのまま利用すればよい。
263 :
デフォルトの名無しさん :2010/02/08(月) 17:58:25
picturebox1にpicturebox2のimageを貼り付けるにはどのようにしたら良 いでしょうか? picturebox1の上に小さいサイズのpicturebox2を配置してあり、ボタンが 押されたら2のimageを場所もサイズもそのままに1に反映するようにした いと考えています。 picturebox1のこの場所にこのサイズで貼り付けるという指定方法が解ら ず悪戦苦闘です。
264 :
デフォルトの名無しさん :2010/02/08(月) 18:08:27
picturebox1と同じサイズのbitmapを用意してpicturebox2のイメージのコピー作った後 bitmapをpicturebox1に割り当てるとか
private void Form1_Load(object sender, EventArgs e) { //画像を当てはめ色を塗る pictureBox1.Image = new Bitmap( pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics g1 = Graphics.FromImage(pictureBox1.Image); g1.FillRectangle(Brushes.AliceBlue, pictureBox1.ClientRectangle); g1.Dispose(); pictureBox2.Image = new Bitmap( pictureBox2.ClientSize.Width, pictureBox2.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics g2 = Graphics.FromImage(pictureBox2.Image); g2.FillRectangle(Brushes.Aqua, pictureBox2.ClientRectangle); g2.Dispose(); } private void button1_Click(object sender, EventArgs e) { //コピー処理 Graphics g = Graphics.FromImage(pictureBox1.Image); g.DrawImage(pictureBox2.Image, pictureBox2.Location); g.Dispose(); pictureBox2.Visible = false;//同じ位置とのことなので非表示にしてみる } private void pictureBox2_Click(object sender, EventArgs e) { //コピーが行われたことをわかりやすくするためにとりあえず MessageBox.Show("pictureBox2がクリックされました"); }
266 :
デフォルトの名無しさん :2010/02/08(月) 18:41:38
でも微妙にうまくいかねえw
マルチラインでテキストを改行した時に、行と行のスペースを調整することは出来ますでしょうか?
出来るかも
画像うんぬんやりたいならWPFに移行しろよ
レベル低い奴の相手をするほどヒマじゃない
>>270 スレタイを音読3回。
君が要らない子だと分かったら、黙ってブラウザ閉じなさい
画像をプログラムに埋め込むとロードが速くなったりしますか?
ビットマップを自分で打たせるのか?
おいなにをモタモタしてんだ? テスト用のプログラムを書いて測ればわかる事だろ? はやく作れよ
276 :
デフォルトの名無しさん :2010/02/09(火) 02:20:10
埋め込んだら起動が遅くなるしなあ その例ってのはリソースなんでツールバーのアイコン画像とかそんなのだよ あと何をやろうとしてるの?
Class A Class B : A と2つのクラスがあったとします。 ここでたとえばデータフォルダ "C:\data" という情報を2つのクラスが共に共有しなければ ならないとき、その情報をどう渡したらいいでしょうか? いくつか方法を考えてみました。 a) Main()メソッドの中にデータフォルダの変数(string)を定義し、Class AやClass Bのコンストラクタ を呼び出すときにその変数を渡す。 b) グローバル変数としてデータフォルダの変数(string)を定義し、Class AやClass Bのメソッドに 読み込ませる。 c) 外部ファイル(INIファイル)にデータフォルダの情報を保存しておき、Class AやClass Bのメソッドに この外部ファイルを読み込ませてデータフォルダの情報を取得させる。 a)〜c)どの方法がいいでしょうか?あるいはこれよりいい方法がありましたら教えてください。
279 :
デフォルトの名無しさん :2010/02/09(火) 03:16:26
好きなように 正解はないよ 仕事でやる場合は力持った人の好みでルールが決まるだろうけど
どうでもいいけどその条件でb案を採用する理由はねえな 書いてない条件があるってのが恒例だろうけど
>>278 俺はいつもa法だな。おかげで引数イッパーイさ(´・ω・`)
個人的なものしか作ってないけど そういう設定を持つクラスをstaticで扱えるようにしてそこを参照してる その設定自体は基本xmlにしてるけど、面倒くさいときはそのまま内部で書いてる
まあ、設計しだいよねぇ。 その string を参照するのが A, B だけなんだったらコンストラクターで渡すし、 「アプリ全体の設定」みたいなものだったらそれ用のクラス作って public const もしくは public static readonly メンバーにするかもしれないし。
settingsから読めばいいじゃない
286 :
デフォルトの名無しさん :2010/02/09(火) 09:26:41
>>265 DrawImageの際にきっちりと矩形を設定しないとダメだぬぅ
(画像のDPIの値をみてうんぬんしているから位置だけ指定のときは2つの画像のDPIが違うとモヤっと描画されてしまう)
g.DrawImage(Image, Rectangle, Rectangle, GraphicsUnit.Pixel);
>>290 でしゃばりキチは別のスレでオナヌーしてくれ
>>290 新参者なんかな?
このスレはスレタイからわかるように初級者用C#スレッドで、
C#, C♯, C#相談室ではあまりにもくだらない、低レベルと思われる
ため質問する事をためらう人に対してできたスレッドで
2002年から初回スレ名「くだすれC#」として開始されたもの。
>>293 そのスレッドは無視すればいいだけのことじゃね?
ウェブブラウザコントロールについて教えてください。 下記のようにSayMove.site.jsを読み込んでflvのURLを取得して alertで表示するところまではうまくいったのですが、取得したURLを C#側に持ってくることができません。どのようにしても 持ってくればいいでしょうか? HtmlDocument doc = web.Document; if (doc == null) return; HtmlElement jsElem = doc.CreateElement("SCRIPT"); jsElem.SetAttribute("language", @"JavaScript"); jsElem.SetAttribute("type", @"text/JavaScript"); jsElem.SetAttribute("src", @"e:\SayMove.site.js"); if (doc.Body == null) return; doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, jsElem); string scripts; scripts = "alert(getVideoDetail(location.href)['videoUrl0']);"; web.Url = new Uri("javascript:" + Uri.EscapeDataString(scripts));
297 :
デフォルトの名無しさん :2010/02/09(火) 16:39:35
ほんとに初心者で申し訳ないです... Windowsアプリケーションを作成してるのですが、 tableLayoutPanelのCellの中に文字を挿入するのはどうすればいいのでしょうか?
TableLayoutPanelは単にコントロールの配置を助けるもので、 文字を入れたい場合はTableLayoutPanelにLabelなどのコントロールを 配置して行うしかない。
299 :
デフォルトの名無しさん :2010/02/09(火) 16:53:01
そうなんだ...orz ありがとうございます! エクセルのようなグリッドを作成することはできないのですか...?
グリッドだったらDataGridViewコントロールがいい。
301 :
295 :2010/02/09(火) 16:57:46
できました。 失礼しました。
302 :
デフォルトの名無しさん :2010/02/09(火) 17:08:08
DataGridViewコントロールを配置してみました。 やはり文字が挿入できないです... そして列は増えるのに行が増えない... どうすればいいでしょうか><
303 :
デフォルトの名無しさん :2010/02/09(火) 17:09:25
DataGridViewコントロール使ってみました。 やはり文字が挿入できない... そして、列は増えるのに行が増えません... どうすればできますか?><
もうちょっと自分でがんばれよw
305 :
デフォルトの名無しさん :2010/02/09(火) 17:17:35
たしかにそうですよね... C#のwindowsアプリケーションのコントロールについて詳しいサイトや書籍ありますか? このまま頼りっきりになってしまうのは申し訳ないです
308 :
デフォルトの名無しさん :2010/02/09(火) 17:22:57
ありがとうございます! 自分なりにやってみます!
つーか「c# datagridview」でググレば最初に出てくるわけだが それくらいやれよゆとり
310 :
デフォルトの名無しさん :2010/02/09(火) 17:25:27
ググレカスでした... すいません...
311 :
デフォルトの名無しさん :2010/02/09(火) 17:32:41
腹減った...
すみません。dllの関数にListやDictionaryは渡せるのでしょうか。 置き換えられる型が思い当たらないので、一言お願いします。
>>312 DLLの関数って言ったって、色々あるだろ。
C言語?
渡せるかどうかではなくその関数とやらが何を要求しているかだと思うのだが
C#でDLL作れるのはわかってるけど逆アセンブルされたくないのでコアだけC++で書こうとしてるとエスパー
Cのdllなら大抵配列でいい さすがにdllの関数でハッシュテーブルの実体を引数に取るものは滅多に見かけないが もしそんな頭のおかしいものを使うならちゃんとしたCの知識がないと無理だと思う
317 :
312 :2010/02/09(火) 19:40:14
すみません。出来るだけ簡略してお伝えできると思い、申し上げたのですが、 C#、VS2008でクラスライブラリを用いてWindows.Form,Dataを参照し、ジェネリックを使ったりと、 結果ビルドしたDLLを別プロジェクトでDllImportで読み込んだ末、 メソッドを呼び出し後、ジェネリックからマーシャリングできません(の様な例外)が出ました。 ↓以下は私の誤認だと思いますが、 DLLは一緒くたにアンマネージドというものに変換され、 C#はそれを呼び出す時にマーシャリングという作業が必要で その型に当てはめるための変換がいるため、ジェネリック型からは変換できない と認知しておりました。 木構造のループ処理などができればと思っていたもので、TreeViewやら、 キーを持つDictionaryなどまとめて試行してみたという事です。 すみません。事後報告です。
hashset<string>をchar**に入れようとしたならまだしもdictionary<,>をどんな関数に放り込もうとしたのか まったく正気の沙汰とは思えない
319 :
デフォルトの名無しさん :2010/02/09(火) 19:52:39
渡せるのはintとかstring(char*)とかそれらを含む構造体くらいじゃないの? クラスとかだとうまく渡せるのかね?
>>284 > 「アプリ全体の設定」みたいなものだったらそれ用のクラス作って
> public const もしくは public static readonly メンバーにするかもしれないし。
通知専用のクラスを新たに設定するという方法もありましたか。
a)、もしくはその方法でトライしてみようと思います。
catch
XmlDocument.Validate メソッドについて質問が有ります。 ValidationEventHandlerで、エラーが発生したノードを特定することは可能でしょうか? ex.Messageからノード名は取得できますが、名称だけなため、同名のノードが存在すると特定ができません。 アドバイスをお願いします。
finally{ トライ結果を書き込む; }
tes
>>323 ValidationEventArgsのExceptionが多分XmlSchemaValidationExceptionにキャストできるはず
327 :
デフォルトの名無しさん :2010/02/10(水) 03:44:09
まいった・・・ C#だとソース配ってるような物ってことでWTLに手を出したんだが C#のあまりにも快適な開発環境と情報量の多さに慣れてしまってかなりシンドイw よくわからなくてもドット打ったりしていけば中がどうなってるか さぐれたc#がうらやましいw
MFCなら快適なのに
MFCなんてあまりに泥臭くてやってられないな。
Javaなら快適なのに
そしてC#に戻る
ソースを見られるのがそんなに気になるものかな。 コメントのないソースなんて見れたもんじゃないだろ。 元のソースがあっても見たいとは思わないな。
マシン語見てきた立場からするとあまりも.netはゆるすぎる コメントの有無なんてどうってことはない
時代はライセンス縛りなんで
ソースが見えていることで著作者の権利が成立し得ないのならばGPLとかBSDLは何だって話になる。 お笑い種だ。 頭が30年前なんだろう。
何回目だこの議論 初心者乙にも程があらあ
337 :
デフォルトの名無しさん :2010/02/10(水) 09:28:11
別にいいんじゃね? GPLにしたって違反してるやつがいたって粘着するにもいろいろ大変だし あらかじめ対策しておくのもある意味普通だと思うけどね
750 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/21(火) 15:55:06 どの言語でも初心者が一番初めに気にする所だよな。 「ゲームは作れますか?」と「中身の暗号化できますか?」は。 少なくともそんなことを聞かなきゃ分からない内は全く関係のない話だ。
748 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/21(火) 15:48:12 今時はライセンスで縛るから丸見えでもどうでもいいのです 難読化くらいはしてるかもね でも初心者には関係ないよ お前のコードなんてわざわざ見る気にもならないからね
64 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/14(火) 16:37:56 つ 難読化 ・・が続く、いつもなながれだな。飽きないね。 65 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/14(火) 16:59:37 そこまでして見たがる人間がどこまでいるのかと 自意識過剰なんじゃね?
つか向いてないからC++に移って戻ってくるなよ。 質問ならともかく、自分で選んだ道のクセに愚痴を書き込みに来るな。
初心者スレなんだしいいじゃないの で、ライセンス縛りって具体的にどうやるの?
343 :
デフォルトの名無しさん :2010/02/10(水) 09:36:32
( ゚д゚)… ( ゚д゚ )
他人のソースを参考にしたorしたい人 自分の汚いソースが見られたくない人 俺の天才的アルゴリズムがただ見されるのは辛抱できない これ以外にパターンあるのかな
初心者スレと雑談スレとくだスレの区別はしろよw
>>343 こっちみんな
天才かどうかは知らんけど、なるべく需要がありそうだけど
競合がいないところへソフト出す場合は乱立避けるたに
わざわざヒント与える必要もないからねえ
初心者がソースを見られたくないのは、 1)めちゃくちゃ汚いソースだから 2)どっかからぱくって来たソースだから
ここのテンプレって凄く伝統的なんだな…。
金取る場合は隠すが フリーで出すならブラッシュアップしたほうがいいだろ
blogにコードかいてたらわんくまに絡まれたことがあるんだけど ああいうことにはならんの?
352 :
デフォルトの名無しさん :2010/02/10(水) 09:44:17
>>351 なにそれw
俺のところのコードぱくったな!とか?
353 :
デフォルトの名無しさん :2010/02/10(水) 09:44:42
>>348 パクる能もない。
パクって来ても使えないから。
前者のみ。
ソースのあるフォルダまでexeに残すのはなんとかならんのか
/debug:pdbony をはずす。
pdbonly エルが抜けた。 プロジェクトービルドー詳細設定のデバッグ情報 pdb-only を none
試さずに答えが知りたいんですよ
c++じゃないんだしちょこっとコード書けば作れるだろうに
Mainプログラムからスレッドを立ち上げて、そのスレッドからコンソールプログラムを子プロセスとして起動してるんですが、 コンソールプログラムが終了したかどうかをMainプログラムから知るにはどうしたら良いのでしょうか? 今は、グローバル変数でフラッグを作っておいて、スレッド内で子プロセスを監視して、終了したらフラッグをたてていますが、 直接、Mainプログラムから知りたいのです。 普通はどうしてるのでしょうか?
invoke
わざわざ待ちスレッドもたなくてもSendMessageで一発メッセージ送ってもらえば済みそうな悪寒
>>362 ,363
具体的にどうやるのでしょうか?
>スレッド内で子プロセスを監視して、終了したらフラッグをたてています Main内でやれよ
副スレッドがコンソールの終了を待っている間Mainは何してんだこれ
Mainがフォームなのかコンソールなのかもよく分からん
関数を引数にして渡すことは可能でしょうか?
デリゲートで出来ると思われ
ですな。
すげーいまさらだが子クラスが親クラスの非公開メンバを参照できることを初めて知った すげー便利だw
参照できないでしょ
372はクラス内クラスのことを言ってるんじゃね?
内部クラスでインターフェイスを実装するときに必須だけど Javaと違ってC#ではそういうことをする機会が少ないので滅多に使わないよね
Stringとstring、Objectとobjectは何が違うの?
クラスとメソッドの違いじゃないの?
>>377 先頭大文字の方はCLRが定義しているクラス名 本来はSystem.Stringだけど普通using System;する
先頭小文字の方はC#の予約語 stringはSystem.Stringのエイリアス objectも同じ
グーグルは大文字小文字無視で検索してくれるから stringとstring とかでググレばいいのに
どっちでも良いわけだな
>>379 IDEで書いてればわかると思うんだよね
それって
IDE使ってないのかな?
予約語とかはブルー系だし、クラスとかは水色のちょっと黒が入ったようなのだし
F#始めてからラムダ式が理解できるようになりました ありがとうございます
どういたしまして?
日数の計算が簡単にできる方法を探しています。 例えば、2007年4月10から今日までの日数とか 分かりますか? よろしくお願いします。
var a = new DateTime(2007, 4, 10); var b = DateTime.Now; var days = (b - a).Days;
388 :
デフォルトの名無しさん :2010/02/11(木) 13:02:27
2月11日雨 普段C++を使う俺がたまにC#を使うとそのかんたんさに驚く ちょっとしたWinアプリがささとできる C++なんか文字列の分割すら自前でやらなきゃいかん
まとめ 低脳はC#でも使っとけw
料理する前にフライパン自作するようなもん
フライパン作る時間と、自作フライパンのよさの比較の話だね。 いいとこ取りすればいいのに、
悪くなることはあっても良くなることはまず無いだろ カレーをルーから作るのとはわけが違う
いや、どうしても1時間に200個のオムレツが作れるようにしたくて、 自作のオムレツ専用フライパンをつくってなんとかしたとか、そういう雰囲気で。 プログラム的に味は、変わらんと思うけど。
>>389 頭のいいヤツは、選べるなら C# を使うと思う。
同意 書きやすいし読みやすいから菜
同意 解析しやすいしパクリやすいから名
>>394 そんなあからさまな煽りに反応しちゃうから馬鹿にされるんだろw
Ruby を使っているオレが、C# を覚えようとする場合のオヌヌメ本を教えて。 まずは、コマンドラインオプション、正規表現、標準入出力で、 フィルターソフトが書ければいい。 できれば、http の記述があると助かる。 いまは、部品をペタペタ貼るようなGUIはいらんです。
オライリー
ヘルプとサンプルプログラムで十分だろ。
GUIがいらないならrubyでええやん
ruby より C# の方が情報多くていいじゃん。
はい、釣りね。 次の質問の方、どぞー。
Ruby 1.8.6 を使っているんだけど、1.9 にするには、1.8.7 で警告表示を見て、
いろいろ書き換えなければならないんだよ。
Ruby 1.9.1 の歩き方
ttp://jp.rubyist.net/magazine/?0025-FirstStepRuby191 結構、メンドー。この労力を使うんだったら、C# を覚えちまった方がよさげ。
最近は、Windows ばかりで、Linux 使わないし、Ruby は Windows に冷たいし。
Visual C# Express Edition 本を立ち読みしたら、コマンドラインについて、
全く書いていない。
読点の打ちかたがすげえムカツク
アポロ副島と同じ病気持ちだね
コマンドラインプログラムについて質問があります。 VisualC#2008でコマンドラインプログラムを作りたいと思っています。 単純なものはできるのですが、 たとえばftpみたいに、 プロンプトを独自のものに置き換えて表示して、 対話的にコマンドを実行して、 処理が終わったら、exitで終了するようなものを作る場合、 どのように既存のプロンプトを消したらよいのでしょう?
それプロンプトで実装する必要あんのかなあ? 独自のプロンプトって要するにターミナルみたいなもんでしょ
Read() とか ReadLine() すればいいだけ。
プロンプトを独自のものに置き換えて表示してるわけではないとおもうけど
>>409 「数字を入力してください」とか出すのと同じ理屈だよ
>>409 C#に無関係の部分で知識が不足しているようだから、CUIについて理解してからまたおいで
新規プロジェクト作るときにConsoleアプリケーション選べば良いだけだろ
DataTable で、任意の位置に列を追加することは可能でしょうか? たとえば col1 から col10 と言う名称で列を DataTable.Columns.Add で追加していたとして、 その後、新たに Columns[ 0 ] の位置に col0 を追加する。ってイメージなのですが。 これが出来ると、DataGrodView にそのままバインドすれば済むので楽かなーと。
すいません。コメントの付け方で質問です C#って、コメントを付けるときに 関数やクラスだったら /// <summary>関数名</summary> /// <param name="xx">なんちゃって変数</param> 見たいにXMLのタグでかけるじゃないですか それで、namespaceにも同じように付けようとしら XMLコメントが有効な言語要素の中にありません というワーニングが出てしまいました namespaceにもコメントを付けたいときはどうすればいいんでしょう
ColumnsにAddしたあとSetOrdinal
423 :
デフォルトの名無しさん :2010/02/11(木) 22:31:22
>>420 MSのFormのソースだとこんな感じだね
//------------------------------------------------------------------------------
// <copyright file="Form.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------------
/*
* Copyright (c) 1999, Microsoft Corporation. All Rights Reserved.
* Information Contained Herein is Proprietary and Confidential.
*/
namespace System.Windows.Forms {
using Microsoft.Win32;
<省略>
using System.Windows.Forms.VisualStyles;
続き /// <include file='doc\Form.uex' path='docs/doc[@for="Form"]/*' /> /// <devdoc> /// <para>Represents a window or dialog box that makes up an application's user interface.</para> /// </devdoc> [ ComVisible(true), ClassInterface(ClassInterfaceType.AutoDispatch), ToolboxItemFilter("System.Windows.Forms.Control.TopLevel"), ToolboxItem(false), DesignTimeVisible(false), Designer("System.Windows.Forms.Design.FormDocumentDesigner, " + AssemblyRef.SystemDesign, typeof(IRootDesigner)), DesignerCategory("Form"), DefaultEvent("Load"), InitializationEvent("Load"), ] public class Form : ContainerControl {
>>422-424 ありがとうございます。
出来無いっぽいですね
MS自体も何事もなく普通のコメントを記述してるみたいだし・・・
名前空間は同じ名前空間がいくらでも出てくるからね アセンブリ一つで完結できるならまだしも 複数のアセンブリに同じ名前空間を使えるわけで そうなると何をその名前空間のドキュメントにするの? って話になる
int[] string[] これらの従来の配列はジェネリックのList<T>を使って List<int> List<string> と表すことも出来るようになった。従来の配列の機能は ジェネリックのList<T>を使って全て再現することができるようになったわけだけど これってすなわち従来の配列はもはや無用の長物に化したと言うこと? それともジェネリックのList<T>にはできない芸当が従来の配列にはできたりする?
429 :
デフォルトの名無しさん :2010/02/11(木) 22:55:46
>従来の配列はもはや無用の長物に化したと言うこと? そんなことは無いと思います
"ただの配列"が使いたいときもある。
>>428 固定長と可変長じゃ用途も違うでしょ
そういやどっかに配列死ね主義者のサイトがあったなぁ
そもそも配列がないとList<T>作れないし 構造体の配列では構造体のメンバに直接アクセスできるけどList<T>だとそうはいかなかったりするし P/Invokeの受け渡しには配列しか使えないし 作ったりアクセスしたりする速度は配列の方が遥かに速いし
>>421 thx
そのメソッド、全然気付かなかったです。。。
助かりました。
関係ないけどなんでList<T>の容量って0の次は4なんだろう。もっと取ればいいのに。 4なんかほぼ確実にすぐオーバーして再確保することになると思うんだけど
>>432 つまりint、stringといった値型の配列はList<T>に移行し、
構造体やクラスの配列は従来通りの配列を使うべし
というのがこのスレの総意ということでおk?
>>435 List<string>でもかまわんでしょ
stringだと動的に増減できないんだし
デフォのサイズなんか万人が納得する数字なんて決められないんだから 2以上の適当な数字でいいんでしょ。 「特に指定しない限り富豪モード」より「特に指定しない限り節約モード」の方が 好まれる傾向なんだろうから悪くない数字だと思うけど。
すぐに普遍解を求めるのは悪い癖だな 状況に応じろ
コンストラクタでサイズ指定できるじゃん
Formのオパシティーで透明度が設定できるけど、文字まで色が薄くなってしまいます。 文字はそのままにするにはどうしたらよいでしょうか?
>>435 Listは一度使うとはまるな。
なぜListをC#で最初からデフォルト配列として採用しなかったのか理解に苦しむ。
Pythonチックになるな
>>443 配列の方が速度が出るケースが多いから。
C#は仕様の単純性と速度が比較に登れば速度が優先される、
実務を優先させたプログラミング言語だ。
>>445 言語のとろさを許容できるほどマシンが成長したというかなんというか
C#ができたころだときついだろうな
ネットワーク経由のパスワードつきの他のマシンに接続して、 そのマシンの共有フォルダにファイルを書くには、 どうすればいいでしょう? パスワードがなければ、 File.Copy("original.txt",@"\\other\shareddocs\copy.txt", true); でよいのですが…。 アドバイスよろしくです。
>>446 PCがどんなに高速化しても、それは全ての分野でパフォーマンスの考慮を不要に
するほどの物ではありえないから、そういう考えはナンセンス。
ナンセンスだね。
>>426 もういないかもしれんが…Sandcastle 向けの話。
まず、ドキュメントコメント自体では namespace はサポートされている。
でも、C# は言語的にそれを生成できない、というのが前提。
なので、Sandcastle の場合、NamespaceDoc っていうクラス作って
それにつければそれを名前空間のコメントとして使用するようにしてある
ただこれは、正直美しくない(バイナリメタデータに残るしな)と思うので、
個人的に使っている方法は、NamespaceDoc.xml というファイルを作って
これを
<member name="N:MyNamespace">
<summary>...</summary>
...
</member>
こんな感じにして、ビルドプロセスいじって XSLT あたり使ってマージ
している。ドキュメントコメントファイルの生成結果は結局のところ XML
なので適当にやればいいんですよ
453 :
デフォルトの名無しさん :2010/02/12(金) 03:20:18
>>451 もうその辺になってくると
System.Text.RegularExpressions.Regex
を使うしかない
まあこの辺は正規表現のプロもいるだろうから晒してみてもらうついでに上げる
変数とかは自分で調整してくれ
>>451 のアンカー処理
wk = System.Text.RegularExpressions.Regex.Replace(wk,
@"(<a href=\x22)(\x2e\x2e\x2ftest\x2fread\x2ecgi\x2f)([\w]+\x2f\d{10}\x2f\d+\x22\x20target=\x22_blank\x22>)(>>)(\d+)(</a>)",
"$1A$5\">>>$5</a>");
レス内のURL処理
wk = System.Text.RegularExpressions.Regex.Replace(wk,
@"s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+",
"<a href=\"$&\">$&</a>");
BEアイコンの有効化
wk = System.Text.RegularExpressions.Regex.Replace(wk,
@"(s?sssp?)(://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)",
"<img src=\"http$2\"> <br>");
ちなみにBEアイコンの処理はレス内URL処理の後にしないとおかしくなるので
というか正規表現の文字なんて外部ファイルに書いておいて読み込んで処理する形にしておいて スキン作ったりする人がいるように好きなようにやらせておけばいいんだけどね 専ブラとしてはサポート用タグの埋め込みさえやれば後はスクリプトなり正規表現なりで 余裕で対応できるし
HttpUtility.HtmlEncode/HtmlDecode
>>454 ありがとうございます。
専用関数は無いので自身で記述する必要があるわけですね。
>>458 俺もあんまり詳しくないけど
>>457 のようにアンカーだけに限って言えばOKなのかもしれないけどね
datの中のアンカー部分は2chの鯖関連のアドレスが埋まってるので正規表現で自分のブラウザに
都合のいい形に直す必要があるかなあと思って俺は
>>454 のようにやってる
ふーん
>>447 WNetAddConnection() とかで接続する。
HttpUtility使う場面で正規表現はないだろ…。
463 :
デフォルトの名無しさん :2010/02/12(金) 08:57:20
>>462 2chのdatの中のアンカーの表現ってこんな感じなんだわ
<a href="../test/read.cgi/news/1265910841/58" target="_blank">
>>58 </a>
それ以外のところってレスの本文の中のAAとかなんでIEコンポーネント使うのであれば
わざわざエンコードを戻す必要がないというか
>>58 </a>
この部分は>をエンコードした状態ね
投稿したらだめだったw
表示部分をtextboxとかHTMLを認識できない物にするならHttpUtilityで戻すとかかね?
WinFormsで発生するイベントを、Spy++のような感じで外からトレースをかけるツールはないんでしょうか。
UWSCみたいな感じ?
メインフォームから子フォームをshowすると、ウインドウズの下のタスクバーに子フォームのアイコンが表示されるんですけど、これを非表示にするにはどうしたら良いのでしょうか?
子のShowInTaskbarいじれ
たしかに出なくなった。サンキュー照代!
プログラムの中から、.netのバージョンを知るにはどうしたら良いのでしょうか?
System.Environment.Versionがそうだが、 CLRのバージョンが帰ってくるので2.0/3.0/3.5の区別がつかない。 あとはSystem.Coreがあれば3.5とかで判断するかだな。
レジストリー見ればいいんじゃない
レジストリのどこですか? と当然聞くわけでして・・・
最近使ったファイルをメニューに追加したいんだけどもっとも簡単な方法はなんでしょうか?
>>476 MenuItemなりを動的に作ってMenuに追加するだけと思うけど
印刷機能をつけたんですけど、5分以上かかって「応答なし」になるんです。。。 こういう場合、DoEventsをつけたほうがいいんですよね?
スレッド使った方が
スレッド厨(笑)
印刷終了を待つ必要があるの? 印刷処理なげて終わりでいいじゃん。
>>481 dataGridViewの入力データを読み込みながら出力してたんですけど
一回メモリに読み込んで印刷処理を別スレッドにしてもいいかもですね。
ありがとうございます。^^
DataGridViewから印刷という発想が間違ってる バインド元から引っ張ってくればいいだろ
>>483 データベースとして使ってなくて、特定のフォルダの中身をよみながら
dataGridViewに反映させてたんです。。。
データベース使おうが使わなかろうがDataGridViewはバインドして使うもんだ
DataGridView バインド でぐぐればでてきそう というかc#はいっぱいtips転がってるだろ C++からこっちに来て部品の多さ情報の多さ使いやすさ に感激したくらいだから
>>487 わかりました。調べてみます。。。
御礼は調べて見つけたサイトでしますね。。。
490 :
478 :2010/02/12(金) 21:22:56
ID欲しいわ 成りすましうざい
ですね
そういやDataGridViewの内容をそのまま印刷するクラス群を誰かがupしてたな。
酉でも付けろ
ですおね
これでいい?
いいよ、斬新だね
いいよいいよ〜次は前かがみね
C#にはJavaのSSLsocketのようなSSLで通信する ライブラリってありますか?
sslStreamでよければ
ご苦労
パシリ乙
次からはもうちょっと早くな
勝手に通信したらいくないよ(´・ω・`)
いくないよ…(´・ω・`)
(´・ω・`)
(´・ω・`) …
C#超素人です。 System.IO.StreamReader myFile = new System.IO.StreamReader("D:\\output.txt "); string myString = myFile.ReadToEnd(); という風に記述して、txtファイルからの読み取りを行っています。 この時にtxtファイルに新たな情報が書き込まれるはずなのですが、 実行中は新たな情報が書き込まれないようです。 一度、読み取りを開放すればよいのでしょうか? 開放する方法も合わせて、教えてください。
毎回StreamReaderをnewし直せばたぶん大丈夫。 ただ、それならSystem.IO.File.ReadAllText("D:\\output.txt")のほうが簡単。
StreamReaderでファイル読んだあとってちゃんと.Close()かけてる? 結構忘れちゃうんだよね。 人によっては using ステートメント使って Close() を呼び出さなくても 自動的に閉じるようにしてるらしいけど。
>>501 ,511
ありがとうございました。
しかし、以下が出てダメでした。
別のプロセスで使用されているため、
プロセスはファイル 'D:\output.txt' にアクセスできません。
>>512 output.txt使ってるアプリとじろ
@がないから\が認識できてないとかだったらワロス
って\\だったorz
>>512 その辺はFAQレベル。
Windowsでは読み込みモードの他にFILE_SHAREフラグの設定がある。
詳しくはCreateFile APIのドキュメントを読め。
エクセルやパワポの様な折れ線グラフをアプリ上に表示したいのですが 何かいいコントロールありますか?
MSが.net3.5出した時に一緒に別コンポーネント出してたきがす。
520 :
519 :2010/02/13(土) 19:17:05
C#超素人がこんなところで質問するとは思えない
スレタイ全否定ですか
524 :
デフォルトの名無しさん :2010/02/14(日) 14:36:07
経営シミュレーションをする場合、無償版でやるとしたらどういうデータベースでやればいいですか? アクセスとか使ったことあるけど プログラムソフトからDB操作とかやったことないから流れがわからない ひょっとしたらDBに頼らずに配列とか構造体にガシガシ突っ込むやり方でいいの?
とりあえずエクセルで間に合わなくなったらまたおいで。
なんという答えになってないレス。よっぽど
>>525 の方がまし。
Excelみたいにユーザーがやったことを覚えて、マクロにする機能を組み込みたいんだけど、簡単に実現するにはどうしたらよいでしょう?
Excelみたいにユーザーがやったことを覚えて、マクロにする機能を組み込めばいいよ。
マウス操作とか、ってレベルでやるか、コマンドレベルでやるか。 コマンドレベルなら、記録できる操作にあらかじめコマンドを割り振っておく。 そんで、記録のときに、何かのコレクションに突っ込んでいく、みたいな感じかね。
需要の少ない高価なアプリでしばしばそういうのがあるけどすごく使いづらい
呼ばれたToolStripItemを保存しておいて、順番にPerformClick()を呼んでいくとか
UIAとか
いずれにせよ簡単にはできないのでこんなところで質問するようなレベルなら諦めなさい
諦める(´・ω・`)
素直さにワロタ
ローカルIPでは接続できているんだから、ネットワーク構成に問題がある可能性が高い。 とりあえず、サーバー実行時にListenしているIPアドレス、ポートが正しいか確認せよ。 確認方法やネットワーク構成についてはスレチなのでここで訊くな。
Qt CreatorをFreeBSDにインストールしたいんだけどpackageで提供されていたっけ?
C#スレに誤爆とかorz・・・
永井豪テイストが入ってるな( ・ω・)y─┛〜〜
C#でエラー起こった時にログを吐きだす方法ってどうすればいいんだ? 予期せぬ例外が発生した時にログを出す方法は分かるんだが 応答せずに止まったりしたときにエラーログをtxtとかに保存する方法を知りたい。
無理
可能
どっちやねん
547 :
538 :2010/02/15(月) 00:35:21
>>539 ありがとうございます
IP、ポート、ルータの設定等を確認してみました
IP、ポートは共に正しかったのですが、タイムアウトしていたのではなく
RST/ACKパケットが送信されていることが分かりました
確かに開放されているポートで、他ソフトでは正常に通信出来ています。
また、ファイアーウォールの例外設定も行なっています
何か原因と思われることは他にあるでしょうか?
ルーター使ってるならNATは?
549 :
538 :2010/02/15(月) 01:16:50
>>548 NATは設定していません
ファイアーウォールを切ってもダメでした
ルータ周りを調べてみようと思います
問題外だな。
「ルーターでポートマッピングして、LAN内からルーターのグローバルIPを指定」とかアホなことしてるんだろうと思って、 若干スレチではあるが「プログラミング一般」の範囲内に収まるように配慮して回答したのに、無駄にしないでくれよ。
ルーター内からグローバルIPでアクセスできないだろ。 明日、会社からアクセスしてみろ。
553 :
538 :2010/02/15(月) 02:35:07
>>551-552 仰る通りでした・・・
会社からアクセスしてみます
ありがとうございました
トイレ(´・ω・`)
なんだこのオチ
ヘアピンNAT
ルーターによってはできるけどな、YAMAHAのとか
スタティックメソッドと同名のインスタンスメソッドって書けないんだっけ?
かけない
ありがとうだぜ
C#でhttpsの通信てどうやんの? 具体的には、IDとパス入れるサイトのログイン後のhtmlを取得したい
DataGridViewのRowヘッダーを"右クリック"した時の処理を指定したい (具体的には右クリックしたヘッダーの列全体を選択したい)のですが、 どういった方法がありますか?
DataGridView..CellMouseClickイベントを拾って ヘッダをクリックしてるようなら選択すればいい
いえいえ
プロパティグリッドの中でアイテムコレクションをクリックするとコレクションエディターが出てくるけど、このコレクションエディターでOKが押された時に、あるいはプロパティ値が変更になった
>>567 すいません、続きです。
あるいはプロパティ値が変更になった時に発生するイベントは取れないでしょうか?
>>566 mixi巡回ロボ作ったとき俺もそれ見ながらやったけどできたよ
DataGridView について、教えてください。 列にアイコンを表示することが出来ます。 これはひとつの列にひとつのアイコンと言うことなのですが、ひとつの列に複数のアイコンを表示することは出来るでしょうか?
>>568 INotifyPropertyChanged
572 :
デフォルトの名無しさん :2010/02/16(火) 13:59:30
お願いします。 1枚のビットマップを走馬灯のようにスクロールさせたいのですが、どの ようにしたらよいでしょうか。
WinFormsではそういうことは難しくて個別の対応が必要なので一般には言えません 簡単にやりたかったらWPF使ってください
どこまでやっててどこからわからないの? 走馬灯ってよくわからんが、横スクロールでループさせたいなら 基準点を右端にしたやつと左端にしたやつで2回書けばよろしい
PictureBoxを時間で移動させとけ
576 :
572 :2010/02/16(火) 14:15:13
ありがとうございます。 「走馬灯のように」ですが、一番左の列を一番右にもっていき、それを繰り 返したいです。 可能でしょうか。
PictureBoxを2つ使ってもいいけどそんな場当たり的な方法よりも OnPaintをオーバーライドしてDrawImageを2回呼ぶ方が応用は利く
今はどこまでできてるの、画像表示して横に流すとこくらい?
画像の方を表示枠の分だけ重複させておけば描画は1回で済む トレードオフについては自分で判断するように
タイマーを使ったオーソドックスなのはこんなかんじ。 Bitmap bitmap = Properties.Resources.MikuMiku; Point p1 = new Point(0, 0); private void pictureBox1_Paint(object sender, PaintEventArgs e) { DrawScrollImage(e.Graphics); } private void timer1_Tick(object sender, EventArgs e) { if (p1.X >= bitmap.Size.Width) p1.X = 0; else p1.X = p1.X + 4; using (Graphics g = pictureBox1.CreateGraphics()) { DrawScrollImage(g); } } private void DrawScrollImage(Graphics g) { g.DrawImage(bitmap, p1); g.DrawImage(bitmap, new Point(p1.X - bitmap.Size.Width, p1.Y)); }
へえ
582 :
572 :2010/02/16(火) 15:24:35
ありがとうございます!!! なぜDrawImageを2回呼ぶのかさっぱり意味がわかりませんでした が、マイナスの値も使えるんですね。 本当にありがとうございました。
それだと画像の幅が4の倍数じゃないときに一瞬カクつくんだぜ と一応突っ込んでみる
コピペじゃなくて理解しようとしろよ
>>580 軽く添削してみようか
・計算の間違い
> if (p1.X >= bitmap.Size.Width) p1.X = 0;
> else p1.X = p1.X + 4;
確実に描画範囲を超える(おそらく、前回の描画が残って何pxか重複する)
増加直後に判定しないと駄目、というか剰余を使え
・描画処理は一箇所(Paint内)にまとめる
描画内容の更新をしたい場合は、InvalidateかRefreshを使う
・タイマーイベントでは描画処理を行わない
Invalidateを使って描画タイミングはOSに一任すべき
処理が重いときなどに、描画がフレーム落ちするのは許容される場合が多いが、
内部計算はできるだけ正確性を確保する必要がある
一般論なので、572が不正確でもフレーム落ちはNGというならRefreshを使う
アニメーションでInvalidateはないな。チラついてかなわんのじゃない。
doublebuffer
ちらつくのはバックグラウンドを描くから
だそうです
WPFだとDrawingBrushやRectAnimationで軽く実現できるのだが、 silverlightに持っていこうとすると度々それが無かったりするので困る。
>>562 に関連してなのですが、この右クリックによる列の選択とContextMenuStripの呼び出しを
同時に行いたいです。DataGridViewにContextMenuStripを設定すると選択がされなくなってしまうのですが、
何か良い方法はありませんか?
一応CellMouseClickイベントハンドラの内部からContextMenuStrip.Show(int x,int y)を呼び出すことで
機能は果たせたのですが、もっと良いやり方がありそうな気がします。
C++のときのコピーコンストラクタってC#ではどうなったの?
わかりにくいから削除
ほんとか?
>>592 C#のクラスオブジェクトの取り扱いは、
C++で言うとnewでヒープに確保してそのポインタを持ち回っている状態。
だから、コピーコンストラクタは基本的に出番がない。
C++でもコピー不可のクラスなんて珍しくはなかったでしょ。
C#ではそっちのほうが基本というわけ。
XElementのように、自身と同じ型を引数に取るコンストラクタを持たせることは可能。
言語上、何か特別扱いされることはないだけ。
ただ、複製を作るには、Cloneメソッドを定義してやるほうが一般的。
structは値型、これにはデフォルトのコピーコンストラクタがある。 反対にユーザーは一切定義できない。
最近のMSはICloneableも失敗だったから無くしていこうという方向らしいよ
>>595 > C#のクラスオブジェクトの取り扱いは、
> C++で言うとnewでヒープに確保してそのポインタを持ち回っている状態。
> だから、コピーコンストラクタは基本的に出番がない。
C#で
MyClass obj_1 = new MyClass();
MyClass obj_2 = obj_1;
とやっても obj_1 は obj_2 にコピーされるわけでなく共通のポインタが代入されるだけってこと?
obj_1 を変更すれば obj_2 にも反映され、 obj_2 を変更すれば obj_1 にも反映されるってこと?
やってみればいいじゃん。
C++から移るならMSのC++とC#の違い解説読め
値型と参照型の区別が付いてない初心者とみた けどここは初心者用だからそれもありだと思った(南無
>>599 > そうよ。
> それ今まで知らなかったの?
うん、あまりクラスオブジェクトを別のクラスオブジェクトに代入する機会って無かったから( ´・ω・)
ちょっとまって・・・ コピーコンストラクタが無いってことはC#でメソッドにクラスオブジェクトを渡して メソッド内でそのクラスオブジェクトをいじった場合って、元のクラスオブジェクトに メソッドで施した変更が反映されちゃうってこと? メソッドへのクラスの値渡しは不可能ってこと?
シリアライズして渡せよ。 シャローコピーのCloneは却下な。
クラスを値渡しする必要性がよく分からん
やってみればいいじゃん。
クラスが他の共有されてるインスタンスへのポインタを持ってたら? 結局クラスの実装次第だからあんまり意味がないんだよ
順当に考えるなら大方の場合でいらないから機能として切り捨てられたんだろうけど…
値渡しはともかく、C++の参照と等価の機能は年に数度あったらいいのにとは思ったりすることがあるな。
>>597 それEffective C#にも書いてたのね。
ICloneableは使うなって。
>>613 いやーいらないでしょ
C#になれるとC++が駄目すぎる・・・
ネイティブコンパイルできて早いだけの言語にしか見えない・・・
DelphiからC#に流れてC++はほとんど触ったことないんだが
C++だと
>>598 のコードでコピーされるって話(だよな?)に逆に驚いた
使うなっていうか、使ったことも使いたいと思ったこともないけどなw むしろどういう場面で便利なんだか思いつかないよ
>>616 C#なんかでコピーしないで成立するのはGCがいるからじゃないかな・・・と思ってるけど
>>616 C#だと型が値型か参照型かでコピーされるか参照されるかが決まるから
コードを書くときに常に型に注意しておく必要があるんだよな。
それっていいスタイルなんだろうか?
他にいい案でもあるのか?落とし所としては妥当な選択だと思うのだけど
出た低能さん
>>605 も言ってるけど、引数で関数に渡したオブジェクトが変更されない保障みたいなのは時々欲しいと思う
逆に変更されることを表してもいいんだが、まぁC++で言うconstの事だけどさ
読み取り専用のインターフェイスを準備するか、 interface IFooRo { int X { get; } int Y { get; }} class Foo : IFooRo { public Foo(int x, int y) { X = x; Y = y; } public int X { get; set; } public int Y { get; set; } } イミュータブルオブジェクトを使うか。 class FooImutable { public FooImutable(int x, int y) { X = x; Y = y; } public int X { get; private set; } public int Y { get; private set; } } どっちかだね。Stringは後者。
C#のコンパイラだけでサポートするならできなくはないかもしれないけど全く意味がない 他の言語の対応を考えると無理
結局のところ陰でこっそり読み取り用のインターフェイスを作るような実装になるな。
>>616 も言ってるけどC++でポインタを渡すより値渡しが好まれるのって
たいていヒープにメモリ取ると面倒だからでしょ
タブの上に自分で作ったユーザーコントロールを貼り付けて、そのタブが選択された時だけ、 ユーザーコントロール内であるファイルを呼んでリストボックスに流し込みたいのです。 それで、ユーザーコントロールが自分が貼り付けられているタブが選択されたというのを知るにはどうしたら良いのでしょうか?
>>C++でポインタを渡すより値渡しが好まれる んなこたぁない const参照渡しが好まれる それにクラスインスタンスはポインタ・スマートポインタで管理する 初心者は値渡しを好むのは確かだが
>>627 TabControl>TabPage>UserControlっていう構造になっている
TabControlのSelectedIndexChangedを拾って
選択中のTabPageがUserControlの親コンテナと等しいかどうか確認すればいい
>>629 ユーザーコントロール内から自分の親コンテナを知るにはどうしたらよいですか?
>>630 [自分のコントロール].Parent.Nameとかかな
アクティブになったタブ内のコントロールはVisibleChangedイベントが発生した気がするが?
ですね
VisibleChangedで解決しました。どうもありがとうございました
男は必要ないよ( ・ω・)y─┛〜〜
手抜きだから実装されてないと思う
'System.NotImplementedException' の初回例外が 'ふらっとC#,C♯,C#(初心者用) Part55' で発生しました。
640 :
632 :2010/02/17(水) 17:51:41
実体を持たない参照野郎
>>640 気にしないほうがいい
スレに居座ってるなり済ましクンだから
へえ
>>622 C++ではクラスオブジェクトを関数に渡すときは効率を考えてほとんどconst参照渡ししてたね。
いちいち参照渡し指定するのが面倒だからC#ではデフォルトでクラスオブジェクトは
参照渡しするようにしたんだろうけどそれがかえって統一性を無くしちゃったね。
>>644 でもさ、プログラム作るうえで一時的なコピーは必要かもしれないけど
それ以外ってほとんど参照で足りることの方が多くない?
C#の設計ってものすごくよく考えてあると思うんだけど
というかなんでもかんでもスタックに作ろうとするから参照渡しなんていう変なものが必要になるんだよ
644はどうしようもないな
スクロールバーを変化させて、その値に従って処理をさせてるんですが、 処理が重いのでスクロールバーを早くを動かすと追いつきません。 それでスクロールバーのイベントが貯まってきたら、最新のものを除いて キャンセルしたいのですが、どうやったら出来るのでしょうか?
処理を軽くする方が簡単だと思う
>処理が重い 何をやってるんだろうw
だね
ですね
>>645 > C#の設計ってものすごくよく考えてあると思うんだけど
そういうこと。
無知な人間でも最良の選択肢を言語側が勝手に推測して選んでくれるという親切設計。
>>644 C#にconstがないのは
constつける必要もなく大体データが変わるのは
メソッドを持っているクラスだからじゃないの?
class.foo(a);
とかあったらclassの内部データは変わるだろうけどaは普通変えないでしょ。
>>657 値渡しの項目は書き換えじゃないの?
参照渡しの場合は参照の入れ変えだろうし
>>657 値渡しの項目は書き換えじゃないの?
参照渡しの場合は参照の入れ変えだろうし
そもそもref使うなって言うしな 引数に書き込むな
参照渡し厨さん、いい加減にしてください・・・
値渡し厨さんこそ、時代遅れだということに気づいたらどうですか・・・
うるせー殺すぞ
通報してきた
どっちもどっち
>>660 C++の参照は危険だが
C#のref/outは安全
.NET4.0からはoutに変わってTupleの過剰摂取が始まりそうだ
なーんで使いたがるかなあ
そのうち
>>668 のデザインガイドラインに「パブリックプロパティおよびメソッドでTupleを返さないで下さい」って出るよ。
カシオミニを掛けてもいい。
そんなの出るかなあ? まあ期待しといてやる
名は体を表すに真っ向から反するから 外から見える部分には推奨されないような気はする。
>>668 refに統一するとして、初期化はどうするんだ?
intとかは適当に数字の0とか入れて渡せばいいがそれ以外の型に関してはどうする?
>メソッドで異なるインスタンスを返す必要がある場合、メソッドの戻り値を使用して実現します。 refも使うな 殺すぞ
殺してみろハゲ
思い切りサッカーボールキックしてあげたい
C#の関数がマルチリターンバリューサポートしてたらrefなくてもそんなに困らんけど
構造体かクラス返せばいいと思ってる俺は負け組?
out使えばいいよ
総意で俺負け組だったのか…終わってるな俺 そういう時って何かいい方法はいったい? outをガンガン並べていくとか?
Tupleって何の意味があるんだろ IronPythonなどの動的言語では各自勝手に実装してIDynamicMetaObjectProviderでdynamicサポート するのが普通だしC#でも匿名型+dynamicの方が可読性からいえばまだマシだし
688 :
687 :2010/02/18(木) 13:26:47
調べてみたらF#との相互運用のためらしい 使うなってことだな
君は使わなくても良いよ。
タプルは8つまでは簡単に作れるのだが20のタプルを作ろうとするとこのありさま。 var t20 = new Tuple<int,int,int,int,int,int,int, Tuple<int,int,int,int,int,int,int, Tuple<int,int,int,int,int,int>>> (1,2,3,4,5,6,7,new Tuple<int,int,int,int,int,int,int, Tuple<int,int,int,int,int,int>>(8,9,10,11,12,13,14, new Tuple<int,int,int,int,int,int>(15,16,17,18,19,20)));
そりゃ人間が直接使うものじゃないからな。 本当はコンパイラが生成するべき。C#でサポートされることはまずないだろうけど。
1次元配列で読み取ったデータを、3次元配列に変更したいのですが、 ループで廻して並べ替えればもちろん出来るのですが、 一発で変換することはできませんでしょうか? MATLABでいうところのreshape関数なんですが?
無いので自分で作る .NETでは基本的に多次元配列は非常に冷遇されていてほとんど便利な機能がないので できれば多次元配列は使わない方がいい
そうですか。自分で作ります(´・ω・`)
sudo kill -9 676
なんか怖いです(´・ω・`)
Tupleって用語だと思い込んでたが.NET4.0からサポートされる機能?のことだったのか 戻り値を複数返したいとき、わざわざクラスか構造体作らなくても Tupleで返せるようになる?
タプルをサポートする言語のために追加されただけ。C#ではサポートされない。 Item1, Item2みたいな無意味な名前のプロパティを持った型にすぎないので可読性最悪。 匿名型をdynamicとして受け渡しするほうがずっとマシ。
たぷるですか。難しそうですね(´・ω・`)
お前の腹はたぷんたぷん
(´・ω・`)
ぽんぽん(´・ω・`)
教えてください。 DataTable で DataTime.Ticks (UInt64) の列があります。 これをテーブルにデータを再設定することなく日付時刻型として表示することは可能でしょうか? べたな方法では、Ticks の列の値を取得して DateTime 型の変数に代入し、 改めて同じテーブルの日付時刻型の列に代入する方法があると思うのですが、 レコード数が多いと時間が気に掛かります。 たとえば DataTable.Columns.Add( new DataColumn( "name", typeof( DateTime ), "Convert( Ticks, 'DateTime' )" ) ); などの方法で出来ないものとか考えているのですがうまく行きません。 よい手抜き‥‥もとい。きれいなやり方はないでしょうか。
表示するってことは別のコントロールにバインドするんでないの?
>>703 >レコード数が多いと時間が気に掛かります
これってデータベース使って読みこんでいるデータ?
>>690 Tuple.Createを使えばもう少しだけましになる。
>>704 DataDridView にバインドして表示します。
出来たら、DataTable をそのままバインドするだけに出来ないかと。
>>705 はい。
ただ、DB 側との I/F は既に決まっていて、DataTable にシリアル値の
列として渡されてくるので。
出来るだけその部分には触らないで済ませられないかと考え中なのです。
データ(datatable)をさわるんじゃなくて表示(datagridview)の設定だけでいけそうだけど。
表示するときに加工すればいけそうだね
>>706 Tuple.Createが使えるのは8つ以下の最後だけ。
var hoge = new Tuple<int,int,int,int,int,int,int,Tuple<int,int>>(1,2,3,4,5,6,7, Tuple.Create(8,9));
(1, 2, 3, 4, 5, 6, 7, 8, 9)
2回使うと意味が変わる。
var hoge = Tuple.Create(1,2,3,4,5,6,7, Tuple.Create(8,9));
(1, 2, 3, 4, 5, 6, 7, (8, 9))
703に多くの回答ありがとうございました(´・ω・`) ごひいきありがとうございまた。頑張ります(´・ω・`)
おう
文字列の一行だけを取得したいのですが System.IO.StreamReader sr; string kaigyou = "改行コードは\rCRです。"; sr = new System.IO.StreamReader(kaigyou); ↑ArgumentExceptionというエラーが出てしまいます。 どうしたらエラーを回避できますか?
>>714 > sr = new System.IO.StreamReader(kaigyou);
StreamReaderのコンストラクタに指定するstring型の引数はオープンするファイルパスだから
"改行コードは\rCRです。"というファイルパスが無効→引数エラーが返されるってことです。
文字列を指定して1行取得したいのならStringReaderで実現できますよ。
StringReaderのReadLineメソッドで改行文字までを一連の文字列として返してくれます。
System.IO.StringReader sr;
string kaigyou = "改行コードは\rCRです。";
sr = new System.IO.StringReader(kaigyou);
System.Windows.Forms.MessageBox.Show(sr.ReadLine());
はい
C#の応用系のことを書いている本みたいなのありませんか? 初心者向けだと「フォームの移動」「メッセージボックスの表示」など基本的なことしか書いてないので…。 オススメがあれば。
つ料理本
つうか、応用系って何を指してるの? C#をもっと深く使いたいとかいうこと? Effective C# More Effective C# C# クックブック 3版 .NETフレームワークのためのC#システムプログラミング
721 :
703 :2010/02/19(金) 21:41:29
>>708-710 ありがとうございました。
会社で試して動作を確認できました。
>>710 素晴らしいです。こういう方法があったのですね。
こういうのを見ると C# って面白いと感じます。もっと引き出しを増やせるように頑張ってみようと思います。
私です。
いいえ私です。
うちです、うち。南光園。
まゆちゃんなんだよ?
いいえ、ケフィアです。
いいえ、ネピアではなく、鼻セレブです。
舐めると甘いよね。
しょっぱいです
>>718 多分いろいろなクラスの使い方が分かる本ってことなんだろう(自分がそうだった)
だが、ちゃんとC#の文法が理解できてれば、参考書見なくても結構わかるよ。
主にメソッドの名前とか入力してるときに出てくるコメント文で。
ほかは、ネット見ながら自分のやりたいことを解決(コピペじゃ駄目)してくくらいでいいんじゃないだろうか
まあ、自分で書いてて、憶測にしかすぎないな、と思ったがとりあえず書きこ
違ったらごめんね
ごめんねごめんねー
.NET Frameworkの本とか、MSDNとかじゃないの?
734 :
デフォルトの名無しさん :2010/02/20(土) 11:10:17
違います
735 :
718 :2010/02/20(土) 13:36:49
今はネットを見てやっているんですが
クラスの使い方とか、Tipsとかが載っている本があれば
暇なときパラパラ見れるなぁと思っただけです。
>>734 は誰だ?
私です。
いいえ私です。
渡りのプログラマー
Tipsだったら、DOBONさんのとこかな。 クラスの使い方はMSDN見た方がいいと思う。
どんなくらすがあるのか知りたいときは?
検索しろよ。
>>740 ぐぐればクラス名ぐらいはわかるから、後はMSDN見ればいいだろ。
XMLだったら「.NET XML」で検索すればいい。
ちゃんとIDisposable実装しようと思った時にDispose(bool)って実装した方がいいのかな?
ファイナライザがなければいらない
継承して使わないなら不要
>>743 IDisposableって解放るものがなければ処理することもないので要らんよ。
そのインスタンス内に子オブジェクトがいて、それらを片付けたいとか、大量にメモリ確保
したので解放したいとか、そういうのを解放したい時に実装する。
だから、解放するべきものがなければ要らない。
>>746 質問の意図から随分離れた回答のように見える
>>748 別々にすると派生クラスでオーバーライドした時に呼び出し順がおかしくなる
デストラクタ使ってなきゃいらないって事なのか、まぁ安全に動けばいいか マネージドリソースとアンマネージドリソースの開放を区別する意味がいまいちわからんがいいか
クラスAがメンバーとしてクラスBのオブジェクトを抱えているとする。 AをDisposeした場合はBも連鎖的にDisposeする。これがDispose(true)のパターン。 AがFinalizeした場合はBも個別にGCされるのでAは何もしない。 Aより先にBがGC済みのケースもありえる。これがDispose(false)のパターン。
>Aより先にBがGC済み 厳密に言うとそれはありえない ファイナライザが呼び出されている可能性があるだけ ファイナライザを実装するとGCのタイミングが遅れるというのは有名だけど これは >Aより先にBがGC済み の状況を作らないようにするため
IDisposableなクラスはたくさん作ってるけど、 Dispose(bool)は実装したことなかった。 そういう差があるんだ。勉強になるな。 後でよく調べておこう。
まーファイナライザ定義することなんてSafeHandleできてからはほとんどなくなったしなー
Finalize/Disposeをフルで実装する場合はComponentを継承すればいいもんな。
class A; class B : A; class C : A; void func1( B ); void func2( C ); があり、中で使用する func1 または func2 の関数のみが異なるある関数があったとします。 こういう関数が多く、中で呼び出す関数以外はすべて同じなのでこれをまとめたいと考えます。 そこでデリゲートを使用して呼び出す関数をパラメータで渡すことを考えました。 delegate void dele( A ); void commonFunc( int para1, int para2, dele callFunc ); これで、 commonFunc( 1, 2, func1 ); などとやると、もちろんデリゲートの型が違うためコンパイラに怒られます。 こういう場合にキレイにまとめるよい方法はあるでしょうか?
func1をBのインスタンスメンバに func2をCのインスタンスメンバに じゃダメなの?
>>754 ,755
そ、そうなのか……。
ひょっとして、オレのアンマネージドなオブジェクトの管理は相当遅れてるのかもしれん……。
delegate void dele<T>( T o ) where T : A; void commonFunc<T>( int para1, int para2, dele<T> callFunc ) where T : A; commonFunc<B>( 1, 2, func1 ); きちゃないな
キャストできることが保証されるなら、 commonFunc( 1, 2, a => func1(a as B) ); でいけるが、拡張メソッドで public static void CommonFunc<T>( this T obj, int p1, int p2, Action<T> f ) where T : A; とするのがスマートかも
761 :
756 :2010/02/20(土) 22:36:08
ありがとうございます。
>>757 そう言うやり方もありますね。
パラメータのクラスインスタンスはほぼデータ受け渡し用のものなので、
それ以外の情報を載せることは考えていませんでした。
できれば今の考えで進めたいのですが、ダメだった場合にその方向も考えてみます。
>>759 なるほど。ジェネリックってものがありましたね。
十分だと思います。試してみます。
>>760 上も下もどっちも知らなかったです。。。
キャストは大丈夫だと思います。
ずいぶんとキレイにまとまるものなのですね。すげー。
最低でも調べてモノにして置こうと思います。
>>756 の質問内容がすぐに理解できないオレはバカなんだろうか。
static void Main(string[] args)
{
var b = new B();
var c = new C();
CommandFunc(1, 2, b, a => Func1(b as B));
CommandFunc(1, 2, c, a => Func2(c as C));
}
delegate void dele(A a);
static void CommandFunc(int para1,int para2,A a, dele callFunc)
{
// Func1かFunc2を実行したい
callFunc(a);
}
static void Func1(B b) { b.MethodB(); }
static void Func2(C c) { c.MethodC(); }
}
class A { }
class B : A { public void MethodB() { Console.WriteLine("Bだよ"); } }
class C : A { public void MethodC() { Console.WriteLine("Cだよ"); } }
微妙すぎる
くだらない質問です。 toolstripを貼り付けたフォームで、フォームの内容をスクロールさせるとtoolstripもスクロールしてフォーム外 にいっちゃうのですが、スクロールしても上部に固定で表示させることはできないでしょうか? ぐぐってみるとパネルをフォーム上に置いて、パネルをスクロールさせればいいという解決法はあったのですが フォームに直接ビットマップを描画しているため、できればパネルを使わずになんとかしたいのですが他に方法 はないでしょうか? ないようでしたら、諦めます。
パネルが嫌ならLabelでも代わりに貼り付ければいいんじゃないの? Form ├toolstrip └label Zオーダー調整して labelの ・DockをFill ・AutoSizeをfalse(だったと思う
>>763 やり方は色々あるが、とりあえずPanelを使え。
ああ、Panelが嫌だってか。 PanelにUserControl貼り付けたら同じじゃん。
>>766 コントロールが多段になるのがいやってことじゃないの?
C#のパネルって確か枠だけだったので描画したいなら
ラベルとかを代わりの台座にすればいいだけだし
スクロールバーの処理は、Panelに任せたほうが楽だよ。まじで。
もっとPanelちゃんを有効利用してあげて
#pragma comment(lib, "hoge.lib") みたいに例えば System.Windows.Forms を指定してソースに書いておけば自動的に参照追加してくれるプリプロセッサないのかお(´・ω・`)
一覧表を印刷するときに、pd.DefaultPageSettings.HardMarginX分引いて センターに表示するようにしたんだけど、印刷プレビューで見ると その引いた分だけ左によってしまっています。 これを直す方法はないでしょうか?
>>770 それやろうとしたらたぶんこんなことになるよ
#pragma reference("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
:(;゙゚'ω゚'):グフゥッーー
763の質問で初めて気がついたけど、 ToolStrip系はDockしても、.NET1.1以前のMainMenuのようにフォームのクライアント領域を 削る形にはならないんだな。 こんな仕様望む奴いるのかしら。
MainMenuはOSレベルで普通のウィンドウ(コントロール)とは違うんだから仕方ない
:(;゙゚'ω゚'):シ、シカタナイーー
>>775 パネルとかコンテナ使えばいいので問題ない
問題ないと言われてもなあ。
うーむ、やはりパネル使うのが一番ですか。 プラグインの仕様にもなってるし極力弄りたくなかったのですが、素直にパネルに変更します。 回答ありがとうございました。
うん
>プラグインの仕様 どういうものかは知らんがパネルはさもうが問題ねーだろ どんなコードの書き方してるんだよ
振り上げた 握りこぶしは グーのまま 振り上げておけ 相手はパーだ
五七五七七かと思ったらちがた
?
>>782 いやいや、フォームに直接DirectXで描画しているからパネルのせると何も見えなくなって
しまうんですよ。
それと描画のルーチンにFormを渡しているからパネルに描画だとPanelに変えないといけない
というのがあって、それで聞いてただけです。
とりあえず、すいませんでした。
>>786 じゃあPanelに貼り付けたUserControlでDirectXの描画やればいいじゃん。
そんなに難しくはないよ。
>>787 質問者じゃないけど、無理矢理絡むなよw
意味不明すぎる。
…?787 じゃないが Direct3D はレンダリング対象に HWND を 取るので Control なら何でも対象にできる。
?
VS2005である文字のASCIIコードを取得しようとしていました。 (int)'1'などとすると49=16進数の31とうが帰ってくるので正常でした。 7Eの~までは正常に動いているようなのですが、 半角カナのあ('ア')はなぜか65393=16進数のff71になってしまいます。 あれ?と思い、VB.NETでASC関数を使用したところ177=16進数のb1が帰ってきて問題ないようでした。 正しく変換を行うためにはどのように処理すればいいのでしょうか? よろしくお願いいたします。
char(System.Char)はUTF-16を使って符号化された文字を扱ってる で'ア'はUTF-16ではU+FF71にマップされているから、0xff71になるのは全く正しい 'ア'を0xb1にマップするのはShift_JISで、それらの文字符号化方式を扱うのはEncodingクラス
ちなみにASCIIは7bitなので、'ア'は存在しない
>>792-
>>793 ありがとうございます。
なるほど・・・
Encodingクラスを使用するといけそうですね・・・
もうすこしエンコード勉強してみます
ありがとうございました。
全く関係ないけど、コード体系が違うってのは気がついたよな? 半角も全角もcharだと1文字 今までの感覚で作ると問題になることがあるから注意
>>795 ありがとうございます。
今のところこの仕様で2バイト文字を扱う必要はないようなので、ここでは気にしませんが、
そのうち・・・出てきたときには気をつけないといけないかと。
と、仰っている意図を勘違いしてたらダメダメですが・・・
だめだめだお(´・ω・`)
ググってみたんですが納得いく説明が見あたらなかったので質問です。 C#では通例すべてのメソッド名の頭文字が大文字なのはどうしてですか? .NET Frameworkでの慣例がそうだから、というのであれば、どうしてそれが慣例なのか知りたいです。
「C#では」「すべての」「メソッド名」全部そういうわけではないな 「.NET Frameworkでは」「public or protectedの」「メンバ名」がそういう命名規則 ついでに言うとこれは「クラスライブラリ開発者向け」ね .NET Frameworkの標準ライブラリがそれに従ってるので それを利用する側も自然とそうしたコーディングになりやすいだけ 理由? .NET Frameworkのデザイナがそうした方が見やすいと感じたからだろ もうちょっと言うと プロパティの先頭が小文字だとprivateフィールドと区別が付けにくい、 プロパティの先頭が大文字なのにメソッドの先頭が小文字とか不自然、 とかその辺考えられる
>>799 なるほど、言われてみるとその通りと感じました。
ありがとうございます。
自演の香り
公開する名前を一律先頭大文字にするのはMSの昔からの慣習だよ
804 :
デフォルトの名無しさん :2010/02/23(火) 22:25:09
10進数な0.75という数値を、3F40 0000 と16進表示させたいのですが そんな関数ありますでしょうか? 自作しないと無理?
BitConverterでbyte[]にしてからintに
>>804 ない。特に浮動小数点数に寄る0.75ならCLR上では実装依存だ。
基本的にはMemoryStreamに一旦書き出した後で
byte[]で読みなおす形になるだろうな。
10進数なら System.Decimal があるだろ。
あるね
>>806 いや、CLIで浮動小数点数はIEEE754と決まっているでしょ。
実装依存ではないはず。
もういいのはお前の方だろ馬鹿か。 いやもうじゃなくて最初からいらないけどね。 本人面白いと思ってるのか知らんが、本当にうっとうしいなこういう馬鹿は
>>809 The Root of .NET Frameworkにそう書いてある。
813 :
デフォルトの名無しさん :2010/02/23(火) 23:54:57
ついでに便乗。私は、そもそも根本から解ってません 0x3F=63 0x40=64 そっからどうやったら0.75に持っていけるのか教えてくださ〜い (63/16)+(64/256)= 4.1875 あれ?( ゚д゚)ポカーン
>>813 >3F40 0000
眠いのであまりまじめにやる気ないけどこれが浮動小数点なら
それは違うんじゃね?
>>813 Wikipediaの浮動小数点数の項目でも見れ
0011 1111 0100 0000 0000 0000 0000 0 0111 1110 100 0000 0000 0000 0000 これを 単精度の場合: (-1) 符号部×2指数部 ‐127 ×(1+仮数部) に当てはめて計算しる
Interfaceを使うメリットを教えていただけないでしょうか? 調べてみてもいまいちピンときません・・・
>>818 IDisposableなクラスを書き始めたら、すぐわかるさ。
820 :
デフォルトの名無しさん :2010/02/24(水) 00:39:07
符号部:0 指数部:0111が5 仮数部:11101000000000000000000が7602176 で・・・ 2*5-127*(1+7602176)=-965 476 469 あれぇ?
IEEE 754 形式の単精度実数では、符号部 1 ビット ・ 指数部 8 ビット ・ 仮数部 23 ビット、
822 :
デフォルトの名無しさん :2010/02/24(水) 00:42:31
指数部:0111が5 馬鹿だ!おれ! 7 いっぺん風呂に入って頭冷やしてくる!
ずっと入ってなさい
風呂に入ると逆に熱くなる件
股間に熱エネルギーがたまってきた
>>818 異なる型のリスト全体に特定のメソッドを全て実行したいときに便利
あとはDIコンテナがらみの差し替えで便利というか必須
827 :
デフォルトの名無しさん :2010/02/24(水) 01:54:02
風呂から上がった。 0.75をを二進法で書くと 0.1001011 小数点を左に移動させ、1だけを左に残す。1 001011*2^(-1) これが正規化された浮動小数点数である。 0 で埋め 23ビットにする 001 0110 0000 0000 指数-1に127加算。126で01111110 まとめると 0 01111110 001 0110 0000 0000 区切り直して 0011 1111 0001 0110 0000 0000 16進では 3 F 1 6 0 0 こうですか?添削お願いしま〜す!
うぜえ
なんか思いつくときってシャワー浴びてるときだよな
計算しなくてもfloatに0.75入れて中身見ればいいだけだろ
DoubleToInt64Bitsはあるのに、SingleToInt32Bitsはないという不思議
最初ので代用できるだろ
833 :
デフォルトの名無しさん :2010/02/24(水) 10:18:45
Form や Panel 上に配置された UserControl をフルスクリーン化するにはどうしたらいいんでしょうか? 最上位の Form をフルスクリーン化して、親 Control を一つずつクライアントサイズまで拡張しないとダメ?
834 :
デフォルトの名無しさん :2010/02/24(水) 10:26:43
Form1からForm2に引数を渡し、Form2の複数のメソッドでその引数を共有して使うにはどうしたらよいでしょう? Form1 namespace WindowsApplication { public partial class Form1 : Form { public Form() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string[] args = {"test","answer"}; Form2 form2 = new Form2(args); form2.Show(); } } }
意味がよく分からんが、普通はDockなりAnchorなり使ってレイアウトするもんじゃないか
836 :
デフォルトの名無しさん :2010/02/24(水) 10:28:03
Form2 namespace WindowsApplication { public partial class Form2 : Form { public Form(string[] args) { InitializeComponent(); if (args[1] == "test") test(); else if (args[1] == "test2") test2(); } private void test() { MessageBox.Show(args[2]); } private void test2() { MessageBox.Show(args[2]); } のように書くと、test()とtest2()の MessageBox.Show(args[2]); で引数がない、とエラーになります。 Form2のどこでstring[] argsを宣言すれば、Form2全体で使えますか? よろしくお願いいたします。
それだけならtestとtest2にstring[]の引数持たせろよとしか思えないが 取り敢えず「フィールド (C# プログラミング ガイド)」でぐぐれ
>>835 やっぱり一発でフルスクリーン化してくれるような便利な仕組みはないってことか
いや普通はフォームを広げても崩れないようにレイアウトするから
>>833 >最上位の Form をフルスクリーン化して、親 Control を一つずつクライアントサイズまで拡張しないとダメ?
基底のFormをフルスクリーンして子Control ・・・・の間違いじゃね?
サイズが変更した際に発生するイベントに調整用ロジック書いておけば
全部に連動するけどな
というかFormに貼られてるコントロールの状態でもかわる
DockでFillとかしてあれば勝手にサイズかわるけど
Noneとかされてると自分で計算するしかないだろうし
>>836 スコープの概念をわかっていない超初歩的な話
基本的には{}の中だけ有効
842 :
デフォルトの名無しさん :2010/02/24(水) 11:35:20
>>837 ありがとうございます。
Form2
namespace WindowsApplication {
public partial class Form2 : Form {
string[] args;
public Form() {
InitializeComponent();
if (args[1] == "test") test();
else if (args[1] == "test2") test2();
}
とすると、Form1の
private void button1_Click(object sender, EventArgs e) {
string[] args = {"test","answer"};
Form2 form2 = new Form2(args);
form2.Show();
}
で、引数をひとつ指定できるものはありません、とエラーになります。
かといって、
private void button1_Click(object sender, EventArgs e) {
string[] args = {"test","answer"};
Form2 form2 = new Form2();
form2.Show();
}
では、引数がわたらない、ということで途方にくれております。
うーん、なぜ引数渡しにこだわる?
>>842 836と全然違うじゃねえか
Form2にプロパティ作ってShowする前に設定
ほかの言語はやったとこないのかな。
846 :
デフォルトの名無しさん :2010/02/24(水) 11:43:02
>>843 Form1からForm2に渡したい値がいろいろある、ということと、
初心者なので、引数ならできそうだ、ということです。
>>846 Form1はForm2のインスタンスを持ってるんだから
Form2側で連絡用のエリアのset作るとかすればいいんでないの?
848 :
デフォルトの名無しさん :2010/02/24(水) 11:46:30
>>844 ぜんぜん違うというか、フィールドを使って書き換えたつもりなんです。
>>845 ありません。
>>846 初心者君、とりあえず教えてもらったコードがどういう意味なのかくらいは考えたまえ。
>>838 >やっぱり一発でフルスクリーン化してくれるような便利な仕組みはないってことか
確かにそんな仕組みはないが、(基本的ににはタイトルバーとフレームを消去した上でプライマリスクリーンにはめ込む)
System.Windows.Formsのコントロールの自動再配置の仕組みは異常と言っていいくらい出来がいいぞ。
やり方が色々あるから勉強するべし。
851 :
デフォルトの名無しさん :2010/02/24(水) 11:57:13
>>849 プロパティを使うか、setを使うからしいのですが、
コードで教えていただけるとうれしいです。
アプリケーションの設定を読み込むのは、Form1のコンストラクタで行うのか、Loadイベントの際に行うのか、 どちらが一般的なのでしょうか。つまらない質問ですが、よろしくお願いします。
一般的なことを聞いたつもりなのですが… どちらも一般的に行われているということでしょうか…
タイミングは自分の作ってるアプリ次第なんだよね たとえばアプリの表示サイズとか見た目に関わる情報を復元したい場合は Formが表示される前に読み込みを終えて、座標とかを反映しておきたいだろうし 特にそういうのがなければ表示した後任意に読み込みを行うボタン押してもらうとか
位置とかは表示する前だが それ以外はとりあえずウインドウを表示してからにしたい
どうして?
設定を保存しておくファイルを分けるとかしろよ そんな設計までここの住人にやらせるのかよ
位置を表示する前、であればコンストラクタかLoadイベントのどちらかになると思うんですが、 その場合は、どちらを選ぶのでしょうか。
コンストラクタで書いてコンパイルエラーが出たら Loadedなんかの中に書いてる
コンストラクタとLoadの間で何が違うのかを考えろよ
なんで?
設計ができないって悲惨だなぁ
だなw
まあアプリの構造がわからんので設計は自分でやるという前提だが補足としてはだな デザイナーが勝手にあれこれやってくれるのであんまり意識はしないけど プログラムの起動の順番としては [Program.cs] Main() ↓ [Form1.cs] Form1() ↓ [Form1.Designer.cs] InitializeComponent() []はソース名称 InitializeComponent()はregionで折りたたまれてる Form1のコンストラクタからInitializeComponentを呼び出してこの中で始めて デザイナーでデザインした部品の初期化が行われるんだわ(あってるよね?
>>853 まあその辺は機能的な要件さえ満たせるのならどうでもいいでしょ。
逆に聞きたいんだけど、今の世の中ただでさえ覚えることがたくさんあるのに、
そんなどうでもいいことまで一般的なルールとやらを覚えて、従いたいとか思う?
俺は思わんけどなあ。
そんなものに何のメリットも感じられないし。
どこまで分かって、どこから分からないのか
870 :
868 :2010/02/24(水) 21:48:00
SSLでURIとユーザー名とPASS指定して、クッキー作ってログイン実行しても ログインできてない
ただの好奇心だろw おれはこうするな〜でいいんだよw
872 :
804 :2010/02/24(水) 23:20:19
byte[] bdata = BitConverter.GetBytes(0.75f);
で、16進での正解は見れたけれど、
>>827 のどこから間違えたのか未だ悶々としてます。
何が悪いのでしょうか? (おつむが悪いのは既に自覚してます)
>>872 というか、そういう低レベル(ハードウェアよりと言う意味で)な話をするのは
C#は向いてないから、C++に切り替えて同じことをやった方が早いよ。
というかfloatに値突っ込んでデバッガで止めてゴニョゴニョするだけですぐわかる。
>>872 0.75 = 0.5 + 0.25 = 2^(-1) + 2^(-2)だから、
二進法にすると0.11のはず。
初心者スレってここまで酷かったのか... つうか、一通りどこかのサイトでC#学んでから質問したほうがいいよ。 質問も支離滅裂すぎてイミフすぎるし。
876 :
デフォルトの名無しさん :2010/02/24(水) 23:45:28
リッチテキストボックス上でマウスオーバーした時に そのカーソルの下のワードを取得したいんだけど どうすればよかと? GetCharFromPositionを使えば一文字だけ取得できるけど 一文字じゃなくて単語を取りたいんだ
一通りC#学んで、質問すべき内容をはっきり認識できる人は質問する前に自己解決するだろ。
>>876 前後に伸ばしてって、区切り文字のとこで終了。
>>873 そういう話じゃなくて、0.75がなぜ3F400000になるかが気になってるんだろ
880 :
デフォルトの名無しさん :2010/02/25(木) 00:03:08
>>878 文字から伸ばす?
この方法じゃなくて、行数と左から何文字目かを取得して、そっから拡張するって事?
>>880 GetCharIndexFromPositionで今の位置とってくるわけよ
GetCharIndexFromPosition でインデックスを取得する。
883 :
デフォルトの名無しさん :2010/02/25(木) 00:11:14
int positionToSearch = rTextBox.GetCharIndexFromPosition(new Point(e.X, e.Y)); おぉできたぞー。ここまで出来ればあとは楽勝さ。サンキューベリーマッチ
>>879 そんなの、.NET CLI上で浮動小数点数がどういう扱いになっているのかということと、
x86上で単精度浮動小数点数がどういう符号化が調べれば答えでるじゃん。
だいたいそんなのC#に関係ないし。
それで計算が合わなくて何で−?って質問だろう……
つううか
>>874 で答え出てるな。
0.75(10) は 0 + 1/2 + 1/4 = 0.11(2)
間違えやすいのは暗黙の1を消して仮数部を10000000000000000000000にする部分だな。
とりあえずあれだ、基本情報の勉強でもやればいいんじゃないかな
ボクもそう思うよ あ、女子小学生です
0.75 x 2^0 (0.75 = 0.11) 正規化して 1.5 x 2^(-1) (1.5 = 1.10) 1.10 から1.を消して 10 つまり「(1.)10000000000000000000000」ってことか
>>879 だからそれはc#じゃなく浮動小数点をどう記憶するかという規格の話で
完全にすれ違い
情報処理の試験スレとかIEEEの規格スレ(あるのか?)へ行けってことだ
ここにきてようやくスレチという意見がww
つまり認められた話題だったということだ
893 :
デフォルトの名無しさん :2010/02/25(木) 21:47:16
class B { / ... /} class D : B{ /... / } class DD : D{ /... / } //とあるクラス内 void attachList( B tmp ) { ls.add( tmp ); } // List<B> ls = new List<B>(); 済み これって以下のように使ってもまったく問題なし? エラーは出ないし使えるみたいなんだけど B some1 = new B(); B some2 = new D(); B some3 = new DD(); attachList(some1); attachList(some2); attachList(some3);
問題ない
895 :
デフォルトの名無しさん :2010/02/25(木) 21:52:17
Cのマクロ、__DATE__みたいなのはないのでしょうか?
ない
意外とウンコだなC#
ある
どうしてもやるならコンパイル前に[assembly: コンパイル日時(みたいなコードを自動生成して リフレクションで取ってくるのが正当かな
C#は使いやすいし、部品も多いが C/C++みたいに本当に万能な言語ではない。
例えば?
C/C++のコードは環境依存の部分をなくせばコンパイラが存在する ところへ持っていけるけどC#はwindowsとべったりだしなあ Monoとかにすれば多少幅は広がるけど
万能かどうかと全く違う話じゃん
移植性の低さが一番のネックだよね。 それ以外は特に問題ないんだが。
C#にかぎった話じゃないし、なんなの?こいつ
なんでそんな喧嘩腰なんだよw
わけのわからん話をするからだろボケが
____ / \ /\ キリッ . / (ー) (ー)\ <C/C++みたいに本当に万能な言語ではない。 / ⌒(__人__)⌒ \ | |r┬-| | \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
沸点の低い頭おかしいのがおるw
____ / \ /\ キリッ . / (ー) (ー)\ <移植性の低さが一番のネックだよね。 / ⌒(__人__)⌒ \ | |r┬-| | \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
>C/C++のコードは環境依存の部分をなくせばコンパイラが存在する >ところへ持っていける これは C# でも同じでは?
913 :
デフォルトの名無しさん :2010/02/26(金) 08:02:00
FirefoxのFirebugにある「要素を検証」みたいなもの (HTML上でマウスを移動させると、タグの部分が選択される) を実装したいんですが、WebBrowserで可能でしょうか? 右のWebBrowser上のとある箇所をクリックすると、 そのクリックされた箇所(HTML)がコピーされ、 左のWebBrowserにペーストされる、ということをしたいのですが。
>FirefoxのFirebugにある「要素を検証」みたいなもの >(HTML上でマウスを移動させると、タグの部分が選択される) >を実装したいんですが、WebBrowserで可能でしょうか? こっちはよくわからんけど >右のWebBrowser上のとある箇所をクリックすると、 >そのクリックされた箇所(HTML)がコピーされ、 >左のWebBrowserにペーストされる、ということをしたいのですが。 こっちは可能でしょ コピー元でクリックされた場所を取得してコピー処理してクリップボードへ転送 コピー先でペーストとか
915 :
デフォルトの名無しさん :2010/02/26(金) 08:13:55
916 :
デフォルトの名無しさん :2010/02/26(金) 08:15:04
<div> <p>div1</p> <div> <p>div2<p> </div> </div> こんなHTMLがあるとして、 2つめのdiv内でクリックすると、 <div> <p>div2<p> </div> がコピーされるようにしたいのですが、
917 :
913 :2010/02/26(金) 08:20:43
>>914 可能ですか!
ちなみにJane Styleなどの2chブラウザのスレ表示欄はどうやって実装しているかわかりますか?
WebBrowserでいけるんだろうか・・・?
>>917 OpenJaneの派生のほとんどはTrident(windows用のIEのコア部分)使ってなくて
独自のコアだったような
まあ同じようなことはできるよ
ポップアップとかもね
自分のプログラムで書いてもいいしJavascriptに頼ってもいいし
919 :
913 :2010/02/26(金) 08:41:56
>>918 できるんですね。安心しました。
ありがとうございます。
921 :
913 :2010/02/26(金) 09:30:58
>>920 お〜役立ちそうです。
ありがとうございます!
labelコントロールをダブルクリックすると、
labelコントロールをダブルクリックすると、 勝手にtextの内容がクリップボードに入るんだけど 止めることできないかな
>>923 はてそんな妙な仕様だったかな、と思って確認したけど
やっぱり勝手にtextの内容がクリップボードに入ったりしないよ。
それともWindows Formのラベルじゃないのか
925 :
923 :2010/02/27(土) 02:58:11
>>924 System.Windows.Forms.Label です。
新規でプロジェクト作って label1 だけ置いて実行。
label1をブルクリックで、
クリップボードに「label1」が張り付くんです。
Visual C# 2008 Express Edition 使ってます。
たちの悪い何かが常駐してるんじゃないの?
929 :
923 :2010/02/27(土) 03:24:11
う〜ん、PC2台(XP,Vista)で試しても同じこと起きる。 もう少し調べてみます。お騒がせしました。
マウスジェスチャアプリとか入れてるんじゃね?
931 :
913 :2010/02/27(土) 04:02:23
>>931 それ2004年7月の記事だけど・・・今のバージョンだとどうなってるか確認してみた?
>WebBrowserだけを使って、HTMLにアクセス、操作するのは不可能みたいですね。
それにまあMicrosoft.mshtml.dllを再配布配布するしないの問題は別として
VC#2008EESP1入れた段階だとWebBrowserでできたと思うけどな
きっちり検証はしてないけどHTML上でおきたイベントのキャンセルするコードも書いたし
HTMLDocumentで中身いじったりもしたよ
家にあるすべてのPC(6台)に labelコントロールだけおいたアプリを起動して確認中w 1台だけ正常(?)なクリップボードに張り付かないPCがありました。 共通点を探ってますが、 素のままのWin7(updateはしてる)でも発生してるので???状態です。 常駐系アプリはいれてないので
934 :
923 :2010/02/27(土) 04:18:48
また途中でおくちゃった^^;
>>933 の続き
常駐系アプリはいれてないので
ちょっとお手上げ。
環境的な問題ってことみたいなので
あとはこちらで調べて見ます。
ありがとうございました。
大丈夫な環境から大丈夫じゃない環境にリモートデスクトップでアクセスして試してほしいな。
936 :
デフォルトの名無しさん :2010/02/27(土) 04:52:01
template < class Type = int > class Some{ Type value; }; C#にはC++みたいにテンプレートにデフォルトの型を指定するような方法ある?
ない
>>923 うちの環境でもクリップボードにLabel1が!
ちなみにVirtualPC2007に入れたWindows2008 Ent SP2で発生
VSは2008Pro バージョンは9.0.30729.1 SP .NET Frameworkは3.5SP1
ちなみにVB.NETでも同様に発生した
発生したOSとしなかったOS書いてみて欲しいな
939 :
デフォルトの名無しさん :2010/02/27(土) 05:16:20
Oh no!なんてこったい。ありがと
WebRequest+Cookieでサーバーとやり取りする場合 サーバーから貰ったCookie情報は自前で管理しないとだめなのかな? wininetの時は特に気にせずに保持されてたんだが・・・ IEの機能を使ってたのでIEと同じところへ保存されてただけなのかな?
941 :
913 :2010/02/27(土) 06:02:45
webBrowserのNavigatedイベント発生した際に webBrowser.Document.xxxでイベント登録すれ ばなんとかなるんじゃないかな? でも内部的にはどうやってるんだろ? 特にmshtmlなんとかを参照に加えたわけじゃないのに 解析もやってるしイベントも起きるよね・・・
FormにWebBrowser貼り付けてDocumentCompletedでもNavigatedでもいいのでイベント処理させるようにして private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click); } void Document_Click(object sender, HtmlElementEventArgs e) { MessageBox.Show("きたよ"); } private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click); } void Document_Click(object sender, HtmlElementEventArgs e) { MessageBox.Show("きたよ"); } こんな感じで書けばレンダリング完了後のHPクリックするとイベント発生するしなあ
なぜか3回呼ばれるのは謎 あとこんな感じでHtmlDocumentの生成が終わってるタイミングだったらbodyに対してドラッグイベントとか 設定できるね private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click); HtmlDocument doc = webBrowser1.Document; doc.Body.Drag += new HtmlElementEventHandler(Body_Drag); } void Body_Drag(object sender, HtmlElementEventArgs e) { throw new NotImplementedException(); } ほかにもDragEnd、DragLeave、DragOverとかあるね 問題は参照にmshtmlを追加してないけどこいつらを使うために内部で使ってる可能性もあるのかな?
あとはこんな感じで特定エレメントを抽出して・・・・とかもあるね
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click);
HtmlDocument doc = webBrowser1.Document;
//doc.Body.Click += new HtmlElementEventHandler(Body_Click);
HtmlElementCollection elm = doc.GetElementsByTagName("dt");
elm[0].Click += new HtmlElementEventHandler(Form1_Click);
}
void Form1_Click(object sender, HtmlElementEventArgs e)
{
MessageBox.Show("きたよ");
}
これ試したときはwebBrowserにこのスレのアドレスを設定しておいた。
>>1 のdtタグ(2chのレスの数字〜ID(BEがある場合はBEまで)をクリックするとイベント発生
フォームにstatusStripとPanelを貼って、PanelのDockをFillにすると ちゃんとstatusStripをよけて広がってくれる(期待される当然の動き) フォームにstatusStripとtextBoxを貼って、 textBoxのMultilineをTrue、DockをFillにすると statusStripを無視してフォームのクライアント領域いっぱいに広がりやがる textBoxバカなんじゃないの? と、思うときはたいてい俺の方が(ry
Zオーダー意識して配置してないだけでしょ
>>946 StatusStripを再背面にしたり最前面にしたりしてみろ
949 :
940 :2010/02/27(土) 09:42:25
自己解決 wininetの関数はIEのクッキーを利用してたんですね・・ C#で同じことを実現するにはwininetを使えるようにして同じ関数で処理しないとだめっぽです・・・ ざんねん
>>946 MSの標準ライブラリを馬鹿にするな。バカはお前の方(ry
ToolStripContainerを使え。
すいません、質問です。 静的コンストラクタってスレッドセーフですか?
スレッドセーフって意味が曖昧だが、まあそうだ。
>>951 クラスがやっていることによる。
依存性がないならstaticだろうが通常のコンストラクタだろうがスレッドセーフだ。
955 :
913 :2010/02/27(土) 12:35:07
>>942-945 素晴らしい!それを見る限り、mshtml参照しなくても同じことできるっぽいですね。
mshtmlでイベント登録したときも、
なぜか3回呼ばれていました。
これはちょっとやっかいですね・・・
956 :
913 :2010/02/27(土) 13:11:15
>>942-945 ちなみにこういうことができるよ〜っていう情報はどこから手に入れたらいいでしょうか?
msdn
958 :
デフォルトの名無しさん :2010/02/27(土) 15:29:31
>>956 自力で解析した
どう検索していいかワードが浮かばなかったのでドット打って一つ一つ見て回った
959 :
913 :2010/02/27(土) 22:12:08
スクリプト言語と違ってネットに情報が少ないんですよねー MSDNはなんだか見づらいし・・・ ドット打って調べるとか、MSDNで頑張るしかないか
960 :
デフォルトの名無しさん :2010/02/28(日) 01:02:11
アクティブウィンドウを監視したいんですけど、 タイマーを使わない方法ありますか? GetForegroundWindow() を 100 ミリ秒ごとに 呼び出してもやりたいことはできるんですが、 タイマーはできれば使いたくないと思いまして。
あるかも
すみません、小文字のフルパスファイル名から HDDに記録されている大文字小文字の正しいファイル名を取得する方法はありますでしょうか? System.IO.FileInfo fi = new System.IO.FileInfo(filename); string fn = Path.GetFullPath(filename); とやっても取得できませんでした。
FileInfoの中身も正しく取得されてないのか。これ.netのバグじゃね?
964 :
デフォルトの名無しさん :2010/02/28(日) 07:30:43
バグなのかわからんけどファイルはS-JIS、内部はusc-2という変換してなかったっけ? あとは大文字小文字区別ってあったっけ?
うん、バグじゃね?
966 :
デフォルトの名無しさん :2010/02/28(日) 07:32:27
今フォルダをAAA作ってそのあとaaa作ろうとしたけど同じ物があるって警告でたよ windows(というかDOS)は確か大文字小文字の区別は無かったはず・・・
967 :
デフォルトの名無しさん :2010/02/28(日) 07:44:07
確かunix系は大文字小文字は別だったはずなんだよな・・・ なのでwindows系はもしかしたら勝手にLowerもしくはUpperやってるかもしれん
Exists等で比較するときは大文字小文字の区別はしないが、 保存するときは大文字小文字は指定されたまま保存するでしょ? でないと再度エクスプローラで表示したときに大文字小文字区別して表示できない。
普通にエクスプローラ上でaaaとAAA作るだけでも警告でるから。
>>962 var dir = new DirectoryInfo(Path.GetDirectoryName(filename));
var file = dir.GetFiles(Path.GetFileName(filename));
これでファイルがあればfile[0].FullNameに入る
フォルダ名は駄目だから同じようなことをルートからdir.GetDirectoriesしていけばいいと思う
string fn = System.IO.Directory.GetFiles( System.IO.Path.GetDirectoryName(filename),System.IO.Path.GetFileName(filename))[0]; で、正しいパスは取れるけどなんかなぁ。FileInfoで取れないのが納得できん。
表示名がcase sensitiveなのは見やすさの為だけのようだね。 それでも、見やすさが欲しい時のために大小区別して取得されるべきだと思う。
System.IO.FileInfo fi = new System.IO.FileInfo(filename); string fn = Path.GetFullPath(filename); この両方はfilenameで指定した物がそのままでるのか・・・
974 :
デフォルトの名無しさん :2010/02/28(日) 08:16:58
>>972 まあ文字の扱いを知ってる人ならいいかもしれないがそんなの知らない人はおかしいと感じるかもなあ・・・
ソース見てないけどPathクラスは文字列処理してるだけの気がする
こんな感じ? string fullname = Path.GetFullPath(filename); string[] paths = fullname.Split(':', '\\'); string fullpath = paths[0].ToUpper() + ":\\"; for (int i = 2; i < paths.Length - 1; i++) fullpath = Directory.GetDirectories(fullpath, paths[i])[0]; fullpath = Directory.GetFiles(fullpath, paths[paths.Length - 1])[0];
C#で「ネット上に情報が少ない」とか言ってる奴は、さっさとやめたほうがいいぞ。
978 :
デフォルトの名無しさん :2010/02/28(日) 09:17:58
既存のコントロールを継承したクラスを作る場合、ソリューションエクスプローラーから クラスとして追加して継承元コントロールを書く方がいいのか それともユーザーコントロールとして追加するのがいいのか・・・ 同じコントロールに同じ固定処理を施すだけなんだけで基本的には元のコントロール として使うんだけどさ・・・
980 :
デフォルトの名無しさん :2010/02/28(日) 09:20:37
>>977 少ないというかHTML関連は雑音が多いんだよ
ASP.NETやjavascript関連でHTML部分をいじる解説は山ほど出るんだが
C#になるとぐっと減るし、あってもmshtmlを使うような方法とかになるんだよ
あとはVC++とかね・・・
なのでどうぐぐれば最適な答えに辿り付くかを探し当てるのがものすごく大変だったよ
981 :
デフォルトの名無しさん :2010/02/28(日) 09:21:26
そりゃ、そのものズバリはないかもしれん。 でもさー。HtmlDocumentなんて、mshtmlをベースにしたものなんだし、 JavaScriptのgetElementByほげ系だって参考になるだろうよ。
983 :
デフォルトの名無しさん :2010/02/28(日) 09:27:53
>>982 今はなんとなく見得てきたからその言い分はわかるけど、これから勉強って人にはノイズでしかなかったと思うよ・・・
そう思いたければそれでいいじゃん。 で、一生初心者やってれば。
985 :
デフォルトの名無しさん :2010/02/28(日) 09:37:44
意地でも叩きたいのがいるな 自分だって紆余曲折した時代だってあったろうに・・・ しかも初心者用とかかれたスレで・・・
mining?
>>976 private static readonly StringBuilder buf = new StringBuilder(260);
public static string GetDisplayPath(string path) {
var pidl = ILCreateFromPath(path);
SHGetPathFromIDList(pidl, buf);
ILFree(pidl);
return (buf.Length > 0) ? buf.ToString() : path;
}
Win32APIを使うバージョンを作ってみた。P/Invokeの宣言は省略
非スレッドセーフでエラー処理もなし
質問です。 ファイラーのようなものを作っているのですが、 ファイルの「コピー」はClipboard.SetDataObjectでなんとかできました。 ファイルの「切り取り」はどうすれば実装できますか?
貼り付けた時にコピー元を削除すれば良いんじゃないの?
990 :
988 :2010/02/28(日) 17:25:01
その場合は貼り付け時のタイミングをどうにか捕まえて、 コピー元を削除することになりますが、アプリケーションを 終了してしまっていると削除できないですよね?
991 :
デフォルトの名無しさん :2010/02/28(日) 17:29:41
>>990 何で迷ってるかよくわからんが
クリップボードも確かファイルのコピーとか切り取りって
「xxをコピー予定」とか「xxを切り取り予定」
くらいで実際に貼り付けの段階まで実体は何もしてないと思うんだが
貼り付けが実行されたときに元と先のファイルをロックして自分の好きなように
作業すればいいだけと思うんだが
992 :
988 :2010/02/28(日) 17:48:05
確かに「切り取り」すると貼り付けるまでファイルが半透明になるので、 そういう”予定”の情報をクリップボード側(もしくはOS?)が保持してそうですが、 「切り取り」ですよって情報をどうやって投げる事ができるのでしょうか?
次スレは? 俺は制限で無理だった
994 :
デフォルトの名無しさん :2010/02/28(日) 17:51:59
>>992 エクスプローラーはクリップボードに予定が入ってれば張り付けが黒字になりますよね?
それをクリックしたらイベント発生でクリップボード参照して動けばいいんでないの?
難しく考えすぎ。 Excelのセルを切り取ってメモ帳に貼ってみ。 で、メモ帳のテキストを切り取ってみ。 切り取りはそもそもアプリ内で閉じた話。
996 :
デフォルトの名無しさん :2010/02/28(日) 17:53:16
>>995 ファイルのコピーとテキストとかの話は分けたほうがいいかも
テキストとかは多分選択した範囲全部持ってるだろうから
>>996 たぶんとかじゃなくて・・・
想像語る前にクリップボード監視ソフトをまず作れよ。挙動分かるから。
998 :
996 :2010/02/28(日) 17:56:56
>>997 俺は質問者じゃない
クリップボードの挙動は見てればわかるよw
>>998 分かってないから多分とかだろうとか言ってんだろw
1000 :
デフォルトの名無しさん :2010/02/28(日) 17:59:29
うま
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。