ふらっとC#,C♯,C#(初心者用) Part92
■ このスレッドは過去ログ倉庫に格納されています
ふらっとVisual C#,C♯,C#(初心者用)
このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
関連スレ
ふらっとC#,C♯,C#(初心者用) Part91
http://toro.2ch.net/test/read.cgi/tech/1335089085/
C#, C♯, C#相談室 Part71
http://toro.2ch.net/test/read.cgi/tech/1332575004/
こんな感じでソフトウェア板に立てたらどうかな ─ここは、プログラム板における同名スレにおいて、
IDが付与されないがため生じる定期的な荒れ進行を度々経験し、
疲れてしまった同スレの住人が、透明あぼーんの活用でまったりと
本来のスレの目的を果たし続けるために設けられた、
一種の避難所です。 ム板開いたのかと思ったわ
避難所part1で良かったんじゃね? >>3
感情的になった出て行け論者が立てたスレなので、
スレタイ名がメチャクチャになってしまったんだ。すまない。 荒れ気味の板がIDなしだと大抵ろくな事にならないのは分かるが、この板でする話なのか ム板から逃れる先として、ソフトウェア板以外に何かあるかな? >>7
巣に帰れってことだな。言い返す言葉もないよ。
だが、避難所を同じ板に作ってもしょうがないからな。 まあ、あっちに来た質問を無理にこっちに誘導する気はあんまり無いんだ。
向こうでも書いたけど、あっちのスレが回答不能なレベルに達してるってわけじゃないし。
むしろ、「IDがあった方が議論しやすい」と感じた人間だけが、こっちで議論すれば良いと思ってる。 こっちを擁護しておいてなんだが、これで本スレのテンプレに
こっちのスレを追加すべき/すべきでない議論とか巻き起こるのは嫌だなあ。
テンプレ周りの変更議論はもめるし。
もめるくらいなら追加したくない。 >>12
俺も一応回答者。どんくらい回答したかまでは覚えてないけど。 じゃあ、ちょっと質問
インターフェイス使うと改変に強いっていうけどプロパティとどう違うの?
プロパティも内部の構造変えても他のクラスに影響がない
影響が出るとしたら、プロパティの型を変更した場合
インターフェイスも引数の型変更したら結局使いものにならないし
改変に強いって説明の仕方おかしくない?
内部の違うクラスを同じようにアクセスできるのを明示するということならわかるけどね クラスというのは、実体を作れる型。
インターフェースとしいうのは、実体を作れない型。
「改変に強い」のは、インターフェイス自体の改変ではないよ。
改変に強い、って説明自体確かに誤解を招く表現で、
実際は「内部実装を気にしなくて良い」が正解だと思う。
インターフェイスとはちと違うけど、Streamなんかその最たるものじゃない。
Stream自体が何をソースにどうやって実現されているかは気にしなくてよくて、
処理する側はStreamクラスのオブジェクトに対して必要な処理(メッセージ)を要求すればいい。
インターフェイスを定義する、ってのはそれだけのことでしかない。
「Hoge(FileStream stream)」って定義したメソッドより、「Hoge(Stream stream)」って定義されたメソッドの方が、
汎用的に使えるじゃない。 改変に強いっていうのはどうなんだろうな
個人的には別に強くないと思うが
interfaceごしだと実装クラスを入れ替えられるけど
改変前と改変後の2つの似たようなクラスを両方保持して
interface越しにどっちを使ってるか分からなくするなんて考えただけでゾッとする
一つの具体クラスをただ書き換えるほうがずっといい
だから改変に強いと言うよりは
ライブラリを作る側が使う側に処理を実装してもらう時に使うものだと思うよ
IComparableを実装してもらってSortメソッドで使う比較関数に利用したり
まあC#3.0からラムダ式が使えるからそういう用途はもうほとんどお役御免だけどね
interface自体ほとんどお役御免といっていいと思う
ライブラリに残ってれば使うけど自作する意味は殆ど無い ム板って取扱いと人種的に宗教戦争余裕なのに未だにIDないのか インターフェースは、お役御免には、ならないと思うがな。 interface I{ int Hoge(); string Hoge2(); }
こんなのを作るより
class C{ public Action Hoge; public Func<string> Hoge2; } こんなのを作って
new C{ Hoge = () =>{ ... }, Hoge2 = () => "hogehoge" }
こうしたほうが早いしわかりやすいし個別に設定できて汎用性も上だから
もうinterfaceを作る意味は無いはず 例えば、UnityやXNAやDxLibなどを同じように扱えるようにするにはどうするべき?
ゲーム本体部分とライブラリとの丁度境界線上にあるクラスはどのように定義すべき? お役ご免ってのは言い過ぎでしょう。後々機能追加が考えられる場合、
その機能追加に耐える様Interfaceを定義するコトなんて、(自分は)ザラにありますよ。
たとえば、画像ファイルに対して順次いろんな処理をするようなソフトを作ったとき、
最初はjpgとbmpしか対応しないでおいて、いずれpngとかtiffもやりたいなあ、と思った場合、
interface ImageProcessor { ... }
class JpegImageProcessor { ... }
class BmpImageProcessor { ... }
なんて。
処理自体が短ければ>>18の言うとおり、ラムダ式で十分なんだけど、
色んな段階を踏む処理の場合、処理自体をクラス化しちゃう方が後々追加し易い。
>2つの似たようなクラスを両方保持して〜一つの具体クラスをただ書き換えるほうがずっといい
っていうような懸念がある場合は、interfaceじゃなくて抽象クラスでやればいいし。
共通部分は抽象クラスで処理して、後々追加したい機能毎に変わりうる部分は具象クラスに任せて抽象メソッドを定義だけしておく、とか。 >>23
これだと違いはファイル読み込んでビットマップ作る
ビットマップをファイルに書き出す
ところが違うだけじゃないの
具体的なクラス一個作って
public Image(Pixel[][] bitmap)
こんなコンストラクタにして
new Image(JpegLoader.Load(file))
new Image(BmpLoader.Load(file))
書きだす時は
JpegWriter.Write(image.Pixels);
BmpWriter.Write(image.Pixels);
こんなもんでよくね まあ、オブジェクト指向を完全に理解して常に完璧な形で実現出来てる、
なんて境地には到底達せないと思うので、今の自分の実装が正しいとも言い切れないんですけど。
Rxとか見てると、ラムダ式で全部・・・なんてのも決して非現実的ではないと感じるし、
「一つ一つの処理は短く」という基礎的なことを突き詰めていけば、
そういうこともきっとできるんだろうなあ、とは思う。
ただ、それでもinterface自体が無くなる可能性は低いだろうな。
俺は逆に、Rxが駆逐しようとしているのは開発者がclassを定義する、
という行為じゃないかと感じる。 >>25
それだと、あっちこっちで処理対象がJpegなのかBmpなのか判定しなきゃいけなくなるでしょう。
処理が読み込みと保存だけでいいなら、2箇所ぽっきりだしそれもありだと思いますけど。
Classとインターフェース作っちゃえば、インターフェースを介して処理してる本体側は大きな変更することなく、
一番アタマで対象の判定だけやって、クラスの実態をnewした後は同じ処理を続けるだけ、で行ける。 極端に汎化するなら、こういうインターフェースを作るかな
interface ImageProcessor {
/// <summary>指定されたファイルがサポートされているかどうかを判定します。</summary>
bool Supported(string fileName);
/// <summary>指定されたファイルを読み込んで、オブジェクトを初期化します。</summary>
void Load(string fileName);
〜
}
本体側は
AssemblyからImageProcessorを継承してるクラスを全部引っ張ってきておいて、
private static readonl List<T> processors;
private ImageProcessor processor=null;
private Load (string fileName){
foreach (var p in processors){
if (p.Supported(fileName)){
processor=p;
break;
}
}
if (processor==null) throw new NotSupportedException(string.Format("{0}は未対応のファイル形式です", fileName));
processor.Load(fileName);
}
みたいな。こうすれば、処理本体側は変更なしで対応形式の追加が出来るだろうし。 まあ別にいいんだけどねこれでも
public Image(Func<Pixel[][]> reader, Action<Pixel[][]> writer)
public void Load()
{
Pixels = reader();
}
public void Save()
{
writer(Pixels);
}
これでinterfaceと大体同等だけど最初に入れてから入れ替えができなくて無意味に汎用性が下がるし
呼び出し側もメソッドの中で何が起こるのか分からなくなってソースがわかりにくくなるんで
必要がなければ避けるべき形だよね
public void Save(Action<Pixel[][]> writer)
{
...
}
処理の汎用化が必要でも、こんな風にライブラリ側だって必要なときに必要な物だけ渡してくれた方がわかりやすいし使う側も使いやすい
interfaceを使うと呼び出す場所(たとえばSaveを実際に呼び出すところ)とそれが定義されてる場所(Save処理を実装したクラス)が離れちゃうからわかりにくくなる
なにより「interfaceにそのメソッドが必要かどうか」という難しい判断をする必要がなくなるから問題がすごく簡単になる まあ、やりたいことにあった方を選べば良いんじゃないかな。
実際、その二つの方法を提供しているライブラリも多いよ。
俺もそういうやり方することあるし。処理が端的に済む場合なんかは特に。
で、じゃあどっちかしか使わないか、っていうと、時と場合に依った。
どっちでも実現できる場合もあれば、どっちかじゃないとどうにもならん、とか
一方のやり方だとやたら遠回りなやり方になる、とか色々あったさ。
ライブラリを公開する、って観点で言うと、>>30みたいなやり方の方が使いやすいだろうな。多分。
実際、interfaceを定義する、っていう手間はあれで結構大変だし、ホントやりやすい方でやればいいと思うよ。 ただ、制限がクリアできるならabstractの方が便利だけどね
interfaceで同一視したいクラスって、共通の処理がある程度有るし まあ実際、interfaceとabstract classどっちが多いかっつったら、
今まで書いてきたような目的下だと、abstract classの方が多いな。 >>22
ゲームで必要な機能だけを、ある程度そのゲームに特化した形で抽象メンバにする
間違っても汎用的なライブラリを作ろうなどと考えてはいけない 基本プログラミングっていうのは自分でライブラリを書いて自分で使うことの繰り返しだからな
汎用性が高く使いやすいライブラリを書いていくと良いプログラムになる
使いにくく汎用性が低いライブラリを作るとソースがなんだかわからなくなったり仕様変更できなくなったりする 最初はそれも上手く行かなくて辛いけどな。試行錯誤を繰り返していく内に、
どうすれば汎用性が上がるかが分かってきて楽しい。 さんざ苦労してライブラリ作っても、意外と使わなかったりするな
使わずに温存してるうちに陳腐化したり、もっといいライブラリが登場したり… 今必要じゃないライブラリ作ってもしょうがないよな
テストもろくに出来ないだろうし それあるよな。必要な物書いていったらいつのまにかライブラリになってたってのが理想的。 もはやライブラリを作るほうが本来の目的になってる時、あるよねw 作りたいツールを思いつく→ツールに必要なパーツを作る
→そこで満足する、または飽きる そこが楽しさだからなぁ
完成が見えた時点でやる気が無くなる デバッグが一番大変だわ
コード書いてる時は楽しいんだけど
バグを出すために色々やってみるとかキツい
自分が使うツールじゃなかったらまず無理 まあム板には相談室があるからふらっとがこっちにあっても
最悪質問者が誰もここまでこれなくて潰れても大して問題はないんだよな あっ・・・ソフトウェア板様に、って貼られたテンプレをつかっちまった
スレタイ・・・すまない。 なんだかよくわからないことになってきたな・・・
どっちに来ても質問が来たら答えるだけだけど VC#のデザインでコピーして貼り付けた時、Nameプロパティをコピー元に似せる方法ってないですか?
input_data_Box1ならinput_data_Box2とかinput_data_Box1(1)とかになってほしいです・・・ 継承するかユーザーコントロールにしてInput_data_Boxっていうクラス名にしたらいいんじゃないの ありがとうございます
特に付加する機能のない継承をやるくらいしかないんですね 俺はなにもかもユーザーコントロールにしてる
1クラスに配置するコントロールは4つぐらいまで
超えたらユーザーコントロールにまとめる >>61
んなことないでしょ
よく出てくる複数のコントロールの組もあるし(追加、削除ボタンの付いたリストとか)
WinFormは継承しなくても基本全部いじれるようになってるから
単一のコントロールでもDock.Fillしてユーザーコントロールのなかで機能追加したりも出来るし >>62
俺は、コントロールのプロパティをバインドさせたりすることがよくあるから、
INotifyPropertyChangedインターフェースを実装したUserControlの派生クラスを作ってる。
他にも共通機能とかをまとめておけば、いちいち実装し直す必要ないし、便利。
>>61
まあ、変な基準でまとめると全く無くなる。
でもたとえば、ファイルパスを入力するテキストボックスと、参照ボタンのセットとか、
意外とよく使う組み合わせ、ってのは多いからな。
>>60のいう4つくらいまで、っていうのは何だか凄いな、と思うけど。
レイアウト系のパネル配置し出すと、4つなんて容易に越えてしまいそうなもんだが・・・ 全部作り終わってから、ちまちまとライブラリに落としこんで行ったら動かなくなった。元に戻しても動かない(´・ω・`) >>66
素人考えの眩暈のするような間違った内容だけど、自分の考えを書いてはいるんで別の人かな。
JITの話が出てたんで関連Tips
・JITとインタプリタは違う
・JIT結果はAppDomainをまたいで共有される
・Assemblyにする段階で構文解析終わって中間コードになってるためJITは高速
・コールドスタートアップだとJITコンパイラの読み込みに時間がかかる
・全部NGENしとけばJITコンパイラの読み込み自体がスキップされる
・JITさせたくないならNGENしときましょう >>67
動かなくなるようなライブラリの落とし込み方ってどうやるんだ・・・
クラス単位で名前空間移して別DLLにするだけだろ?
アプリ側で随時using追加すれば動かなくなることなんてないだろ・・・ いまさらだがテンプレ抜けていたので
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
http://pastebin.com/
コードを貼り付けてrun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます 複数のテキストボックスを入れたコントロールを用意し、
テキストボックスのTextプロパティ等をコントロールのプロパティで変更できるようソースに追記しました
(デザイナーで初期値を変更すること、プログラム上で参照することが目的)
デザイナーで初期値を変更することはできたのですが、プログラム上で参照することができません
using ディレクティブまたはアセンブリ参照が不足しています。
とエラーが出ます
検索するとNamespaceを追記すると良いと出てくるのですが、コントロールと本体のNamespaceは同じで、
最初から付いているコントロールのTagプロパティは参照できます
Modifierをprivateからpublicに変えたりもしたのですが、駄目でした
ソースは次レスで書きます //○プロパティの追加(1例)
public string Text_Box_Tag
{
set
{
input_tag_Box.Text = value;
}
get
{
return input_tag_Box.Text;
}
}
//○本体
//Tagの代入
foreach (Control item in Text_input_group.Controls)//コントロールはText_input_group内に配置しています
{
if (item.GetType().Equals(typeof(Control)))
{
int a=(int)item.Tag;//元からコントロールにあるTagプロパティは取得できます 中身は0〜です
Tag[a]=item.Text_Box_Tag;//追加したプロパティ エラー
Key1[a]=item.Text_Box_Key1;//追加したプロパティ エラー
Key2[a] = item.Text_Box_Key2;//追加したプロパティ エラー
Data[a] = item.Text_Box_Data;//追加したプロパティ エラー
}
}
処理が足りていないのでしょうか?
へ、ヘルプ・ミー 一例、でわかるかよ。
そのプロパティの中に原因があるんだろ。 ン?違うな。なんだこのソース。
そもそもコンパイルできねえじゃん。 プロパティを追加したとかいうクラスの名前はなんだかしらないが、
そのクラスでキャストしなきゃそのプロパティにアクセスできるわけないだろう。 複数のテキストボックスを入れたコントロールのクラス名をTextBoxesControlとすると
if (item.GetType().Equals(typeof(TextBoxesControl)))
{
//ちゃんとTextBoxesControlにキャストする
TextBoxesControl boxes = (TextBoxesControl)item;
int a=(int)boxes.Tag;//元からコントロールにあるTagプロパティは取得できます 中身は0〜です
Tag[a]=boxes.Text_Box_Tag;
Key1[a]=boxes.Text_Box_Key1;
}
みたいなかんじでキャストすると、追加したプロパティにアクセスできるよ
Controlのままでは追加したプロパティにはアクセス出来ない エラー、ってコンパイルエラーのことだったのね。浅はかな回答して済まん。 >>76
なるほど
クラス名でキャストしてあげる必要があるんですね
無事コンパイルが通りました
ありがとうございました
>>77
いえ、私の説明不足ですみません 本スレはいよいよ崩壊しているな・・・
回答がままならない あの状態で答えられるエスパーは確かにあのスレにはおらんな。
たまにエスパーのいるスレがあるけど、ああいうエスパー達はどういう次元にいるのか理解が及ばない。 あれはIDの必要性を分からせるための自作自演に違いない ふと思えば、そもそも、あのプログラムでxcopyを使う必要はあったんだろうか・・・ >>77
コンパイルエラーと言えば、今作っている奴がコンパイル完と共にVSがエラーで落ちるorz
その後再起動すると普通に動くんだが、修正するとコンパイル後に落ちる
どっかのシンボル名が問題起こしているっぽいのだが情報有ったら教えて貰えませんかね? TextRenderer.MeasureText のオーバーロードの一つ
public static Size MeasureText(
IDeviceContext dc,
string text,
Font font,
Size proposedSize,
TextFormatFlags flags )
proposedSizeの意味がさっぱりわからないんですが
誰かバカな私に噛み砕いて教えて下さいませんか?
ちなみにバストは86cmです
MSDNにはこうありますが……
When measuring text on a single line, if the proposedSize parameter represents a Size with a height dimension greater than Int32.MaxValue , the returned Size will be adjusted to reflect the actual height of the text.
1 行のテキストを計測したときに proposedSize パラメータが Int32.MaxValue より大きい高さを持つ Size を表している場合、返される Size が調整されて、実際のテキストの高さが反映されます。 >proposedSize パラメータが Int32.MaxValue より大きい高さを持つ Size を表している場合
ここんところが意味不で困ってます
Size.HeightはintですからInt32.MaxValueより大きいってどゆこと? MaxValueって31bit+符号で表現できる最大ってことじゃなかったっけ?
ファイル長なんかだとLongも一緒につかえるよね 見た感じproposedSizeに収まるテキストの最大のサイズを返すんじゃないか
MSDNがバグってるんだろう DataGridViewのFillの挙動が気にくわない。
「表示幅が余ったときはFill、それ以外の時はAllCells(ExceptHeader)」みたいな挙動をさせたい場合、
DataGridViewの継承クラスで容易に実装できないもんかな・・・
FillWeightとの絡みとか考えたら大変そうっちゃ大変そうなんだけど、
元々のFillの挙動(表示幅が不足すると、見切れてしまうしサイズの変更も出来ないしで詰む)が頭悪すぎて
どうにもこうにも。 protected virtual CalculateColumnSizeCode とかそういうメソッドが隠れてねえかなあ、と
探したけど、それっぽいの無いんだよね・・・。 知らんけど一個一個MeasureTextして入るかどうか調べればいいんじゃねえの? 失礼します。改行コードについての質問です。
改行1つをRead()で読み込むと10進で1310が返ってくるのですが、
これはCR(10進で13)とLF(10進で10)をまとめて1文字として読んでいるという認識でいいのでしょうか。
だとすると、CR+LFと\u051E(16進51Eは10進で1310)とはどう区別して判定するのでしょうか。
(\u051Eなんてめったに使うものではないでしょうが。)
もうひとつ、int型の1310をString.Format(string, Object)で16進変換すると"DA"が返ってます。
1310を分割して13->"D",10->"A"としているのだと思いますが、
これはどういうロジックでこうなるのでしょうか。なぜ"51E"ではないのでしょうか。
よろしくお願いします。 CRが13,LFが10の2文字でしょ
2文字をいっぺんに読んで、何かよくわからない過程を経て1310に到達してるんだろうと思うけど
http://ideone.com/FlooQ
1310は16進数だと51Eになるみたいだよ 自己解決しました。一度のつもりの処理を二度行っていただけでした。
こんなことで小一時間悩んでいたなんて・・・ 文字コードの制御コードはすべてアスキーコード互換じゃないかな?
http://e-words.jp/p/r-ascii.html
やっぱIDいいよな
ない向こうは相変わらず荒れてるし
必死にIDあり移住に反対してた奴はいなくなったようで平和だ ここは盛り上がることが目的と違うし。
避難所、って銘打ってるんだからそれでいんじゃないの。 まあ程度が知れてる。完全に荒らし目的だろうから、どうでもいい。 C#で作られてるソフトで、無償で、おまけにソースも見られる
そんな勉強するのに便利なフリーソフトってありますか?
他人のコードを見て勉強したいが、日曜グラマにそんな友達は居ない。 >>107
どの程度のレベルかわからないが、msdnにはいくらかサンプルやビデオがあるし
codeplexやSourceForgeはオープンソース
どこも自分にぴったりのものを探すのは難しいけど
具体的にどういったソフトを作りたいか言ってくれたら
もう少し細かくアドバイスできると思うが ニュース系板もなんか暇なやつかネタが無い業者の釣りなのかしらんが
数年前の事件でスレ乱立してるしなあ
>>107
VS2010Express
Expression Blend評価版
逆コンパイルすれば最高峰のC#コードが読み放題 Expression Blendなんか使わなくても、ILSpyでも入れればいい。
いや勉強の例として挙げたんだ
Expression Blendは全部C#だし0から一気に作られてるからとても綺麗 ネットにアクセスするのにイテレータ使うとだめだな
プロパティを読みに行く度にネットに接続する
foreachなんか使うと、F5連打状態
気づいてよかったわ イテレータを使うとダメなんじゃなくて、
イテレータの使い方を間違えるとダメなんだと思うが・・・。
まあ、変にイテレータに拘るより、馬鹿正直に書いたソースの方が、
往々にして後々保守性高かったりするけどな。 まずメモリーの無駄とか気にしないでList<T>なり作って
とりあえず読み込んで、動くものを作れば良いんだよ。
そうすれば、イメージが具体的になるわけだし、それから最適化を掛ればいい。
まったくもってその通りなんだけど
今回の場合、深い階層で使っていたのを忘れて利用したために起きた
1レス読むごとにアクセスするみたいな感じ やるなら裏で非同期ダウンロードしながら列挙するのが筋だろうな
でも列挙がダウンロードに追いついてしまったらブロックすることになるから
やっぱり昔ながらのコールバックのほうが現実的だろうな 画像編集ソフトとか作れる?
取り敢えずビットマップで色塗るだけ出来れば良い そんなhelloworldの次あたりに作るようなもん誰だって作れるだろ >>120
作れる。Paint.NETが代表例。
真面目に作ると難しいけど単純なやつなら
System.Drawing.Graphics使って図形描画するとこからやるといい ペイント系も作れるしベクター系も作れる
ところでフリーで地図データが手に入るところないかなあ
ここのsvgデータをxmlで処理した後座標パーサを書いて
bitmapにしてみたけどなんかおかしい
http://www.kabipan.com/geography/whitemap/index.html
メモ帳とかみたいにUndoしてみたいんだけど・・・ まあundoできるできないとグラフィック関連を扱えるようになるのは
わけて考えた方がいいな
まずはどうすればグラフィック関連をいじれるか学んだほうがいい どうせ課題の答えでも聞きに来たんだろ
聞く態度もなってないし問題丸投げで聞くし
こうこうこういう風にしたけど出来なかったとかいうのもない
まったく考えないでクラスの優等生に聞きに行くようなタイプ でも現実問題としてどうすればいいですかねといわれても
現段階だと、画像系ソフトの骨格を作るくらいのレベルに
なるからちょっと気軽に質問して応えるレベルではないのも事実なんだよね・・・ pictureBoxがクリックされたらその座標を修得→その座標の色を変更
とか? 以前ちょっとやってたのでざっくりとした内部の仕組は
頭にあるけど今は眠いのでまた明日ね
他の人でフォローできるなら相手してもらって・・・
ねる 普通にビットマップをいじってDrawImageでフォームに書き出すのの繰り返しでいいんじゃないの?
ビットマップはLockBitsっていうメソッドを使っていじれば実用になる速度で動くはず 宿題なら宿題で、要件(Undoを実装することとか)を先に出したほうがいいぜ
後出しされるとぶちきれちゃうオッサンとかいるからよぉ
宿題じゃないならもっと聞きようとか口のきき方があるだろボケ、と言いたいね ざっくりした骨格
http://ideone.com/TUgUt
undoしたいってことはどういう変更を掛けたか管理してないと駄目 ざっくりとした質問にはざっくりとした答えで良いのだよ。 素朴な疑問なんだが、IBindingList.Findっていつ使われるんだ?
DataGridViewで表示してても、あんまりありがたみを感じないんだが。 Javaを少しやってた者だけど
今まで趣味で適当に使ってたC#を勉強してみようと思ってる
それで下のどちらかを買いたいんだけど、お勧めはある?
Effective C# 4.0
http://www.amazon.co.jp/dp/4798122513/
究極のC#プログラミング ~新スタイルによる実践的コーディング
http://www.amazon.co.jp/dp/4774138622/
Effective Javaが重宝したから(つまりそれ系の本が欲しい)
一先ずEffectiveシリーズ買っとこうかと思ったけど
レビュー見てるともう一個の方も捨てがたい様に思う
いずれ両方買ってみたいけど金が無いのでどれか一冊 別に本読まなきゃ分からないような言語じゃないし
Effective C++とか読んだほうがC#の中身が分かって役に立つだろう 皆レスサンクス
>>142
そうじゃなくてEffectiveシリーズ読んだことあるなら分かると思うけど
小手先のテクニックやら作法の様な基本を知りたい
なまじJavaの知識だけで物が作れるもんだから
C#的な部分としての基本を見落としてると思う
読んだこと無いけどEffective C++読めってのは極論過ぎない?
>>144
上で挙げた本って中途半端なの?
別に良書があるなら教えてくれ
ネットは結構目を通してるから紙媒体で何か欲しい 電子書籍版あるんだね
でも英語は自信無いや
1冊目は無難にネームバリューのあるEffectiveにするよ
ありがとう 質問です。長くなるので分割投稿します。
SQL Server CE 3.5 を使用しているのですが、
次レスのコードを実行してもテーブルに情報を挿入できません。
そのテーブル名は「test」で、単純に「id」、「hoge」列だけをもつものです。
(続きます) SqlCeConnection conn = new SqlCeConnection();
conn.ConnectionString = @"Data Source=DB.sdf";
conn.Open();
var transaction = conn.BeginTransaction();
(続きます) try {
var command = conn.CreateCommand();
command.Transaction = transaction;
command.CommandText = "INSERT INTO test (id, hoge) Values ('123', 'abc')";
int row = command.ExecuteNonQuery();
transaction.Commit();
} catch (Exception ex) {
transaction.Rollback();
(続きます) 上のコードを実行すると、変数 row の値は「1」ですが、
「SELECT * FROM test」すると、何も格納されていません。
しかし、Visual C# 2010 Express を使用して、
直接テーブルにクエリを発行して入力したデータをSELECTすること
(ExecuteReader()の返り値を参照)はできます。
どのようにすれば、C#のコードでINSERTやUPDATEができるのでしょうか?
(以上です) >>151
すみません。>>70 の存在に気づかないまま、書き込みしてしまいました。 怒ってはいないよw
テンプレが>>70っていうのも遅すぎだし
ただそういうサイトもあるとは知っておいてね INSERTしたのとSELECTしたのでデータベースファイルが違うんじゃね? 回線が途切れたのでID、変わります。
>>153
お心遣いありがとうございます。次から >>70 を使います。
>>155
レスありがとうございます。
確認しましたが、データベースファイルは同じものでした。
INSERT する時も、SELECT する時も、
同じ SqlCeConnection() のインスタンスの接続を使用しています。 ttp://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/934bdbe3-2217-4cd7-bfc9-ae2ef5b731ac
具体的にはこれなんだけど >>157
重ねてありがとうございます。
プロパティの「出力ディレクトリにコピー」を確認しましたが、
既に「新しい場合はコピーする」になっていました
ちなみに「常にコピーする」に変えてもみましたが、変わりませんでした。 書籍も@ITもざっくり説明しているだけだからな
コピペはできても応用が効かない感じになる
ある程度わかった上で復讐がメモ代わりに見るのはいいけど
やっぱりmsdnが出発点には一番いい MSDNは、リファレンスとしては、使うこともあるが、
学習用としては、あまり使わないな。そこらへんは、人それぞれか。
MSDN Blogsの記事(http://blogs.msdn.com/b/nakama/)は、読んでおいて損は、無いと思う。
なんか例外出てんじゃないの? catchするの止めてみたら? >>162
これは >>152 へのアドバイスいただいているのだと勝手ながら解釈します。
レスありがとうございます。
例外は出ておらず、catch 句に処理は移っていませんでした。
以来、どうしようもなくなったので、すべてまっさらにして、
Visual C# 2010 Express で新たなソリューションを作り直したところ、
正常に動作するようになりました。
原因は終ぞ分からなかったものの、これで自己解決の気分にしたいと思います。
正規表現についてなんですが、たとえば
001 001 002 002 003 004 004 005 005
とある時、自分の場合00[0-9]でマッチさせるんですが、最初の001にマッチさせたあと次にいきなり002にマッチさせる方法ってないでしょうか?
やはりNextMatchを2回呼ぶしかないのでしょうか?なにかいい方法を教えてください >>165
for(,,){
regex.matches("?(00"+i.ToString()+")*");
} var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");}; >>168
LINQ使う手があったんですね。それで試してみます。
>>169
まあそんなところですw
あと1つ質問なんですが、
for(int i = 1;i < 999;i++)
{
Match m = Regex.Match(src, @"00" + i.ToString());
if(m.Success)
data[i] = m.Value;
}
こういうコードを書いてみたんですが、これではだめなのでしょうか?
>>170
それだと00998になるんじゃない?
3桁にしたいならこれ
(src,"?("+ i.ToString("n3")+")") >>170
あと。変数名は明確にわかりやすくするのが基本だ。
Match 今夜のおかず = Regex.Match(...
この前置きの?ってどういう意味があるんでしょうか?
代替構成体ってやつですか? ちゃんと読んでないけど
?って0-1文字の何か,だよね
区切りのスペースを吸収してんじゃないのかな 最初のはてなは何なんだろうな
MSDN見ても書いてなかったわ C#で正規表現は使えるけど正規表現の記述ルールは
perl5準拠だから分けて考えろよw 001 002 とかの文字列作ってから比較するなら、正規表現じゃなくてstringのcontainで充分だよな
具体的に>>170を書き換えると
if(src.Contains(i.ToString("000")))
{ http://msdn.microsoft.com/ja-jp/library/az24scfc.aspx
だからMSDNの正規表現に書いてないんだから最初に?つけるなんてのはないんだよ
必要なのは専門スレにいくことじゃなくてここで?つけてた奴が誤りを認めることだろ MSDNに書いてなくてもperl5準拠で動いてるんだから
正規表現のプロに聞けって
正規表現 Part9
http://toro.2ch.net/test/read.cgi/tech/1323566370/ 俺はそんな馬鹿みたいな質問をして恥をかくのは嫌だよ
最初に?つけてた奴が出てきてどういう意図で書いたのか言えばいいだけ
間違った解答をしたんだからその責任がある
くだらない言い争いでスレを汚すのはやめてくれ 恥ってw
匿名掲示板なんてかき捨てだろうにw
下手なプライドでごちゃごちゃ騒いでるほうがみっともないわ
専門スレで聞けば教えてもらえるのに 170のロジックで、何故正規表現が要るのかさっぱり判らん 最初に?をつけるのは最短一致だよ
つまり最初にマッチしたものだけが有効
何が不満なんだ? var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};
この正規表現なんかメチャクチャじゃん
なにとマッチさせようとしてるわけ?
なんでiは1から5で決め打ちなのに2つ目は\dなの?
そのあとの+は何?11とか111とかにマッチさせたいの?
それに対してなるほどとか言ってるのは何? 自演? 最短一致は+とか*の後につけるんだよ
わけの分からんことをいわんでくれ なるほどって言ってるのは、エロ画像の部分に対してじゃないの?頭冷やせよ。 試したけど最初に?が付いてると正規表現の解析時点で例外が飛ぶ
最後についてる*のおかげで何もない文字列にもマッチする
知ったかぶって初心者に間違った知識をひけらかして開き直ってるんじゃないよ
なにが専門スレで聞けだこんな初歩の初歩の内容で その煽って答えを引き出そうってのは
プログラム板でやれよキチガイ
正解をいまコピペしようと思ったがやめたわ >>188
1から5ってお前が001から005までしか出してないじゃんw >>175
お礼遅れてすいません。あれから調べてみたんですけどやっぱりよくわかりませんでした
>>186
画像URLを判別する正規表現なんですが、実際はもっと長いURLなので正規表現を使いました
いろいろ答えてくれた方ありがとうございます。
あと、自分の質問で荒れてしまい、すいませんでした。 こんにちは。
xmlとかの使いかたがわからないので力技でその環境に合わせたexeをビルドする、ってプログラムを組もうとしています。
で、最後の最後で引っかかってしまいました。
csc.exeを叩いてビルドさせようと思ったもののcsc.exeだけでは動作しません。(当たり前なのはわかっています)
.netのフォルダごとまとめて配布しちゃうとかすればビルドの面では問題ない(ファイルサイズとか他にもいろいろマズそう)ですが、それは避けたいところです。
それ以外の方法でC#をビルドする、ってのはどうすればいいんでしょうか。
XmlReaderとかXmlWriterとか・・・ プログラムからビルド、ってのもできるんですね。個人的にそれはちょっと避けたいのでごめんなさい。
XMLとかは一切勉強してないのでそこからですかね。
build.batとかを作ってuserにcsc.exeのpathをいじらせる、それをプログラムに叩かせる ってのを想定して試しに組んでみたもののいろいろやる必要があるっぽいですね。
batはユーザに叩かせるものにしようと思います。それぐらいやってほしいところですし…。
ありがとうございました。 >>203
なぜ勘弁したいのか分かりかねる。
プログラムからビルドして、ビルドしたアセンブリを.exeなり.dllなりで保存すりゃあいいじゃないか。 >>206
なるほど、みるリンクを間違っていたようだね。
>>202の最初の方のリンクに頼りつつ別のexeを作ってそっちに投げる形で努力してみる。みんなサンクス 位置づけ的にこっちは避難所みたいなもんだから別にそれはそれで良いんじゃね
この板は確かなかなか落ちなかったはずだし 久しぶりにここに来たのだが
前からIDの表示ってあったっけ? 息をするように自演してるからこっちでやらかしそうで怖い public Form1()
{
InitializeComponent();
var MonthCtrl = new MonthCalendar();
MonthCtrl.ContextMenuStrip = this.contextMenuStrip1;
var CtrlHost = new ToolStripControlHost(MonthCtrl);
this.testAToolStripMenuItem.DropDownItems.Add(CtrlHost);
}
http://www1.axfc.net/uploader/Img/so/142186.jpg
メニューを開いたまま右クリックでコンテキストメニューを開くにはどのようにすればいいでしょうか ToolStripDropDownMenuを継承して
OnClosingをオーバーライドしてコンテキストメニュー表示時はe.Cancel = trueにする
その後閉じる処理をどこかでしないと表示しっぱなしになるからそこんとこうまく処理する >>217
ToolStripDropDownMenuの使い方に少し悩みましたが何とか目的を達成できました。
本当にありがとうございます Form1.csに色々と機能を詰め込んでツールを作っています
ツールの機能が増えてきたので、classを分けようと考えているのですが、どのように分けるか迷っています
・メインのテキストボックス(仮にtextbox1とする)があり、各機能からtextbox1のプロパティにアクセスする
・機能ごとに使用するボタンやコンボボックスが複数ある
思いつく方法としては
1.textbox1のプロパティをgetsetでForm1.csのプロパティとした上で、機能ごとにカスタムコントロール化する
→各ボタンのclickedが各カスタムコントロールのソースで書ける点がメリットだが、カスタムコントロール内のプロパティをForm1.csのデザイナーでいじることが面倒になる
2.各ボタンはForm1.cs上で設置したままで、各機能ごとにclassを作成し、Form1.cs上のソースでclickedが呼ばれたら各機能のclass内のメソッドを呼ぶようにする
→各ボタンのプロパティをForm1.csのデザイナーで設定できる点がメリットだが、Form1.cs上にclickedが残ることで綺麗に整理できた気がしない
今のところ1でやろうかと思っているのですが、アドバイスやこうするといいぜって方法があれば教えて下さい 抽象的なアドバイスで申し訳ないけれど、
コントロールを起点に思考するのではなく、データを起点に思考すると良いかと思う。
A, B, Cというコントロールをこういう風に操作するから・・・ではなく、
α, β, γというデータをこういう風に編集するから・・・で考える。
コントロールは、それぞれの編集において
・編集処理の起点(ボタン操作などのイベント)
・編集結果の表示
である、と捉えておいた方が、良いと思う。 たぶんMVCだがMVVMについては、考え方がいろいろあるので間違ってるかもしれないが…
UIであるフォームやコントロールは、ユーザーとの対話であることが前提だと思う。
具体的な処理とは、データベースに接続したり、データを取得するとか、ネットワークに接続する等。
この具体的な処理をモデル。
Form1.csなりUIを取り扱うコードで必要なのは、ユーザーからの要求・結果の表示に留めておく。
それらのUIに関する処理をビュー。
それらの間に位置するのがビューモデル。
ビューモデルの役割は、モデルのデータを取ってきてビューに表示できる結果を作ったりする。
ListBoxコントロールとかDataGridViewコントロールのDataSourceに関連付ける為のリストなどをビューモデルに持たせておく。
ビューであるフォームやコントロールは、ビューモデルが公開するイベントなどを使って
結果の表示やビューが公開するメソッドを呼んで何かしら操作の要求を行うようにする。
つまり、機能そのものとユーザーとの対話部分は、きっちりと分けて作っておいて
UIが無くても機能自体は、使えるようにする感じに。
※そこまでやるなら、WPF使えよ…という突っ込みは、受け付けていません。 >>219
Form1.csとかにロジックを書くのは常に悪手だよ
class Kinou
{
public Kinou(CustomControl cc)
{
cc.Event += (sender, e) => EventAction();
...
}
void EventAction(){ ... }
}
機能ごとに自作クラスに必要なコントロールを入れて何をするか一個一個書くべき
Formとかはレイアウトの都合でデザイナで自動生成されるだけだから
機能ごとにクラス分けしたりするには不向き
Formのメンバなんか多すぎてインテリセンスが使い物にならなくなるしね
だから2を一歩先に進めて全部自作クラスでやればいい >>220-222
レスありがとうございます
MVCについて調べてきました
「コントロール→モデルのアクセスはあるが、モデル→コントロールやモデル→ヴューのアクセスはない」という考え方は意識していませんでした
すると、機能ごとにカスタムコントロール化するというよりも、各機能のメソッドをモデルとして抜き出して、
textbox1のプロパティは引数として与えて、モデル処理後に返させる or 別にデータを用意してモデルに管理させて結果として返させる という形にした方が良いのかと思いました
モデル→コントロールというアクセスがない方向でクラス分けを考えてみます モデルからコントロールはもちろんいじっちゃだめだよね
でもモデルで処理するだけなら通常のプログラミングの範囲で
GUIの困難はそこを分離しただけじゃ解決しないからね モデル:元請け業者
ビューモデル:仲介業者
ビュー:下請け業者
下請け業者から元請け業者に直接要求することは、できないし、
元請けも下請けに直接、何かすることは、できない。必ず仲介業者を通さないといけない。 >>223
レスありがとうございます
全部自作クラスでやれたらいいというのは分かるのですが、
教えていただいた方法は
自作クラス内で各ボタンの処理をカスタムコントロールとして受け取って処理する方法ということでいいでしょうか
自分で書いた>>219の1との違いがよくわかっていないので、よければもう少し教えて下さい >>227
>>219の1はよくわかんないけど
Form1.csのプロパティにしたりするような、Form1.csを肥大化させるようなことはやめて
各機能ごとに自作クラスを作る
ボタンを押したらテキストを改変してテキストボックスに入れる、って言う処理だったら
class Hoge
{
public Hoge(Button btn, TextBox tb)
{
btn.Click += (sender,e) => tb.Text = Model.Hoge(tb.Text);
}
}
まあこんな感じで、その機能に必要な物があったらこのクラスにどんどん入れていく
機能ごとに必要なコントロールをまとめたクラスを作ってGUIの複雑さを軽減する
ロジックはModelのクラスに分離する なるほど、わかりました
自分が現在記載している処理だとtextbox1のプロパティを直接いじっているので、自作した他クラスからForm1.cs内のtextbox1のプロパティをいじるには、
Form1.csのプロパティにしてしまうのが簡単かなと思ったので、「textbox1のプロパティをgetsetでForm1.csのプロパティとした上で」という書き方になっていました
自作クラスの引数にした方がよいということですね FlowLayoutPanelの様にAddで加えたコントロールを自動に並べるコントロールで、
並べるコントロールの位置を次は下、次は右、次は下といったように選べるコントロールはないでしょうか?
□
□□□
□□
みたいな感じで並べたいです
コントロールのLocationを直接指定していくしかないでしょうか 今、調べてるとTableLayoutPanelとかもあったのですが、普通に計算した方がよさそう・・・
素直に計算して入れます >>232
FlowLayoutPanel.SetFlowBreakでいいんじゃない?
乗っかってるコントロールから設定するならFlowBreakね。 var url = "http://www.hoge.com/";
var elem = new XElement(XmlConvert.EncodeName(url), "a");
これで落ちるんだけどなんでだろう
urlを変換してXNameに使うのは無理なんだろうか ああ普通に出来たわ
EncodeLocalNameでいいのか >>237
MSDNのその辺のドキュメントは、読んでて混乱するからな・・・
おつかれ。 >>235
レスありがとうございます
結局TableLayoutPanelで対応しました Windowsフォームのデータバインディングについてだが、
例えば、こんな感じにtargetControlのValueプロパティにViewModelのDataプロパティをバインドさせるとして、
targetControl.DataBindings.Add( "Value" , ViewModel , "Data" );
ViewModel 側でINotifyPropertyChangedを実装して、
OnPropertyChanged("Data");のようにして呼び出したときにUIとスレッドが異なっていると、
例外(InvalidOperationException)が発生する。まあ、これは、当然といえば当然なのだが、
ViewModelでは、UIスレッドを意識しないようにしたいし、コントロールのValueプロパティなんかでも
スレッドの違いを意識しないようにしたい。
今のところ思いついた方法が、コントロールが生成された直後にコントロールのSynchronizationContextを
取得してViewModelに関連付けてOnPropertyChangedでSynchronizationContextを通して
PropertyChangedイベントを呼び出すという方法だが、どうにも良い方法とは思えない気がする。
これ以外に何か良い解決方法は、ありますか? NotifyPropertyChangedみたいなのはうまい解決をしようとして
逆に問題を複雑にしてるだけなような気がする オブジェクトを保存するときXElementに変換してXMLで書き出しているのですが、
XElementに変換する一般的な書き方というのはありますか?
IXmlSerializableのようなものがあれば知りたいです。よろしくお願いします >>243
XmlSerializerは手間の割りに融通が利かないのでちょっと・・・
IXmlSerializable.WriteXml()のように再帰的にXElementを回収してくれるような仕組みがすでにあるかどうか知りたかった感じです >>244
IXmlSerializable.WriteXmlを使えばいいのでそんなもん必要ない
XmlWriterの途中にXElementの内容書き込んだり普通にできるからな ContextMenuStrip に縦方向のスクロールバーを付けたいのですが、なんとかならないでしょうか。
アイテムが多くて画面に収まらないときはメニューの上下端に▲、▼が現れてそれを押すと
スクロールしますが、それではなくスクロールバーを付けたいのです。
ComboBoxのメニューのようなスクロールバーです。
VisualStudioでコードを入力しているときにメソッドがポッと出てくるメニューのようなスクロールバーです。
public partial class UserControl1 : ContextMenuStrip
{
public UserControl1() {
InitializeComponent();
this.VScroll = true;
}
}
こんなこともやってみましたがダメでした。 なんとかならなくもないだろうけど。
プロパティひとつ設定すればというお手軽な方法はないな
ToolStripDropDownから派生して、スクロールバー表示時のアイテムの幅自前計算するとか
もしかしたらToolStripから派生して自前でToolStripItemの管理するはめになりそう
むしろFormから作ったほうが簡単な予感がする
BorderなくしてListBoxでも全体に貼り付けてとか >>247
やはりお手軽にはできなそうですか。
ListViewを張り付けたFormを試してみようと思います。
フォーカスが外れたら、消える。
ListViewのSelectedIndexChangedで何かがクリックされたとみなして
メニューが選択されたときの動作を行う。
こんな感じでしょうか。 画像のバイト列をImageに表示したいのですが真っ白なままでどうもうまくいきません。
ローカルファイルをSourceにUriで指定すると表示されるのでXAML側の記述は問題ないと思うのですが・・・
↓こんなコードですがどこに問題があるのでしょうか?
http://ideone.com/7puAt
何かアドヴァイスいただけると助かります。
速度に関する質問です
下記の同じ結果を出す、ちょっと複雑な処理があったとします
(内容はfor文中にrを元にして、下記の通り、int型変数R、G、Bを作成します
r→R、G、B 0→0,0,0 1→1,0,0 2→0,1,0 3→0,0,1 4→1,1,1 5→2,1,1 〜)
for (int r = 0; r < 100000; r++)
{
int R = r / 4; if (r % 4 == 1) R++;
int G = r / 4; if (r % 4 == 2) G++;
int B = r / 4; if (r % 4 == 3) B++;
}
for (int r = 0; r < 100000; r++)
{
int R = r / 4 + (r + 3) % 4 / 3;
int G = r / 4 + (r + 2) % 4 / 3;
int B = r / 4 + (r + 1) % 4 / 3;
}
この処理を10回処理させたところ、処理速度は10回とも0.0016代と0.0024代になりました
一例
if文タイプ
00:00:00.0016217
複雑計算タイプ
00:00:00.0024181
if文を挟む方が遅いイメージだったのですが、複雑な計算をさせた方が遅いものなのでしょうか? もっと繰り返し回数多くしたほうがいいんじゃないの
差が微妙すぎてよくわからない
あとr+2 r+1 rじゃないの同じ結果にしたいんだったら
あと計算結果とっといてどこかで使わないと最適化で捨てられちゃうんじゃない
複雑な計算させたほうが早かったりif文のほうが早かったりいろいろあると思うけどね
最適化の具合とかで 自己解決しました。
↓のようにしたら表示されました。
http://ideone.com/7p4hu
BeginInitの後に
bi.CacheOption = BitmapCacheOption.OnLoad;
を入れることで表示されました。 formとメトロってワンクリックで切替できますかね? >>250
その程度の距離のif文ならL1の中にすっぽり納まるからなあ
むしろ/や%の方が重いはず >>250
これって速度的にはどうなる?
for (int r = 0; r < 100000; r++)
{
int R = r>>2; if ((r & 0x3) == 1) R++;
int G = r>>2; if ((r & 0x3) == 2) G++;
int B = r>>2; if ((r & 0x3) == 3) B++;
}
その前に最初の計算式二つは結果が等価じゃねーだろw ちょこっとコード書いてて気になったんだが最後のパターンがなんか納得いかない結果になる
http://ideone.com/t4Tro みなさんレスありがとうございます
ケースバイケースなんですね
/や%を2回程度余分に使うより、if&++;の方が早いとのだと思っておきます
盲目的にifはできる限り減らした方がいいと思い込んでました・・・
シフト演算を使うという発想はありませんでした
というより、普段使ってないので、コードの意味がわかってないので、コードを参考に勉強してきます WPFアプリとKinectアプリ間で文字列の送受信を行いたいのですがどうすればよいのでしょうか?
Process.Start("Kinectアプリ名.exe");でKinectアプリをWPFアプリ側から起動した後、文字列の通信を行いたいと思っています。
IPCを用いたプロセス間通信を行えばよいのでしょうか?
知っている方がおられましたらご教授をお願いいたします。
このスレで質問することではないかもしれないのですが
どこで聞いていいのかわからないので質問します><
DirectShow.Netでフィルターの設定をしたいのですがどのように
して設定してあげればよいのかわかりませんorz
解説サイトも動画・静止画のキャプチャの仕方位までしか掲載
されていません。ざっくり、このメソッドを使えば程度でかまいませんので
よろしくお願いします。 >>262
そんなマニアックな状況、やってみなきゃわからんのだから
IPCでまずはやってみなよ。 c#でトランプの数当てゲームを作りたいのですが、ホームアプリケーションでいいなでしょうか? 初心者ならコンソールアプリケーションでゲームの中身だけ作ってGUI(Form)つけるのおすすめ Formでいいんじゃね
ゲーム作りたいならUnityとかゲームエンジンとか使った方がいいと思うが、自力で数当てゲームくらい作れた方がいいかもね >>264
レスどうもありがとうございます、とりあえずもう少し試行錯誤してみますね! 難しいというか、シチュエーションが限定的な質問が来るね。
まああっちで聞いても、本筋と関係ないところで喧嘩おっぱじまるからだろう。 シチュエーションが限定的なのはしょうがないんじゃないかな
普遍的な問題は大抵ググればなんとかなるだろうし
>>216の質問をしたのは俺だけど
ググっても同じ問題にはまっている人が見つからないのは本当に困る・・・ C#でDirectxを使おうとしたら、遅延通知が出たのですがどうすればいいですか? この言語のリファレンスマニュアルって糞見づらいMSDNしかないの? さらに見づらい上に古いPDFであればありますよ
あなたがC#のリファレンスと.NETのリファレンスを混同していないことが前提ですが… MSDNから必要な情報を見つけ出して、珍妙な自動翻訳に動じず英語版見に行くようになったら一人前。 デリゲートがよく分からないのでJavaScriptで例えて説明してください >>287
それはJavaだ。
JavaScriptと一緒にすんなw >>287
×Java
○Jaba
JavaScriptは使ってるようだが カスタムコントロールの中のComboBox(Bとする)の.Itemsに他のクラスからアクセスしたいと思っています
当該Itemsに別データの配列を突っ込みたいので、カスタムコントロールのプロパティにしようかと思ったら、setの記載で読み取り専用だからできねーよカスと怒られます
なにかよい方法はないでしょうか?
public ComboBox.ObjectCollection B_.Items
{
set
{
B..Items = value;
}
get
{
return B..Items;
}
} >>292
ComboBox.DataSourceプロパティ 下記で期待する動きになりました
ありがとうございました
getもDataSourceにせんでいいのかな?と迷いましたが、デザイナー上の入力を考えるとこっちの方がベターぽいのでこれで行きます
public object B_.Items
{
set
{
B.DataSource = value;
}
get
{
return B.Items;
}
} C#どころかプログラミング始めたての初心者で申し訳ないのですが質問させてください。
if (A != B)
{
return;
}
do();
と
if (A == B)
{
do();
}
では同じ処理になると思うのですが、どちらを用いるのが一般的なんでしょうか 前者はガード句と呼ばれる書き方で、主にifのネストが深くなった時に使う
ifが1段しかないのなら後者 >>301
>>302
レスありがとうございました。参考にさせてもらいます 重ねて質問すみません
txtBox1.Clear();
txtBox2.Clear();
txtBox3.Clear();
これを繰り返し構造でスマートに書きたいのですが、変数等を用いれば可能でしょうか var array = new[]{ tb1, tb2, tb3 };
foreach(var tb in array){ tb.Clear(); }
とかかな FormコンストラクタのInitializeComponent()の後ろで配列にでも入れておけ
foreachで繰り返せる なるほど!同じ型の配列に入れておけば良かったんですね
ありがとうございます 製品版のVisualStudioってメンバー変数のプリフィックスに_とかつけられます? Expressでできないからですね
Formのコントロール変数に自動で_をつけてくれたら便利だと思いまして 全然意味合いが違うじゃねえか
質問を略すな
Pro版でもできません Formを継承したクラスがいくつかIDisposableなオブジェクトを持っていて、それらをDisposeしなければいけない場合
どこに書いたらいいんでしょうか。
Form1.Designer.csの方にFormのオーバーライドされたDisposeメソッドがありますが、
そこに追加しちゃってもいいのでしょうか。(デザイナの方に影響与えたりしません?)
それともDisposedイベントでやるべきなんでしょうか。 1. そもそもインスタンススコープで扱うべきか考える
実はメソッド単位で扱えるものなんじゃないの?という回帰。
2. コンポーネント化することもちと考える。
Formと同じ寿命のDisposableなオブジェクトがあるってことは、
Formにロジックを詰め込みすぎてないか?
ロジックを然るべきレイヤに分けて、コンポーネント化しちゃえばいんじゃね?という発想。
3. Disposeしたいというのなら
.Designer.csのオーバーライドされたDisposeメソッドに書いちゃって大丈夫。 前から思ってたけどcomponentsフィールドっていつ使われるんだろ
あれに追加されたらFormが破棄されるとき一緒にDisposeしてくれるよね >>316
ども
3でいかさせて頂きます
たとえばフォントオブジェクトをフォーム上のボタン等に個別に適用した場合
明示的にDisposeさせるよい方法がないので困っていました
フォーム閉じて参照が切れればいつかGCされるさ、とか
アプリケーションが終了した時点で解放されるからいいやん、とか
それだけでなんともならないシナリオもあるのに、と…… 初心者なのでこちらで質問させてもらいます。
Aというクラスを継承してBというクラスを作成したのですが、Aの中の一部のフィールドやメソッドを継承したくない場合、Bの中でどうのような記述をすれば簡単に実現できるでしょうか?
目的は単にBのインテリセンスにそのメソッドなりを表示させたくないだけなのですが。
よろしくお願いします。 >>319
Aの該当メンバーをprivate指定する
Bのほうから継承しないという指定はできない
C++ならできるけど煩雑すぎてC#には採用されなかった private new ベースクラスのメソッド名(引数も合わせる ...){}
これで一応できるけどキャストしたらベースクラスのは呼び出せるわね newの使い道がよくわからないんだけど、virtual指定されてないメソッドをオーラーライドしたいときでいいの? オーバーライドするとベースクラスにキャストした時もオーバーライドしたメソッドが呼び出せる
つまりベースクラスのメソッドを上書きできる
newの場合はベースクラスにキャストするとベースクラスのメソッドが呼び出される
上書きしたわけじゃなくて同じ名前のメソッドが定義されたので
前のが呼びだせなくなったという感じ abstract オーバーライドしろ
virtual オーバーライドしてもいいよ
未指定 できなくは無いがnew付けろよ。
>>323,324
ありがとう。つまりポリモーフィズムとはまったく関係ない機能なのか
どんな用途で使うんだろ・・・ >>325
一番は、後から基底クラスに派生クラスのメンバと被るメンバが追加されたときに
意図せずオーバーライドしてしまうのを防ぐため
その意味では別にnewは無くてoverrideだけでいいんだが、overrideの付け忘れなのか
わざとやってるのか区別するためなんだろう visual c#で、ボタンを押すとテキストボックスに入力した英文(長文)をもう一つのテキストボックスに文を並べ替えた状態で出力するアプリを作ろうとしています。
文を並べかえるというのは、単語の並べ替えではなく、複数の文の1文1文を1つと見て、それらの文を並べ替えるという意味です。
考えているアルゴリズムとしては、入力文を初めから一文字ずつ読み取っていき、ピリオドが出た瞬間に初めからその部分の文字列を 文字列1 に代入。
続いてその次の位置からまた一文字ずつ読み取っていき、ピリオドが出た瞬間に、その部分を 文字列2 に代入・・・と繰り返し、最終的にn個の文字列をランダムに並べ替えたものを出力する、というふうに考えています。
C#で作る場合このような流れで作るのがよろしいでしょうか?その場合どのような文字列操作関数を使用していけばいいのでしょうか。
また、他により効率的な方法があればご教示お願いします。 >>328
なるほど、splitメソッドというのを使えばいいのですね。
この場合、Mr.などの単語が1つだけの文が生成されないようにするには
具体的にどう条件を追加すればよろしいでしょうか?
(Mr. Tanaka is Japanese. を1つとしたい場合等) var sentences = text.Split(".");
var list = new List<StringBuilder>();
list.Add(new StringBuilder());
foreach(var sentence in sentences)
{
list.Last().Append(sentence + ".");
if(IsOneWord(sentence) == false){ list.Add(new StringBuilder()); }
}
return Sort(list);
こんなかんじ? >>330-331
ありがとうございました
参考にして作ってみます! WPFでListboxを2つ配置して、ItemsSourceを同一のコレクションに設定した時の挙動についてなんですが
コードでこのようにしたとき
public partial class MainWindow : Window
{
ObservableCollection<Object> obj
= new ObservableCollection<Object>();
public MainWindow()
{ InitializeComponent();
for (int i = 0; i < 50; i++)
{ obj.Add(CreateRectangle());
obj.Add(i.ToString()+"s String");
}
listBox1.ItemsSource = obj;
listBox2.ItemsSource = obj;
}
Rectangle CreateRectangle()
{ Rectangle r = new Rectangle();
r.Width = 20;r.Height = 20;r.Stroke = Brushes.Black;
return r;
}
}
片方のListboxに表示されているRectangleはもう片方のListboxの表示からは取り除かれてしまいます
stringについては両方同時に表示されますし、片方のDisplaymenberPathをNameなりHeightなりに設定した場合も同時に表示されます
このWPFの図形の表示の仕組みについて解説お願いします UIElementがデータソースになった場合、
それは直接ItemsControlの子孫要素になる
UIElementは一つの親にしか属せない
普通はRectangleはDataTemplateにして
ItemsSourceにバインドするのはその構成要素だけ持つクラスにする XmlSerializerを使ってデータを一時的に保存したいと思っています.
今作っているクラスはUserとEventListとEventの三つになり,こんな感じに他にデータも含みます.
User
-string name
-EventList
--Event
---int x,yなど
保存したいのはUserクラスで,List<Event>を含んでいたので,
http://handcraft.blogsite.org/ComponentGeek/ShowArticle/60.aspx
を参考に,IXmlSerializableを実装してリストを保存するだけのクラスEventListを作りました.
そしてEventやEventList単体のシリアライズ化には成功しました.
ですがUserクラスのシリアライズが上手く行きません…
Userクラスはこうなっています
public class User {
public EventList event_list;
public string name;
public User() { }
}
シリアライズのコードはこうなっています.
XmlSerializer serializer = new XmlSerializer(typeof(User));
using (FileStream fs = new FileStream(@"C:\test.xml", FileMode.Create)) {
serializer.Serialize(fs, user);}
実行すると
$exception {"There was an error reflecting type 'mtest.User'."} System.Exception {System.InvalidOperationException}
というエラーがXmlSerializer作成時に出ます.
event_listをコメントアウトすると上手く行くのですが,クラスの中に自作クラスを持つ場合は別の処理方法があるのでしょうか?
よろしければ解決方法などを教えて頂けると幸いです. >>336
別に普通にやればいいだけなはずだけどなあ
Listも変なことしなくてもそのままSerialize出来ると思うけど
publicなゲッターセッターと引数なしのコンストラクタを持っていること
コレクションの場合はAdd(T item)を持っていること といった感じだったと思う 駄目なのはList<T>[]であってList<T>じゃないよ? >>337 >>338
おうふ…勘違いしてました,Listのシリアライズは問題無いのですね.
いまやったところ単体で普通にできました.
またUserごとシリアライズしようとしたときのエラーですが,そちらも解決しました.
行数が多すぎて怒られた&そんなに関係ないだろうと思って消していたのですが実際はXmlAttributeをつけていて
Userクラスはこうなっています
public class User {
[XmlAttribute("user_event_list")]
public List<Event> event_list;
[XmlAttribute("name")]
public string name;
public User() { }
}
これでエラーが出たのでEventListクラスを作ったのですが,どうやら問題はXmlAttributeにあったらしく,
event_listの直前のものを消したら問題無く動きました.
皆さんどうもありがとうございます,とても助かりました. >>334
解説ありがとうございます
表示されない理由はばっちり腑に落ちました
> 普通はRectangleはDataTemplateにして
> ItemsSourceにバインドするのはその構成要素だけ持つクラスにする
よければ、ここについてもう少し教えてください
いま、Rectangle型のmyShape をメンバにもつクラス c1 を設定し、これのコレクションをListboxのソースとしたとき
<DataTemplate x:Key="myTemplate">
<StackPanel>
<Rectangle Height="{Binding Path=myShape.Height}" Width="{Binding Path=myShape.Width}" Stroke="{Binding Path=myShape.Stroke}"/>
</StackPanel>
</DataTemplate>
とし、Listboxのテンプレートとして適用すれば、全ての項で長方形は同時に表示することができました
ここでmyShapeの型をRectangleと限定せず、flameworkElementなどにして、
c1のインスタンスにはEllipceやその他のShapeを自由に入れられるようにし、それらを表示することは可能でしょうか
int型配列a(要素数100)から等確率でランダムに10個の要素を選んで選んだ順に
配列b(要素数10)に代入するというプログラムを作りたいのですが、
自分が考えたのはひたすら100個のなかから1個ずつランダムで選んでいき、
前選んだ要素とかぶった場合はやり直し(棄却) という感じで作ったのですが、
選んでいくにつれて棄却する回数が多くなってしまい、時間がかかってしまいます。
この場合どのようなアルゴリズムで作るのが効率がいいのでしょうか? 配列からランダムに一個選ぶ
選んだのを末尾のと交換する
個数を一個減らしてランダムに選ぶ・・・ 配列じゃなくて動的配列(List)を使えば、使用した要素を捨てられる
どうしても配列でやりたいなら被ったら上か下を選ぶって処理を入れる いわゆる重複しない乱数と同じ考え方だからググれば腐るほどでてくる 配列内の要素をシャッフルして先頭から10要素取り出せば? >>345
それだとM個からN個を取り出すときO(M)になるから非効率 >>346
そうか。
要素数100程度みたいだからそんなんでいいかな、と勝手に思ったんだ。
そこまで考えてなかったよ。 >>340
データソース側にUIElementは使うもんじゃないってば
DataTemplateのTargetTypeでデータソースの型によって適用するDataTemplate切り替えたりする
<ListBox ItemsSource="{Binding ...}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type my:RectanglePattern}">
<Rectangle Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type my:EllipsePattern}">
<Ellipse Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>
あるいはデータソースをGeometry(を持ったクラス)にしちゃって
DataTemplateはImage/DrawingImage/GeometryDrawingでやるとか XML自体人が読み書きすることは重視してないからねー
構造的であることは人間にも利点があるが
人間にとってはせいぜい段組がしてあれば十分だ
こんなガチガチな仕様にしたのはコンピューターに合わせたからで
そのフォーマットの拡張系なんだから、よりコンピューターしか理解できないようになっていくのは当然だな
俺の好きなフレームワークにも
…and one more thing: Making humans edit XML is sadistic!
と書いてある デリゲートって、クロージャみたいに親のメソッドで扱われる変数を保持できるけど、
public void Hoge(object obj)
{
var act = new Action<obj>((o) => Fuga(o));
this.actionList.Add(act);
}
これみたいに、Actionをフィールドのリストに入れてずっと保持する場合だと、
objの参照元はずっとGCされないまま(メモリリーク)になるの?
これなら実行タイミングを好きにずらせるから便利だなーと思ったけど、
objの参照をずっと掴んでるなら微妙だな。 そう
便利だけどよく分からずに手を出すのはお薦めできない そりゃListに保持するってことはいつか使うって宣言も同然なんだから
いつの間にか黙って消えてたら困るだろ
それをリークというのはおかしい ラムダの中でobj使ってないから参照もされないでしょう
Action<obj>っていうのもコンパイルエラーじゃないの objを使いたい場合
var act = new Action(() => Fuga(obj));
引数をとりたい場合
var act = new Action<object>(o => Fuga(o));
引数をとりながらも無視してobjを使いたい場合
var act = new Action<object>(o => Fuga(obj)); パワポの左側のスライド一覧や、デスクトップ上でのアイコンの並び替えみたいに、
画像オブジェクトをD&Dによって移動・挿入可能なUIを作りたいと思っています。
ListViewに画像を表示させればかなり近いことが出来るのですが、
動画編集ソフトのタイムラインのように横方向に並べたいと思っています。
わりとよくあるUIだと思うのですが、既にコンポーネントとして利用できるようなものはありませんでしょうか?
ListViewのAutoArrange切って自前で配置すれば行けるような気もするけどどうだろ。 WPFなら既存のコンポーネントを使うまでもなく一瞬でできる ttp://msdn.microsoft.com/ja-jp/library/ms734785(v=vs.90)
上のページで説明されている、
「If ステートメントの true 分岐部で、結果の TextBox コントロールから Invoke メソッドを呼び出します。その際、WorkflowCompletedEventArgs 型の新しいジェネリック EventHandler、workflowRuntime.WorkflowCompleted を渡します。
イベント ハンドラへのパラメータとして、sender および e ローカル変数を渡します。」
という部分では実際にどのようなコードを書けば良いのかわかりません。
どなたか教えて頂けないでしょうか。よろしくお願いします。 >>363
会社で上からやれって言われまして。。
今までJavaだったもので、チュートリアルですら何言ってるのかわからない有様です。 それでなんでいきなりWFなんだw
Javaが使えるならC#の文法は使いながら慣れればいいから、本屋でVisual C#の入門書を買ってこい >>365
シェアポイントとWF使って業務系のアプリ作るんだそうです。
C#やってる人に聞いてみたのですが、>>362の内容分からないって言うんですよね。。 どういうことか知らんが英語版に切り替えたらその部分のコードが表示されたぞ >>367
ありがとうございます!!英語版に切り替えるというTipsを頂きました。 Control..::..ControlCollection Controls
の
..::..
ってどういう意味ですかね? 内部クラスだとMSDNではなぜかそうなってるがC#でそう書けるわけではない
内部クラスを区別したいときは Control+ControlCollection のように
ドットの代わりにプラスで区切る方が普通だと思う >>357 >>360
返事が遅れてすみません.
後者のListBoxを使ったやり方で結構いい感じに出来ました!
後はD&Dを実装してみることにします.
どうもありがとうございました! 昨日、MOBについて確認をしていて、以下の通りだと考えました
もし間違っている点があったら指摘していただけませんか?
@StreamWriter(Name, false, Encoding.xxx)、AEncoding.xxx.GetBytes()、BEncoding.xxx.GetString()
と共通の「Encoding.xxx」があったとして、UTF8などBOMが付く可能性があるEncodingの扱いは
A.「Encoding.xxx」が「UTF8Encoding」の場合、@BOMあり、ABOMなし、BBOMなし
B.「Encoding.xxx」が「UTF8Encoding(true)」の場合、@BOMあり、ABOMなし、BBOMなし
C.「Encoding.xxx」が「UTF8Encoding(false)」の場合、@BOMなし、ABOMなし、BBOMなし
となり、@はBOMの有無を選択できるが、A、Bは常にBOMが付与されない
てっきりEncoding.xxx.GetString()は選択できるものかと思っていたら、違ってました × 昨日、MOBについて確認をしていて、以下の通りだと考えました
○ 昨日、BOMについて確認をしていて、以下の通りだと考えました BOM自体UTF16用のコンテナフォーマットで、プレーンテキストだとは思えない。
だからファイル保存に用いるWriterだけがそれを意識するで違和感は無いけどね。
>てっきりEncoding.xxx.GetString()は〜〜
GetStringで返却されるものは文字列オブジェクトだよ。
しかもその内部形式はUTF16LEを元にしているはず。
ちなみにUTF8だと基本BOM不要。
WPFでListBoxを作るときに,ItemsPanelTemplateにStackPanelを指定することで横方向に要素を並べることはできました.
ですが今やっている方法だとXAMLで指定した数しか使えないため,例えばボタンを押すとListBoxが増えていくといったことができません.
この場合どのようにやれば良いのでしょうか?
ListBoxと横方向のStackPanelを作ることはできたのですが,コード上でどのようにこの2つを関連づければいいのかがどうしてもわからなくて… 動的に増えるものはコードで書くしかないんじゃないのかな?
>>377
はい,なので今はボタンを押したらコードが動いて横方向のListBoxを作る,といった事をやろうとしています.
ですがXAMLで横方向のListBoxを作る方法しか知らず,コードでどのように作ればいいのかがよく解りません…
XAMLだと
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Height="{Binding PhotoListBox.Height}" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
でいけるのですが… >>379
ありがとうございます,追加の方法はわかりました.
ただ,今 >>360 さんの http://ideone.com/zKXvF のように,画像を横方向に並べたいと思っています.
ですがListBoxは初期状態では縦方向に追加されていってしまうので,
コード上で作ったListBoxも横方向に並べることはできたりしませんでしょうか? >>380
できるよ
WPFの場合カスタムクラス作り放題でそういう細かいところの情報がよくわからないので
いれられなかっただけなんだけどね
テンプレート作っておけばインスタンス作って所定の親の配下に入れる前に適応すれば
同じような物が作れるよ >>381
なるほど…とりあえず不可能ではないのですね.
テンプレートについてよく解ってないので,その辺を中心に勉強してみます.
どうもありがとうございました. >>382
まずは>>380を参考にしてるのならテンプレートとかを分離して
リソース化することだね
最近触ってないのでうまくまとめて上げられないけど カスタムコントロールを作った方が簡単だと思うよ
>>360のルート要素と基底クラスをUserControlに変更するだけ >>383
ありがとうございます!
リソース化する,という方法があることを知って思い通りになりました!
<Window.Resources>
<ItemsPanelTemplate x:Key="HorizontalPanel">
<StackPanel Orientation="Horizontal" Height="{Binding PhotoListBox.Height}" />
</ItemsPanelTemplate>
</Window.Resources>
ListBox lb = new ListBox();
lb.ItemsPanel = (ItemsPanelTemplate)this.Resources["HorizontalPanel"];
>>384
ありがとうございます.
ですがすみません,カスタムコントロールとかは全く知らなかったので活かせませんでした…精進します. Rijndaelmanagedを使って暗号化を試みています
CipherMode列挙体がCBC他の時には問題なく暗号化が出来るのですが、CTSとOFBの時にはエラーになります
エラー「指定された cipher モードは、このアルゴリズムには有効ではありません。」
RijndaelManaged RM = new RijndaelManaged();
として、CTSはRM.Mode指定時に、OFBはRM.CreateEncryptor()生成時にエラーが発生します
モードにこだわりはないのでCBCを使えば良いのですが、調べてみてもRijndaelmanagedでCTS、OFB使えないという事例がなく、何かミスがあるのではないかと気になっています
もし思い当たることがあれば教えて下さい
RijndaelManaged RM = new RijndaelManaged();
//ブロックサイズ
RM.BlockSize = 128;
//キー最大長 ※事前に128、192、256から選択
RM.KeySize = Cipher_Rijndael_Size;
//CBCモード ※事前に各モードから選択
RM.Mode = Cipher_Rijndael_Mode;
//パディングモード
RM.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
//初期化ベクトルの設定と取得(ブロックサイズと同サイズ=128bit)
RM.GenerateIV();
byte[] bytesIV = RM.IV;
//処理済みパスワードをセット
RM.Key = Cipher_Rijndael_Key;
//暗号化オブジェクトの作成
ICryptoTransform encrypt = RM.CreateEncryptor(); WPFで好きなタイミングで画面全体のスクリーンショットを取って保存しようとしています.
やたたいことは普通のC#で書くとこんな感じなんですが,WPFだとScreenやCopyFromScreenが使えません.
string take_screenshot()
{
Rectangle rect = Screen.PrimaryScreen.Bounds;
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, CopyPixelOperation.SourceCopy);
}
DateTime time = DateTime.Now;
long now = time.ToFileTimeUtc();
string filename = now.ToString() + ".png";
string filepath = screenshot_folder + "\\" + filename;
bmp.Save(filepath, ImageFormat.Png);
return filename;
}
一応SendKeysで取る方法はあったのですが,キーイベントを使わない方法を探しています.
http://www.ipentec.com/document/document.aspx?page=csharp-wpf-screen-capture-sendkey-winform
このページのCopyFromScreenメソッドを用いる方法も,上のコードと同じ理由で動きません.
どなたか他の方法をご存じの方はいらっしゃいませんでしょうか? System.Windows.Forms.dllとSystem.Drawing.dllを参照すれば
WinFormのときのコードでいけるよ WPFのウィンドウ内のスクリーンショットを撮るのであればRenderTargetBitmapでできるけど
画面全体はWPF全然関係ないな
そもそもそんなもんWPF使って作る必要あるのかと >>388
動きました、ありがとうございます!
>>389
元々WPFで作っていて、そこに全体をキャプチャする機能をつけようとして詰まっていました。
私の説明がはしょりすぎでしたね、すみませんでした。 ウィンドウ上のボタンを押すと,
ウィンドウが消える→処理実行→ウィンドウが元に戻る
といった動作をしたいと思っています.
そこでこのようなコードを書いてみたのですが,それぞれ独立に動かすと上手くいきますが,
上記のように一連の流れにすると上手くいきません.
public void window_visible()
{
Visibility = System.Windows.Visibility.Visible;
WindowState = System.Windows.WindowState.Normal;
}
public void window_close()
{
//ウィンドウを非可視にする
Visibility = System.Windows.Visibility.Collapsed;
}
public void play()
{
window_close();
長い処理
window_visible();
}
おそらくは非表示にしても,こちらの処理中なのでウィンドウの再描画が行われないのが原因ではないかと思っているのですが,
再描画をするにはどのようにすれば良いのでしょうか?
window_close()の後にShow()を実行してみましたが最終的に非表示になってしまい,処理中に非表示にはなってくれませんでした… window_close();
Task task = Task.Factory.StartNew(長い処理);
task.ContinueWith(_task => this.Dispatcher.Invoke((Action)this.window_visible));
こんな感じ?
.NET 3.5までならBackgroundWorkerで >>392
はい,WPFでした.
>>393
動きました,ありがとうございます.
C#だと別スレッドで動かすのはこんなに簡単なんですね. Listboxの要素をウィンドウ外にD&Dすると削除するようなコードを書こうとしています.
D&D自体のコードはこちらを参考にしており,同じウィンドウ内の別のListboxへは問題無くD&Dできています.
http://main.tinyjoker.net/Tech/CSharp/WPF/ListBox%A4%CE%A5%A2%A5%A4%A5%C6%A5%E0%A4%F2%C8%BE%C6%A9%CC%C0%A5%B4%A1%BC%A5%B9%A5%C8%A4%C4%A4%AD%A5%C9%A5%E9%A5%C3%A5%B0%A5%A2%A5%F3%A5%C9%A5%C9%A5%ED%A5%C3%A5%D7%A4%C7%CA%C2%A4%D9%C2%D8%A4%A8%A4%EB.html
古いですが似たような事をしようとしていた人がいましたが
http://oshiete.goo.ne.jp/qa/2668253.html
ウィンドウ外でドロップしてもe.ActionがDropになりません.
Continueは出続けているのですが,ドロップしたときのイベントが取れていないようです.
ドロップしようとしてもマウスカーソルが道路標識の通行止めマークになるので,それが原因だと思うのですが…
どなたか解決方法をご存じの方はお教え下さい. マウスカーソルの移動をピクチャーボックス内に制限したいんですけど
Cursor.Clip = pictureBox1.Bounds;
としても、ピクチャーボックスのクライアント領域とは全然違う領域に
制限されてしまうんですけどどうしてですか?
ちなみに、Cursor.Clip = this.Bounds;
とすると、ちゃんとピクチャーボックスがのっているフォーム内に
きっちりと移動が制限されます。
Cursor.Clip = pictureBox1.ClientRectangle;
としてみても駄目でした。 >>396
無理ですか…
D&Dが開始されたけどドロップできる要素にドロップされずに終了した事を検知できればいけると思ったんですが,
やっぱり無理なんですね… 自己解決しました.
>>399 の観点で探したら
DragDrop.DoDragDropの戻り値がドロップ失敗した時にDragDropEffects.Noneとなるので,
それを判定して処理すれば良かったようです.
テキストファイルの中身をそのままstring型の変数に代入するにはどうやればいいですか
第二表示.txt
というテキストファイルのテキストをそのままstring型変数にいれたいんだけど。
DGVだけの画面があって、
DGVはセルの大きさに応じてサイズが変わるようにしてあるんですが、
肝心の画面サイズがデフォルトのままで困っています。
AutoSizeプロパティをtrueにするだけでは不十分なんでしょうか・・・ いえ、
例えばDGVのサイズが(100,50)の時にFormをロードしたらFormサイズは(100以上、50以上)となり、
(200,100)の時は(200以上、50以上)となるような設定をしたいと考えています。
FormのサイズプロパティにDGVのHeightとWidthを当てようとしたのですが、エラーとなってしまいました dgvはAnchor=Top|Left
Dock=None
FormはAutoSize=True
それだけ 以前似たようなカード欲しい人が居たので作ったのがあった
http://www.dotup.org/uploda/www.dotup.org3257846.zip.html
著作権フリーつーか絵カードの中味は用意してないので
欲しければカードを出力するソースもあるよ VS2003にトランプ画像なんて付いてたんだ。
サンプル用かな?知らなかった。
>>412
準備良すぎだろw >>412 >>414
亀ですがありがとうございます。
そして>>414のプログラムが何がなんだかわからないです・・・
実行したらフォームが表示されるだけでデスクトップに空のファイルができてたのでそこに画像入れればいいんですかね? しまった
LoadとShownはデザイナから先に追加しておかないと駄目なんだな
じゃあこれで。こっちはプロジェクト作って貼り付ければOK
http://ideone.com/Z2WDG ユーザーコントロールを作っているのですが、
TableLayoutPanelの GetRowHeightsとGetColumnWidths が
'System.Windows.Forms.TableLayoutPanel' に 'GetColumnWidth' の定義が含まれておらず、型 'System.Windows.Forms.TableLayoutPanel' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
というエラーになります。
Windows 7 professional
Visual Studio 2010 professional
.NET Framework Client Profile 4
でやってます。
using System.Windows.Forms;
も入ってます。
どうしたら、このメソッドが使えますか?
使えないなら使えないで、こんな糞みたいなメソッドじゃない、クールな方法はありませんか?
糞みたいなメソッド
じゃなくて
糞みたいなコード
書いてるんじゃないの? プロジェクトの形式でクラスライブラリを選んでて、アセンブリ追加していないとか はじめまして。
C#のTimer使ってピクチャーボックスを表示したり非表示にしたりってどう書いたらいいんでしょうか?
モグラ叩きみたいのにしたいんでできれば表示する場合はランダムにしたいです。
しょっぱなじゃねえか
dllの呼び出し規約がcdeclなんじゃないの こういう似たような条件同士のif文があったとして
.if(strChinko == "黒" || strChinko == "白"){
. MessageBox.Show("Good!");
.}
こういう風に省略して書く方法がC#にはありますか?
.if(strChinko == "黒" "白"){
. MessageBox.Show("Good!");
.} ない
if (new[] { "黒", "白"}.Contains(strChinko))
というのもあるが、数個くらいなら普通に||で並べろ bool isChinko() {
if (strChinko == "黒") return true;
if (strChinko == "白") return true;
return false;
}
if(isChinko()){
MessageBox.Show("Good!");
}
が正解 >>432
その
if (strChinko == "黒") return true;
if (strChinko == "白") return true;
のところを
こういう風に省略して書く方法がC#にはありますか?
if (strChinko == "黒" "白") return true; 無いから代わりの方法だしてるのに理解してなくてワロタ >>432-437
ありがとうございます、普通に記述します(´・ω・`) machigaemasita
>>430-437
ありがとうございます、普通に記述します(´・ω・`) なあ、みんな仕事以外でどんなのプログラミングしているの?
大抵のものは既に存在するし、作ってみようってお題がないんだが・・・ 大抵の物はあるから模倣するのが勉強になるんじゃないか
その中でいろいろ学べて新しく吸収したことでもっと違う物を作ってみるかとなるかもしれない なるほど、手始めに既存の小物ツールをオシャレGUIにしてみるかな やっぱり3Dのゲームでしょ
普通のITドカタならやらないから プラットフォーム初、を狙え
Win8向けに、利用者の多いWebサービスの非公式クライアントを作ってストアに一番乗りしろ
Win8がコケようが一番乗りできれば一定数は確実に売れる 助けてください、エスパー向けの質問で失礼しますが助けてください
ファイルを読み込んでbyte配列に変換して編集して出力したいんですが、
編集していない個所まで書き換わってしまいます。
エンコードミスでしょうか?どうすれば元の文字コードで出力できるのでしょうか?
それともStreamReaderじゃあ元のデータを維持したまま読み込む子尾はできないのでしょうか?
もうわけがわからんです
■ソース
ttp://ideone.com/2jeTL
■Projectファイル
ttp://www.rupan.net/uploader/download/1347515489.zip Project間違えました
■Projectファイル
ttp://www.rupan.net/uploader/download/1347516224.zip >byte[] data = Encoding.GetEncoding("Shift_JIS").GetBytes(text);
これが原因じゃないの?
> StreamReader ss = new StreamReader(path, Encoding.GetEncoding("Shift_JIS"));
> string text = ss.ReadToEnd();
> ss.Close();
この段階ではShift-JISから.netの内部で使ってるUSC-2に変換されてる
それをまたshift-JISのデータが入ってるように指定してbyte配列に変換して
書き換えて、shift-JISで保存すれば壊れても当たり前のような気も
つーかtextboxでも貼り付けて細かい中味を見てみろよ 途中で文字として扱う必要がないならStreamReader/StreamWriter使う意味なくね?
// っていうと「いや実際には……」って返ってきそうな薬罐 >>448-450
ありがとうございますありがとうございます( _ _)
これで前に進めます 無かったような
こんな感じで作れる・・・けど良く考えるとwebページみたいに開閉するたびに
ページコンテンツが移動していいの?
その辺がよくわからないのでこのパターンにしてみた
http://ideone.com/RgKVD >>453
コードまでありがとう
SplitContainer良さそうだね
今回は開閉に合わせて他のコントロール含めForm全体の高さも
変えようと思ってるんで、これを参考に作ってみまつ 遊び終わったゲームは秋葉原のフレンズで売ろう!
http://gameshop.ocnk.net/
・Webに掲載された買取価格は釣り(どんなに美品でも半額が最高)
・内訳出さない(ソフトに小さい値札を貼るだけ、査定終わったら剥がされる 簡単に証拠は残さないYO!)
・当然、引換証も出さない
その代わりメモ用紙に「○○円 受け取りました 住所+氏名」と書かせる なにそれ?マジで意味わからん・・
・売買成立してないのに身分証明を要求、査定前にコピーして口封じを図る
飲み会のネタが確実に一つ増えますよ(^^
> 201 :なまえをいれてください:2008/09/26(金) 04:34:08 ID:eWPbQdE2
> アキバ行って査定
> PS 学校であった怖い話S(帯無、美品)
>
> web買取価格表
> フレンズ 9000円
>
> フレンズ
> 査定500円
> 俺「webと随分違いますね」
> アホ面店員「美品での買取価格なので」
> じゃ、”ソフトのみ” ”完品” ”美品+α” に 分ける必要あんの?
> 俺の美品が完品にすらならんの?
> 2ちゃんで半額とか当たり前とか聞いてまさかと思ったが、半額どころじゃなかったよ
> それでも客が売りにくる不思議はあるがな。断れない気の弱い客狙いなのかね
> どこをどうすると500円という金額が出てくるんですかね?ヤクザならぶん殴られてるわ
> 他にも10本程度持ってったが全部webの1割程度かそれ以下
> さすがにあきれて言葉も返せさなかったわ、よく訴えられないねこの店 winAPIのULONG_PTRって型をC#で定義するときはIntPtrでいいのかな
名前的にオーバーフローしそうな気がするんだけど問題ない?
UIntPtrってのもあるけどこっちのがいいのかな 不安ならtypedefしているところを確認したまえ
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx
#if defined(_WIN64)
typedef unsigned __int64 ULONG_PTR;
#else
typedef unsigned long ULONG_PTR;
#endif signedかunsignedかということなら
UIntPtrは使わないよな windows7 64bit VS2010
UIntPtr up = new UIntPtr();
up = (UIntPtr)uint.MaxValue; // 通る
up = (UIntPtr)ulong.MaxValue; // x64向けビルドは通る
IntPtr p = new IntPtr();
p = (IntPtr)uint.MaxValue; // x64向けビルドは通る
//p = (IntPtr)ulong.MaxValue; // コンパイルエラー
>>459見るとULONG_PTRは32/64bit符号なし整数だから
やっぱり値によってはオーバーフローするように思えるんだけど…
何か勘違いしてたら指摘お願いします >>463
UIntPtrもIntPtrも実体はアドレスが入る入れ物だからx86かx64でのみ長さが変わる
X86ならIntPtrもUIntptrも64bitだが、x86なら両方とも32bit
詳しく調べないといけないけど、落ちる理由は全然別だと思うよ ULONG_PTR Method();
というCのコードがあったとして
C#でP/Invokeするときに
[DllImport...]
extern IntPtr Method();
と宣言しても
[DllImport...]
extern UIntPtr Method();
と宣言してもどっちでも使えるよってこと
>>463は.netの世界でのエラーの話だろ
int i = (int)uint.MaxValuel;
がコンパイルエラー出すのと同じ
Cで書かれたMethod()が0xFFFFFFFFFFFFFFFFを返してきた場合を考えてみても
ビット列としては同一で、IntPtrなら-1になるだけの話
UIntPtrを使う場面ないっしょというのは、intとuintを混在させて使うメリットないというのと同じ意味っす >>465
>Cで書かれたMethod()が0xFFFFFFFFFFFFFFFFを返してきた場合を考えてみても
>ビット列としては同一で、IntPtrなら-1になるだけの話
いやだから、返ってくるのはポインターだからアドレス値。IntptrでもUIntptrでもUnsignedだよ
違いはそのアドレスが指し示す場所にあるデータがsignedかunsignedって違いだけ IntPtrに-1は入るけど、UIntPtrには入らないのはなんか関係あんの? IntPtrもUIntPtrターゲットが同じならbit幅は同じ
同じbit幅の中で表現できる情報は限られててどう表現するか
UなしのIntPtrは補数表現込み
UありのIntPtrは補数表現なし いや、なぜハッキリ「符号に意味がないんだよ」ってことを言わないのかなと思って >>466
typedef unsigned __int64 ULONG_PTR;
typedef unsigned long ULONG_PTR;
何言ってるんだかちょっとわからないです。 絶対アドレスだけを扱うなら符号なしでもいいけど
相対アドレスも考慮するとあるアドレスからマイナスの番地は必要だよ >>473
ポインタ同士の加算はできないから不要だよ 相対アドレスはオフセットであってマイナスの番地とは意味が違うっす 必要ないけどIntがあってUIntが無いのはなんかキモイから追加した
みたいなことがMSDNには書いてあるね >>476
まあその程度だよね
なんでわざわざもめてるのかよくわからんかった IntPtr p = (IntPtr)0x7FFFFFFF;
p = IntPtr.Add(ppp, 1);
pはいくらでしょうか そこはコピペに失敗したのでppp->pと読み替えてください >>478
それは実装によるんじゃないの?
一番下層のx86の仕組に依存するのかその上の方で判断してるのかしらんけど なんとなくわかってきた
.netで呼び出す過程では、変数のサイズさえあってれば
(符号無視して)そのままのビット列で返ってくることでいいのか うん
オーバーフローするかもしれないが別にそんなことに意味はない 例えば、
enum animal { cat, dog, mouse };
...
Console.WriteLine(animal.cat);
で、 cat が出力されますが、これって意味があるのでしょうか?
animal.cat としている段階でcatの存在は自覚しているはずで
cat を出力したければ、Console.WriteLine("cat"); などとすればよいと思うのですが。。。
もしくは、animal.cat として cat を求めなければならない
理由や状況などがあれば教えていただきたいのです。 禅問答か何か?
どうあるべきが自分の中では正解だと思ってるの? //Console.WriteLine(animal.cat);
こうすりゃいい >>484
例えばだけど、コンボボックスでanimal型を選択できるようにしておいて
ユーザーが何を選択したかによって動作を変える場合とか
animal someAnimal = animal.cat; // ここにユーザーが選択した値が入ってくるとして
Console.WriteLine("{0}が選択されました", someAnimal);
if (someAnimal == animal.cat) {
...
あとよくあるのはメソッドの引数でオプション指定するような使い方
例えばFile.Open関数の第二引数は列挙体になってる
File.Open(string, FileMode);
それから列挙体の名前は一般的に大文字でスタートさせるのが慣習なんで注意しましょう 例えば、
enum animal { cat, dog, mouse };
...
Console.WriteLine(animal.cat);
で、 cat が出力されますが、これって意味があるのでしょうか?
animal.cat としている段階でcatの存在は自覚しているはずで
cat を出力したければ、Console.WriteLine("cat"); などとすればよいと思うのですが。。。
もしくは、animal.cat として cat を求めなければならない
理由や状況などがあれば教えていただきたいのです。 すいません誤爆しました。
ありがとうございました。 実行ファイルをリソースに埋め込むことは可能でしょうか? 実行ファイルをリソースに埋め込むことは可能でしょうか? リソースへのストリーム開いてbyte配列に読み込んでAssembly.Load(byte[]) ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
参照の追加でuser32.dllなどのwinapiライブラリを追加できないでしょうか こういうのもある
WindowsR API Code Pack for MicrosoftR .NET Framework
http://archive.msdn.microsoft.com/WindowsAPICodePack http://ideone.com/Xqxm3
ボタン1を押すとエラーになりますが、ボタン2はエラーになりません
初心者の直感ではボタン1のAddControl行とWriteLine行で実行される引数は同じものなので
問題なく動きそうな気がしますが、何が問題なのでしょうか? Select呼び出した時点ではまだその中に記述したデリゲートは実行されていない
foreachした時点で初めて実行される
もちろん二回foreachしたらそれぞれ別々に実行される >>498
Controlのハッシュコード見て納得しました。両者の引数の中身は別々のものだったんですね
ありがとうございます フォント変えるたびにサイズだのMarginだのUIがグダグダになるんだけどフォントだけ変えられないの? AutoScaleModeをFontじゃくすればおk AutoHotKey、C、C++、C#、1から覚えるならどれがよいでしょうか? >>504
何がしたいのかによる
手っ取り早くGUIアプリ作りたいならC# C、C++を使わなければならない場面って
どんな時が想定されるのでしょうか? C#が気に入らないときって
どんなときなのでしょうか? 所詮は道具なのに自分の存在価値がC++を信望する
ことにあるように思い込んでるオールドグラマーのプライドが傷ついたとき
所詮は道具 >>506
速度が必要なときとかドライバ開発するときとか C++の名前空間がついた関数をC#から呼ぶ方法ってありますか?
C++
namespace std
{
dllexport void hello{}
};
C#
class Test{
[DllImport("Hello.dll")]
public static extern void std::hello();
} dumpbin /exportsでエクスポートされてる名前調べて
DllImportのEntryPointに指定する
@とか色々ついてるの全部な みなさんマイクロソフトのVC#2010お使いですか?
時期バージョンではメトロアプリケーションしか作れないって本当ですか? とっくに2012出てるし普通のアプリケーションも作れるfor Desktopもあります
しかしVistaでは動きませんwwwwwwwww 2012あったんかVistaの俺オワタwwwwwwwww VisualStudio 2010で
VisualStudioのプロパティ設定画面のような入力を実現したいのですが
1. そーゆーフォームってありますか?
2. サンプルが載っているようなサイトがあったら教えてください。
プロパティ 設定値
位置 5 , 80
サイズ 20 , 50
色 ■ ←赤く表示されてる
背景色 □ ←白く表示されてる
みたいなやつです。 Win7でしか動かない機能があるからVista駄目って名目だけどホンマかいな >>524
PropertyGridコントロールっていうのですね。
ありがとうございます。助かりました。 ILSpy使ってみたのですが
base..ctor();
こんなのがでてきます
なんですか、これは? 基底クラスのコンストラクタ呼び出し
.ctor:コンストラクタ
.cctor:静的コンストラクタ
.dtor:ファイナライザ ありがとうございます
なんでそんなものがでてくるのかわかりませんが、コンパイル通らないので削っておきました C#の絵本買って読んでみてるけど
まったく頭に入らない。プログラムは難しいね ILSpy使ってる時点でコンパイルは済んでいるはずだが…… ILSpy使ったことない人たち乙
使ってみればわかるよ 一応言っておくけど
クラッキングに関する話題はローカルルールで禁止のはずだから
その辺弁えてね
違うなら別に良いけど 動作する以上、逆コンパイル自体の防止なんてネイティブでも不可能だけど
読みづらくして逆コンパイルした奴にやる気を無くさせることはできる
お前の作ったカスをわざわざ手間かけて解読しようなんて酔狂はいないから極めて有効 スマホ向けクロスプラットフォーム開発では圧倒的トップシェアなんだっけ iOSがObjectiv-C、AndroidがJavaで、その間をうまいことMonoが持って行ったわけか。 単独じゃ無理だな
一応フリーなものは存在する
でもC#やJavaみたいなメタデータに依存しまくった言語で
適切に難読化を行うのはそれなりに面倒だ
多分このスレで質問してるレベルじゃ起動すらしなくなるだろう まずは解読したくなるようなアプリを作れるかどうかを心配したほうがいいよ だいたい、そこまで読まれたくないならクライアントにバイナリ置くこと自体が間違いだよ
デスクトップアプリなんてオワコンは捨ててWebアプリにすれば解読なんてしようがない まあそんなに読まれたくないものならC++で作ればいいだけだしなー >C++expはコード補完してくれますか?
ある程度は
それよりはC99とかC++11への準拠度が低すぎてイライラする もう一言いっておきたい
http://opcdiary.net/?p=6539
C++11が忙しいからC99は注力しないよ見たいな事を抜かしておいて
VC++2012のあのザマは何なのだ
舐めとんのか これでもC++のIDEとしては世界最高峰という現実 WinAPIのようなC向けAPIはC#からでも呼び出しやすいから大差ない
C#の場合は.NETによって格段に便利な形でカバーされてるところも
C++ではWinAPIに頼らざるをえないことが多々あるから、総合的にみるとC#に比べて糞面倒 まあDllImportに頼らないとkeybd_eventもSendInputも使えないので
マクロ書きたい初心者には不評なんですが Func<int, int, int> foo = (x, y) => { return x + y; };
例えば上をコールバック関数にしたいと思ったらどうすればよいでしょうか?
extern static int CallBack( ???, int x, int y );
???は定義可能でしょうか? delegate int HogeCallback(int x, int y);
使うしかないね >>561
普通に extern static int CallBack(Func<int, int, int> callback, int x, int y); でいけるよ
ただしDllImportならコールバックが来る可能性がある間は渡したデリゲートオブジェクトが
絶対にGCされないようにこっち側で管理する必要がある あれ、ついに.NET4.5でジェネリックのマーシャリングがサポートされるようになったの? .NET4.5入ってるのに
古い.NETプログラムが起動しません バージョンアップごとに必要ない命令とか消えたりマイナーチェンジしたりする事もあるし
まぁ必要ないって、メーカーが勝手に決めた感じだろうけど そういやWMPモジュール使ったソフトで、WMPのバージョン上がったら挙動も変わったよ .NET3.5以前をターゲットにしたアプリは.NET4以降ではそのまま動かないよ
マニフェストファイルをいじる必要がある。
特になんか技術的な問題があるわけじゃなく意図的な制限で、
必ずしも100%の互換性は保証できないからテストしろボケというMSからのメッセージ。
Oracleとかほかの会社なら絶対にそんなことしないレベルの互換性はあるけどそこはMSだからな。 スルーされたのでここで教えてください
Sqlite+Entityでデータベース作ったんだけど
これをDataGridViewに表示するにはどうするの?
SQLiteのテーブルをDataGridViewにバインドしても
表示が更新されない
アプリ再起動したらちゃんと表示される
変更を即座にViewに反映したいんだけどどうすればいいですか? 「SQLite DataGridView bind」でヤフーでググレカス。
ttp://ap.atmarkit.co.jp/bbs/core/fdotnet/16939 そこも見ましたがDataSetをDataSourceにバインドしているんじゃなくて
DataTableを直接バインドしているんです
なのに反映されません
具体的には、SQLiteのテーブルをDataSetにD&D
DataGridViewのプロパティでD&DしたテーブルをDataSourceに設定
SQLite関係のコードは何も書いてません、Entityを操作しているだけです
Entityでデータベースを変更した場合、ビューに表示するまでのどこかで更新されていないと思うんですが・・・ 一生懸命C#勉強してプログラム作る
↓
.NETバージョンアップ
↓
全部パー
こういう認識でよろしいですか? ビルドしたバージョンと同じバージョンの.NETが入ってれば動く
また既存の技術が使えなくなるわけじゃないので習得したスキルも無駄にはならない .NET4で作ったものは
4.5とか5になったらパーですか? スーテンウーとかウーの次はリュウでその次チーでその次がパーだよ 作れるけど全く何の意味もないぞ
Formのウィンドウハンドル普通に取れるし javaで作られたものって1枚の画像として認識されるんだな WPFもWin8ストアアプリもそうだよ
Swingはクロスプラットフォーム(笑)のためにそういう形になってるが、
最近はハードウェア描画をフル活用したいけどOSが全然追い付いてないってことで
ウィンドウ内部はOSに管理させずに自前でやる設計が多くなってる >>581
まあ結局は先に一枚の画像に仕上げてVRAMへ転送するかVRAMに直接描くかだし
windowsVista以降はウインドウも3DCGで言えばテクスチャ状態だからな .NET4で作ったプログラムは4.5で動きますかね? 環境があるならやってみなさい。
Hello worldで。 .NET4から4.5はよっぽど変なことしてなければ100%動くはずだよ
4を置き換えてしまう更新なので互換性は2系(2.0,3.0,3.5)→4.0のときより厳格 ここのところ互換性をすげえ気にしてる奴がいるようだが
大丈夫だよ
お前は何一つ作り上げることはできないさ プログラマの立場で互換性に気を払わない奴こそ
何一つ作り上げることはできない 気にしないのも不味いけど、気にしすぎるのもよくない。
いいから動かしてみろよ、って思う。 最近の九官鳥はキーボード扱えるようになったらしいな
すごいね むしろ.NETほど後方互換性が確保されたプラットフォームって他にあるか? 何だかんだ理由つけてやりたくないんだろ
なぜ無理してるのかが分からんよ やりたいとかやりたくないとかじゃなくて
C#が将来有で使える言語かどうかが知りたいだけなんです。
それ以外はいたって謙虚なものです。 本当に互換性だけでいいのなら、2度とバージョンアップがされなくなれば互換性は変わらない
しかし、そういうトンチめいた話がしたいわけではないだろう ちょっと待ってよ、君らがいくつか知らないけど
俺は.NETほど下位互換性のものは見たことがない
バージョンアップで互換性がなくなるのは数知れど見たけど
こんなに速いスパンでプログラムの起動すらできない
プログラムは見たことがない。
バージョンアップするにしても、もう少しその過程における
流れる時間というものがあるだろう もう有望も有望
超将来性ありまくり
って言ったら信用するわけ?
もし外れたら責任とらされるの?
他人のだしに使われるなんてたまんねーなー お前がそう思うならそれでいいじゃん
使わなければいい
結論は明快だろ? 何か齟齬があると思ってたけど理解できたわ
.NET4で.NET2向けにコンパイルしたプログラムが動かないのはおかしいって言ってんね 大体は対象プラットフォーム変えてビルドし直すだけで動くよ >>606
「実行環境が 4 で、アプリが 2 だと動かないことがよくある」ってこと? 対象プラットホームが分からない場合どうするんですか
かつてVisualBasicでさえ、当該ランタイムを一緒に配布すれば
それほどユーザーに負担をかけずにプログラムを実行できたのに。
お宅の環境で実行できなければ、WindowsUpdateを手当たり次第試してくださいなんて
どの口が言えるんだよ 手当たり次第じゃなくて、.NetFrameworkの4.0をとか2.0をインストールしてください。
とは言えるんじゃないだろうか。
むしろ最初に「どのような環境で実行できるようにいたしましょうか」と確認しておくといいんじゃないか。 C#の勉強をはじめて一週間。
まだメッセージボックス出して喜んでるレベルですけど。
javaと似てるなと思いました。 ここはむしろ delphi こそ java のもとだと強く主張したい >>621
LL(1) 文法で解析可能、ワンパスでコンパイル可能なためには必要だったのでは? MemoryStremに入ってるデータの最後の1バイトを
取り出すにはどうすればいいでしょうか? ウインドウずプログラムミングは.NETに集約されると聞きました。 今更WPF触ってみたが意味不明すぎわろえない…
これ流行るの? 欠陥だらけで仕上げるの苦労するよ
フォームより新しいだけあって強力なクラスあるからフォームで流用してる ポトペタで張ってコードビハインドでも作れると何度言えばw それでもできなくはないけど
それだとGUIに依存したコードになってしまって
保守性が低くなる
ロジックとGUIは分離すべき
MVVMがWPFをフルに活かせる MVVMなんて全然流行ってないけど、ほんとに使ってる人いんの?
WPFで仕方なしに使う以外で 源流にあたるMVCは30年以上前にSmalltalkで考案された。
MVCだとプレゼンテーションロジックの置き場所に困る事になって、解決策としてPMが生まれた。
MVVMはPMの亜種。PMの考えをWPFに持ち込んで、さらに双方向データバインドでビューとプレゼンテーションを分離したもの
そういうわけで、他の言語・環境でも別の名前の似たようなやつは使われまくってるけどMVVMとは呼ばれない。 ようやくサンプルが読めるレベルになってきた
どうも一番最初に読んだ解説サイトが自分にあってなかったっぽい
個人的にはMVVMによる保守性云々はどうでもいいがコントロールの自由度はかなり魅力的 そこだな、昔はGUIを使ったwindowsアプリを開発したこともないようなやつがデザインしてきた画面設計の為に
存在しないコントロールを0から作らされたり色々しんどかったのが、WPFで解消された
何だこの自由度はって感じ
しかし既存のコントロールのバグも受け継いでるので、datagridviewなんかはいまだに地雷ってのは同じだけど まったくだな
素人が好き勝手デザインしたもんに書かされるほうはたまんねーよな WebBrowserを使ってC#で自動でデータ入力送信させようとしているのですが、
<input id="btn_XXXX" onclick="postSetData();" value="変更" type="button" />
というのがあってこれを
HtmlElement he = wb.Document.GetElementById("btn_XXXX");
he.InvokeMember("onclick");
とするとサーバーの方のデータは書き換わってるのですが、画面が変化してくれません
どうすればいいですか? lbl_status.Text = "AAA\r\nBBB";
とプログラムから設定しているのにフォームを開くと
設定した改行コードが文字列として表示されてしまいます。
何がまずいのでしょうか?
AAA\r\nBBB >>644
ラベルじゃなくてテキストボックス使ってくれ
その他マルチラインとかリードオンリーのプロバティーもセットしてね >>645
ラベル上で改行をしたいんです。
そして、付け加えるとプロパティからじゃなくて、プログラムからです。 >>646
ラベルに複数行を表示する機能はないから、テキストボックスのプロバティーを弄って複数行表示ラベルのように振る舞う設定にするのが簡単ですよ そんなことをするくらいならDrawStringするっしょ >>643
ダメでした
でも参考になりました
他にもクリック等させてて、一連の操作を一気にしていたのが問題のようでしたので
それぞれの処理の間にSleep入れることでとりあえず動くようになりました
ありがとうございました >>647 >>648
ラベルに改行機能はなかったのね。残念! あれ?
System.Windows.Forms.Labelのことなら改行に対応してるっしょ? ファイルのダウンロードをしたくてDownloadFileメソッドを使っているんですが、
参照設定などできているはずなのに使用できません。
どなたかお助けください。 'System.Net.WebClient' に 'DownloadFile' の定義が含まれておらず、
型 'System.Net.WebClient' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。
参照は調べて追加したんですがこのエラーが出ます。
ほんとに素人なので聞き方変なのは申し訳ないです クライアントプロファイルは関係ないが
Store向けアプリか何か? Store向けアプリではないです。
webdeveloper 2010 express でやっていて、
対象のフレームワークって変更できないんでしょうか 他の情報を考えてみようと思います。
ご回答ありがとうございました。 FindWindowで求めたハンドルからそのWindowを開いたプロセスを求める方法を教えて下さい TextBlock.Textの文字列の高さの最大値を知る方法を教えてくれ。
「Aaaaa」って値が設定されていた時のAの高さみたいなものを。
フォントサイズではなく。
状況としてはゲームのタイトル画面を作ってるんだが、
カーソルの画像の隣に文字列を書く際に、描画位置(Y座標)を文字列の下端にしたいわけ。 XAML/C#でWindows8のストアアプリの開発をしています。
WebViewのある画面に遷移した時、フォーカスをWebViewにさせる方法がわからないので教えて下さい。
現状だと一度ウェブページをクリックしないとスクロールをすることができずとても不便です。 >>664です。解決しました。
LoadStateメソッドに、
this.Loaded += delegate { this.Focus(FocusState.Programmatic); };
を入れることでフォーカスさせることができました。
今度はキー入力を受け付けたいけどEnterしか入力を認識してくれないです(泣) 特定のエディタの入力を監視して、たとえばあるキーが押されたら別のキーを押した事にするっていうのはどうやるのでしょうか?
たとえばTerapadの編集画面にでaキーを押したらuが入力されるようにしたいんですが
キーカスタマイズソフト?っ低宇野を作りたいんです .NETでグローバルフックは出来ない
正確に言えばやれば出来るけど、Hook対象が.NETアプリの場合問題があるからやらない方がいい >>668はきっと現実でいじめられている人なんだね
いいんだよ、僕は反論しないから
生暖かい目で見てる 生暖かい目でいつまでも目的を達成できない自分を省みればいい LLでフックしてkeybd_eventでいいんじゃね? ┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ 俺もそろそろインタプリタのひとつやふたつ作ってみるかな
プログラミングを極めるにはインタプリタとOSを作らないと
だめらしいし。
“【史上最悪の放送事故】” ウジテレビがまたやらかした!
21日放送の某番組で、無修正の“アレ”をモザイクかけずに放送!その時のキャプチャが話題に!”
http://twi.im/picture2013_0323_image_01_jpg (※キャプチャ)
↑
(゚A゚;)ゴクリ
C#を使って特定ウィンドウダイアログ上の「×」ボタンをクリック
しようと思って書きコードを書いているのですが
うまく起動ダイアログの「×(閉じる)」ボタンをクリックする事が出来ません。
どうすればWindows API を使用して閉じる事が出来ますか?
IntPtr h = FindWindow(null, "自動再生");
IntPtr h6 = FindWindowEx(h, IntPtr.Zero, "Button", "×"); // ← ???
PostMessage(h6, WM_LBUTTONDOWN, 0, 0);
PostMessage(h6, WM_LBUTTONUP, 0, 0); ひんと WM_SYSCOMMAND SC_CLOSE SendMessage 動的に作成したコントロールに引数を追加する方法を探しています。
int i = 0;
while(true)
{
panel[i] = new Panel();
label[i] = new Label();
panel[i].Controls.Add(label[i]);
panel[i] += new EventHandler(panel_Click);
label[i] += new EventHandler(panel_Click);
this.Controls.Add(label[i]);
this.Controls.Add(panel[i]);
i++;
}
panel_Clickにiを渡したいのですが、方法がわかりません。
どうすれば出来ますか? panel[i].Tag = i;
とかやっておけ
panel_Click側で
int i = (int)((Control)sender).Tag;
あるいはList<Panel>とか作っておいてAddしてハンドラでIndexOfするとか ネイティブのDLLを含むカスタムコントロールを作って、
ツールボックスの所からフォームにドラッグ&ドロップすると
DLL 'csfml-graphics-2' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E)
って出てDLLがロードできないのですが、このDLLはプロジェクトのどこのフォルダーに置けばいいのでしょうか。
このDLLはLoadイベントで使用されて普通は bin/Debug の下に置いておけばロードしてくれます プログラム板の方で聞いた方がいいんじゃない?
その質問はクローズしてさ DomainUpDownはどんな場面で使うんだよ! そういや使ったことないわ
むしろUpDownの単品の方が使うのに コンソールアプリで入力を受付てfor分で処理する記述をしてるんですが
int i = int.Parse(Console.ReadLine());
int n = int.Parse(Console.ReadLine());
for ( i ; i <= n; i++)
{
変数nは処理されるのですがi側は
エラー 1 割り当て、呼び出し、インクリメント、デクリメント、待機、および新しいオブジェクトの式のみがステートメントとして使用できます。
と怒られてビルド出来ないのですがどういうことなのでしょうか。。 変数とかプロパティとかをただポンとおいたらエラーになる
forで初期化部使わないなら
for (; i <= ...
みたいに書く >>689
ありがとうございます!!
でも可読性はものごっつい悪そうですね。。。
まだまだ試行錯誤してみます!! using System;
namespace TESTEST
{
class Program
{
static void Main(string[] args)
{
int s = int.Parse(Console.ReadLine());
int e = int.Parse(Console.ReadLine());
for (s; s <= e; s++)
{
Console.WriteLine(s);
}
}
}
}
先程質問した>>688ですが>>689の意見に合わせて実装したのですがうまく行きませんでした。。。
私がやりたいのは外から入力を受け付けてfor文のloopを回したいのですが
他にどのようなミスがあるか教えて頂けませんでしょうか
mainメソッド内で定義されたlocal変数は同一メソッド内のfor文で使用できますよね・・・? > >>689の意見に合わせて実装したのですが
してねぇじゃんよ >>692
エラーになったので今は元に戻ってます。。。 for (; s <= e; s++)
こうしろっつってんだろ なぜ
こう書いたらこういうエラーが出ました どうしたらいいですか
ではなく
こう書いたらエラーが出たので戻しました どうしたらいいですか
なのか 多くの皆様ありがとうございました、無事に動きました!
自分の技術も聞き方もまだまだ未熟なのに痛感しております。
次回はもっと正しく質問できるように努力します!ありがとうございました。 ’A’ なんかかわいい
for( ; ; ) なんかかなしい ム板がID出るようになって、このスレの存在意義がほぼなくなったな 誰か都内でc#の家庭教師してくれませんか?
昨日から勉強を始めたんですが、理解できないところが多いです ギリ構造体あたりまで分かるけど、メモリ管理とかちんぷんかんぷんな俺でよければ L2TP/IPSecの接続状態を取得したいのですが
どうしたらいいでしょうか?
TCPのコネクションはIPHelperで取れるのですが
UDPではどうやればとれるのか・・・ 質問をよろしいでしょうか。
親クラスの静的メソッドでは派生クラスのTypeを取得することは不可能なのでしょうか。 すみません。
StringBuilderに追加するときに特定の文字列だけ色変更ってできないんでしょうか? >>708
君はまずそれが何かを調べなさい。
StringBuilderはGUIを前提としたクラスじゃないよ C#で 別のプロセス(コマンドライン)を起動させたいと考えています。
hogehoge.exe
実行後、パスワードを聞かれますが、これをC#で入力させるにはどうしたら良いですか?
標準出力に書き込んでも失敗します? いったいなんのパスワードなんだよハゲ
そんなのそのアプリケーションの仕様に依存するに決まってるだろ
いまどき標準入出力て…… エラーで、「; が必要です。」
って分かってたら自動で「;」を付けてくれや・・・ 勝手に付けたら付けたで意図しない文区切りとなり、バグ取りで発狂するんだろ WebBrowserでマウスホイールのスクロールが効かないんですけど、なんでです!?
Win7、IE11です。 自己解決
IMessageFilterとApplication.AddMessageFilter使ってたから効かなかったみたいでしたような感じでした 人いますか?質問です
同じContextMenu(コピー、貼り付け、切り取り、など)を
Form間で使いまわしたいのですが、どうしたら良いでしょうか?
やっぱりFormごとにContextMenuを作成しないとダメなんでしょうか? まず、インスタンスを各フォームごとで共有するとなると、
それをどこでインスタンス化するかとか、どこで廃棄するかなど問題が複雑になることが多いね。
各フォームのスレッドが異なっていたりするともっと複雑化するし
おすすめは定形的なサブアイテムを含むContextMenuStrip(だよね?)を実体化してくれる
ファクトリークラスを作ること。
作成要求でまったく新規に作るかキャッシュを返すかは仕様次第で決める感じで。
それをform.ContextMenuStrip = ContextMenuFactory.Create();
みたいな感じで設定するといいんじゃないかな クリスマス.Dispose();
クリスマス = null; BASIC育ちの週末プルグラマーです
この意味がわかりません
---
var p = new { x = 10, y = 20, z = 30 };
---
変数Pの中に、XとYとZが入っていて
p.xで取り出せる、という解釈でいいんでしょうか。
ご教示ください。 下記のサイトにあるObjectViewer-20080530.zipというC#のソースについて質問です。
ttp://wikki.sakura.ne.jp/gir−lab/?Object%20Viewer
VisualStudio2015で実行しようとすると、次の部分でエラーが出て実行できません。
場所)foreach (var ko in kobj.Objects)
内容)型 'System.NullReferenceException' のハンドルされていない例外が ObjectViewer.exe で発生しました
追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。
動くようにするにはどこをどう直せばいいですか?
よろしくお願いします。 補足1
>場所)foreach (var ko in kobj.Objects)
実行しようとすると、inの所が黄色くなって733のエラーが出ます
補足2
URLが書き込めなかったので、URLは全て全角英数にしました。
よろしくお願いします。 >>733-734の質問は取り下げます
ありがとうございました 質問させてください。
みなさんMVCやMVVMといったUIアーキテクチャの知識はどのように勉強しましたか?
ネットの情報をあさっているのですが、いまいちぼんやりとしてどう実装していいのか悩んでいます
なにかよい書籍やサイトがあれば教えていただきたいのですが、よろしくお願いします。
Windows Formで開発しています。 すみません、プログラム板のほうに書き直します。
736の質問はとりさげます。 ■ このスレッドは過去ログ倉庫に格納されています