1 名前:デフォルトの名無しさん [2016/06/15(水) 11:34:28.60 ID:9eV3efFp.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net echo.2ch.net/test/read.cgi/tech/1460040653/ ■関連スレ C#, C♯, C#相談室 Part90 [無断転載禁止]©2ch.net echo.2ch.net/test/read.cgi/tech/1455160063/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/
128 名前:97 mailto:sage [2016/06/18(土) 10:42:52.21 ID:U0yvzOQf.net] Form1_KeyDownはイベント登録してるから呼ばれる。 MovePositionはイベント登録してないがeの情報だけ受け取っている。 そういうことか、別にsender object書いてるとかそれはデフォルトの Form1_KeyDownがそうなってるから書かなければいけないだけでjavaみたいに 引数eだけのイベント処理メソッドも書こうと思えば書けるんですね。
129 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 10:45:19.11 ID:U0yvzOQf.net] そこでなんですが、ステップ実行の仕方が分かりません… ブレークポイントを二か所 Form1_KeyDownの中の一行 MovePositionの中の一行 で設定してF11ボタン押したんですが、なんかプログラム全体を一行ずつ実行してる感じです。
130 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 11:00:12.85 ID:Fz8S5TPc.net] それがステップ実行だから間違っていない
131 名前:97 mailto:sage [2016/06/18(土) 11:03:51.53 ID:U0yvzOQf.net] >>127 2行だけ交互に実行したいけどそれはどうやればいいんですか?
132 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 11:09:37.30 ID:auElVeTk.net] >>128 見たいところだけブレークポイント設定してデバッグ(F5)
133 名前:デフォルトの名無しさん [2016/06/18(土) 11:16:59.63 ID:U0yvzOQf.net] >>129 キーイベントの場合F5に反応してしまってそれでプログラムが進んでしまうんですが そういう対処方法ありますか?
134 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 11:19:56.93 ID:auElVeTk.net] >>130 デバッグ実行中はF5じゃなくてエディタの続行ボタンを使えば?
135 名前:デフォルトの名無しさん [2016/06/18(土) 11:34:40.03 ID:U0yvzOQf.net] >>131 それでいけました。 もう一つ疑問ですがブレイクで停止中なのに何故キーボタンには反応してブレーク地点まで飛ぶんでしょうか?
136 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 11:55:57.92 ID:U0yvzOQf.net] というのはある程度連打したキーをためて一気に実行してほしいからです。
137 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 12:35:07.36 ID:auElVeTk.net] >>133 キーをためるのは無理だろうから有効なキーコードが入力されるごとにカウントして見たい回数になったところで止めるような部分(ブレークポイントを入れる部分)を追加するか もしくはキーコードを直接送る部分を作って見たい回数だけForm1_KeyDownを呼び出す
138 名前:デフォルトの名無しさん [2016/06/18(土) 15:14:53.25 ID:U0yvzOQf.net] >>134 ためるの無理なんですか、承知しました。 後Watchで変数監視できますが、Watch欄に全変数一括して持ってくることは可能ですか? 一つずつ手入力でやってますが少々面倒で…
139 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 16:45:33.56 ID:CfJxj2hM.net] KeyDownで連打を貯めたいってどういうことなんだ
140 名前:デフォルトの名無しさん mailto:sag [2016/06/18(土) 18:23:09.94 ID:U0yvzOQf.net] >>136 そもそも溜める理由なかったですね忘れてください。 ウォッチ使えないな、何でホワイトアウトしてるんだろう。
141 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 19:54:27.59 ID:YZGqi88u.net] >>137 君のために指摘しとくと グレーアウト な ちな、ホワイトアウトは吹雪とかの場合に使う
142 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 21:19:31.19 ID:Sk62rO3o.net] dynamic使うと遅くなるの?
143 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 21:26:46.85 ID:euI6F3wt.net] 最初の一回は遅いけどそれ以後は割と速いよ
144 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 21:30:23.49 ID:Sk62rO3o.net] >>140 二回目以降も若干遅いと言うこと?
145 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 22:10:48.65 ID:pG9pCEms.net] >>141 同じ速度だったら逆に凄い
146 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 22:45:14.91 ID:VROp9xuJ.net] お前らこんな調
147 名前:ラもしない奴の連投質問によく答えてやるよな [] [ここ壊れてます]
148 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 23:31:37.64 ID:en0l8YJd.net] 本人の代わりにググるスレとかあったらいいのにね
149 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 08:50:20.52 ID:mQfhDLF3.net] アプリの起動しっぱなしってのは.NETではあまり勧められる事ではないでしょうか? ブラウザ起動時はずっとアプリ実行して立ち上げてる状態にしたいんだけど、このことで悪影響とかありますか?
150 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 08:57:22.89 ID:I//I4PRq.net] メモリリークとかハンドルリークとかありそう
151 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 09:06:15.32 ID:zgl2bkrp.net] >>146 それは.Netに原因があるわけでなく作られたアプリに問題がある場合な
152 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 09:11:05.00 ID:I//I4PRq.net] >>147 いいやマイクロソフトが悪い
153 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 09:15:27.52 ID:+p0/Ua/B.net] >>145 Vista以降は明示的に切らない限り.Netのランタイムはずっと起動している .Netのプログラムはそのランタイム上で動いている これで問題が起こるのならランタイムそのものか動いているプログラムに問題があるかしかない
154 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 09:41:58.91 ID:s7xLro2i.net] >>148 ソフト側の問題をマイクロソフト側の問題にすり替える人間のクズだな
155 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 10:00:22.79 ID:mQfhDLF3.net] >>149 .NETのランタイムってSQLとかっていう名前のプロセスも含まれますか? 具体的にどれかタスクマネージャーで確認するにはどうすればいいんでしょう
156 名前:デフォルトの名無しさん [2016/06/19(日) 10:05:56.55 ID:mQfhDLF3.net] >>146 変数はメモリーの外で宣言するようにしているのでメモリリークの心配はないかと。 というかmainメソッド内で変数宣言するメリットってあるんでしょうか?
157 名前:デフォルトの名無しさん [2016/06/19(日) 10:06:37.67 ID:mQfhDLF3.net] 変数はメソッドの外のタイプミスです。
158 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 10:13:51.19 ID:qvkTbkKV.net] そのレベルなら今ウダウダと細かい事気にしないで とにかく入門書の一冊でもちゃんと終わらせるのと、とにかく作って経験積んだ方がいいよ はっきり言って基本的なところが分かってないから、個別にこんなところで聞いてたらキリがない
159 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 10:35:19.94 ID:+p0/Ua/B.net] やりたいことがあって〜はどうしたらいいんでしょうかなら質問スレらしくていいけど ・〜はメリットあるんでしょうか ・〜はどういうときに使うんでしょうか この手のは説明するのにキリが無いんだから自分が使わないのなら気にするなよ
160 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 11:09:23.85 ID:FiqN+bVa.net] 質問者様に向かってなんだその言い草は お前こそ答える気がないなら気にしないで黙ってろ 答える気がある奴が勝手に答えればいい
161 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 11:14:19.72 ID:qvkTbkKV.net] >>156 変数のスコープが分かってない子に解説してたらそれだけでこのスレ終わっちゃうぞ
162 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 11:15:49.94 ID:+p0/Ua/B.net] >>156 質問するなとは書いてないんだから俺に突っかかる前に>>152 に答えてやれよ
163 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 11:18:55.41 ID:D8PkNzp4.net] >>152 変数の有効範囲(スコープ)は出来る限り狭い方が良い。 可読性が向上するので、バグが発生し難くなる。
164 名前:デフォルトの名無しさん [2016/06/19(日) 11:38:16.10 ID:mQfhDLF3.net] >>159 メソッドの引数が増えてしまいませんか? メソッドはの戻り値もvoidにしたいし
165 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 11:43:51.24 ID:s7xLro2i.net] グローバル変数が100、200と増えてきたとき、どの変数がどのように使用されているかを完全に把握できるの?
166 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 11:55:12.16 ID:CQK/Xnlu.net] >>156 バカ発見
167 名前:デフォルトの名無しさん [2016/06/19(日) 12:01:33.56 ID:mQfhDLF3.net] >>161 僕がメソッド外に書く変数は ・キャラのポジションや攻撃力などの基本情報の変数 ・Graphics Bitmapなど極端にメモリを消費する変数 メソッドに書かない変数は ・添え字 ・ファイルパス(フォルダの階層なのでプライバシーに関わるから)
168 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:09:15.73 ID:esEuQC7H.net] 昔、自分で作ったアプリを直して復活させようとと10年ぶりくらいにVS立ち上げてみた(XPでwww) 使い方さっぱり忘れてるわ!!!ほかのアプリと混同してたりwww 暫くここを読んで思い出します・・・ とりあえずこのスレがまだあって嬉しかったwwwまたよろしく。
169 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:09:39.36 ID:s7xLro2i.net] 全部メソッド外じゃんw てかプライバシーって何?外に書こうが内に書こうが何も変わらないぞ
170 名前:デフォルトの名無しさん [2016/06/19(日) 12:13:05.53 ID:mQfhDLF3.net] >>165 頭ぼけてますね メソッド外 ・キャラの基本情報 ・GraphicsやBitmapなどメモリを占有するクラスの宣言とオブジェクト生成 ・ メソッド内に書く変数は ・ループで使う添え字 ・ファイルパス
171 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:15:56.71 ID:D8PkNzp4.net] まともに答えても我流を直そうともせず余計な事ばっかり気にしてるいつもの子だった…。
172 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:20:57.59 ID:pXg+pklT.net] >>145 問題ない >>152 メソッド外から使う変数はメソッドの中に書いてはいけない >>160 スパゲティコードになりそう >>163 とりあえずオブジェクト指向学ぼうか? あとメソッドの外に書く変数じゃなくて、インスタンス変数/クラス変数って言おうね >キャラのポジションや攻撃力などの基本情報の変数 これはイントランス変数 >Graphics Bitmapなど極端にメモリを消費する変数 こういうメモリを大量に消費する物は、出来るだけnewしないようにしないといけないから必要最低限だけ作るようにする 参照型は、スタックに入るのはオブジェクトへの参照だからローカル変数/メンバ変数はあまり関係ない 時と場合による >添え字 添え字って言っても色々あるから時と場合による for文とかなら基本ローカル >ファイルパス(フォルダの階層なのでプライバシーに関わるから) プライバシーは関係ない。ローカルで動かすものは全て見られていると思え あと、文字列も参照型だから参照しかスタックにはつまれない
173 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:25:22.36 ID:pXg+pklT.net] >>166 とりあえず「すっきり分かるjava入門」読もうか? c#の構文はjava+αだから、javaを覚えればc#も書ける オブジェクト指向とか、参照とか結構詳しく解説してあるからおすすめ 俺もこの本でjava勉強した後にc#したけど、構文一緒だったから1日で出来るようになったよ javaの構文をそのままc#で使って、少しずつc#風に(プロパティとか)書き換えるといい
174 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:31:07.53 ID:D8PkNzp4.net] >>169 スッキリわかるJava入門か。 帯に「RPG制作を例に、オブジェクト指向もよくわかる!」とか書いてあるし、ぴったりかもね。
175 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:31:16.41 ID:gfPWR5Hk.net] 最近はインジェクション以外の変数を滅多に書かなくなったな 継続的にリファクタリングしてるから変数がほとんど引数になる
176 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:43:20.30 ID:SFAW8Ppa.net] 以下のプログラムなんですが実行を試み、ペイントに貼り付けようとすると 「クリップボードにある情報はペイントに挿入できません。」となってしまいます。 原因は何でしょうか? /////////////////////////////////////////////////////////////// MemoryStream ms = new MemoryStream(); Image image = Image.FromFile(filePath);//BMP形式の画像取得 Dataobject data = new DataObject(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); data.SetData(DataFormats.Bitmap, true, ms); Clipboard.SetDataObject(data, true); /////////////////////////////////////////////////////////////// 参考にしたページは dobon.net/vb/dotnet/string/clipboardcsv.html です。 imageをクリップボードに表示する事はもちろん可能でした。
177 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:49:41.26 ID:FiqN+bVa.net] C#
178 名前:erならもっと食いつくかと思ったのにそうでもないね 本人が素知らぬ顔で質問を続けたせいか [] [ここ壊れてます]
179 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:52:17.05 ID:+p0/Ua/B.net] >>172 MemoryStreamにいれてコピーしたらMemoryStreamに格納しないと取り出せない 何で直接BMPでコピーしない?
180 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 12:54:06.79 ID:SFAW8Ppa.net] >>174 tomovertex.at.webry.info/201009/article_2.html これがしたいんです。 javaではできるそうですがC#だと透過をそのまま残すのはちょっと難しいらしいですね。
181 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 13:01:08.28 ID:+p0/Ua/B.net] ああBMPじゃなくてBitmapだった >>175 そこのままにやればPNG形式でコピーできるけどペイントはそれに対応していない GIMPはコピーで取り込めるのを確認している クリップボードでBitmapはαチャンネルに対応していないからBitmapでやる限り無理 Bitmap形式でPictureBoxとかで透過表示したい場合は別
182 名前:デフォルトの名無しさん [2016/06/19(日) 13:21:56.41 ID:vFy/bQYV.net] class MyForm : Form { public System.Windows.Forms.Button[] mButton = new System.Windows.Forms.Button[5]; public System.Windows.Forms.TextBox[] mTextBox = new System.Windows.Forms.TextBox[5]; private void Form1_Load(object sender, System.EventArgs e) { //ボタンコントロールのインスタンス作成し、プロパティを設定する for (int intLoop = 0; intLoop <= 4; intLoop++) { //インスタンス作成 mButton[intLoop] = new System.Windows.Forms.Button(); mTextBox[intLoop] = new System.Windows.Forms.TextBox(); //各種プロパティ設定 mButton[intLoop].Name = "Button" + intLoop.ToString(); mButton[intLoop].Text = "Button" + intLoop.ToString(); mButton[intLoop].Size = new Size(150, 30); mButton[intLoop].Location = new Point(10, 10 + 40 * intLoop); mButton[intLoop].Tag = intLoop; mTextBox[intLoop].Name = "TextBox" + intLoop.ToString(); mTextBox[intLoop].Text = "TextBox" + intLoop.ToString(); mTextBox[intLoop].Size = new Size(150, 30); mTextBox[intLoop].Location = new Point(170, 15 + 40 * intLoop); mTextBox[intLoop].Tag = intLoop;
183 名前:デフォルトの名無しさん [2016/06/19(日) 13:22:46.23 ID:vFy/bQYV.net] //以下はデフォルトで設定されているので不要だが念のため設定 mButton[intLoop].Enabled = true; mButton[intLoop].Visible = true; mTextBox[intLoop].Enabled = true; mTextBox[intLoop].Visible = true; //イベントの関連付け mButton[intLoop].Click += new EventHandler(Button_Click); } //フォームにコントロールを追加 //(注意)前面・背面を考慮する場合、AddRange を先に実行したコントロールの方が前面に来る this.Controls.AddRange(mButton); this.Controls.AddRange(mTextBox); } //ボタンのクリック private void Button_Click(object sender, EventArgs e) { int intIndex = (int)((System.Windows.Forms.Button)sender).Tag; MessageBox.Show("上から" + (intIndex + 1).ToString() + "番目のテキストの中身は" + mTextBox[intIndex].Text + "です。"); } public static void Main() { Application.Run(new MyForm()); } }
184 名前:デフォルトの名無しさん [2016/06/19(日) 13:23:59.05 ID:vFy/bQYV.net] 上記のコードを走らせてみてもウインドウしか表示されません どこが悪いのでしょうjか?
185 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 13:24:15.76 ID:SFAW8Ppa.net] >>176 >そこのままにやればPNG形式でコピーできるけどペイントはそれに対応していない 透明の選択という項目があって、ペイント上で絵をその設定でコピーして貼り付けたらちゃんと透明になってますけど? >Bitmapはそもそも透過が無理(Transparentで透過させてるようにみせるのは可能) 分かりました、そうなんですね。 >GIMPはコピーで取り込めるのを確認している さっきGIMPインストールして試しました。 取り込めるんですが透明の部分が白い画像として取り込まれてしまいます。
186 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 13:28:24.96 ID:pXg+pklT.net] ソース貼る時は半角スペース2個を全角スペース1個に置き換えて貼ってくれ…
187 名前:デフォルトの名無しさん [2016/06/19(日) 13:31:10.74 ID:vFy/bQYV.net] >>181 迷惑かけて申し訳ございません 上記のコードについて分かったことがあります Mainメソッドのところに Application.Run(new MyForm()); しかかいていませんね
188 名前:180 mailto:sage [2016/06/19(日) 13:37:08.69 ID:SFAW8Ppa.net] 申し訳ありません。 >さっきGIMPインストールして試しました。 >取り込めるんですが透明の部分が白い画像として取り込まれてしまいます。 これについてはもともとの画像が透過でなかったためそのようになりました。 ただペイントは透過切り取りが可能なのに何故対応してないと分かるのでしょうか?
189 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 13:48:41.98 ID:Kmjvz99s.net] ブラウザで開いた透過PNGをクリップボードにコピーしてPowerPointに貼り付けるとちゃんと透過してるんだけど、これって結構厄介なのかな
190 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 14:09:23.28 ID:1xNvGCg2.net] stringbuilderを使う状況というのは、出来上がる文字列の長さがどれくらい以上だと 効果的なの?
191 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 14:24:31.05 ID:s7xLro2i.net] 長さじゃなくて回数が重要 それでも10〜20程度じゃ速度低下なんてほとんど起こらないので ループで不特定回数の文字連結を行うときに使うようにするといい まぁ何万文字とかそこら辺までいくとStringBuilder使えよって感じはするけど 気になるならいろいろな条件で計測してみるといいよ
192 名前:180 mailto:sag [2016/06/19(日) 14:42:24.03 ID:SFAW8Ppa.net] どんなアプリでもそのアプリ内では透過状態を残す事ができるけど コピーして他アプリに貼り付けた途端に白い色になってしまうな。 これ難しくて実現できないかもしれませんね。 でもSAI_FONっていうソフトがあるんだけど、これは文字をSAIに送ることができて 透明部分が白い部分にならないようになってる。一体どういう仕組みなんだろう? 初心者には難しいのかなぁ。
193 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 14:43:19.04 ID:SFAW8Ppa.net] 一応リンク onix.moe.hm/SAI_FON.html 凄いソフトです。こんなのが作りたい。
194 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 15:18:48.47 ID:SFAW8Ppa.net] 一応excel、gimpは透過画像貼り付け可能でした。 でもexcelからsaiだと透明だったのが白になりましたが。 saiには貼り付けできなかったのが非常に残念です。 かなり厄介な話で初心者スレにはそぐわないので、すいません ここで終わらせて頂きます。ありがとうございました。
195 名前:デフォルトの名無しさん [2016/06/19(日) 15:59:32.10 ID:BrpXsgWP.net] reshaperの設定をエクスポート、インポートする方法を教えて
196 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 16:12:25.49 ID:cEvpvy+s.net] エラー捕まえるためにtry-catch使ってるけど以下のように書くとエラーメッセージはわかるけどエラーが発生したときの変数iの値とかがわからない。 try { for (int i = 0; i < 100; i++) { // 処理いろいろ } } carch (Exception ex) { Console.WriteLine(ex.Message); // ここにブレークポイント } やはりtry-catchの外で変数を宣言するべき? int i; try { for (i = 0; i < 100; i++) { // 処理いろいろ } } carch (Exception ex) { Console.WriteLine(ex.Message); // ここにブレークポイント } 行数増えるし見た目も良くない(個人の感想です。)ので出来れば宣言を分けたくないし、 変数が多いと分けるのも面倒。 プロフェッショナル版を買えば1番目の例でも変数iの値がわかるとかないですよね? 地道に分けるしかない??
197 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 16:23:22.45 ID:s7xLro2i.net] プロでも同じなのでエラーがあったときにどうしたいのかによって書き分けるしかない
198 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 16:34:02.09 ID:pXg+pklT.net] プロ版とかない
199 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 16:44:23.07 ID:Pvc+naRU.net] >>191 try { for (int i = 0; i < 100; i++){ try { // 処理いろいろ } catch(Exception ex) { throw new Exception(i.ToString(), ex); } } } carch(Exception ex) { Console.WriteLine(ex.Message); // ここにブレークポイント }
200 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 17:01:13.57 ID:tj+CW6H4.net] >>180 ペイントで対応していないのは."PNG"というデータ形式指定したデータ(DataFormats."PNG") >>184 Device Independed BitmapってデータタイプだとできるみたいだけどC#でそのデータタイプがどう作られるかわからない あとoffice系は"PNGが取り込めるって聞いているけどoffice持っていないから検証できない DataFormats.Bitmapで透過画像を使うと色化けするか透過が無視される >クリップボードを用いるとBMPデータの透過色が変換されてしまう https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/0416af2a-a2f4-49b5-a085-f117f8576ddf/bmp?forum=vcgeneralja 画像形式としてのBMPがGDIで読み込まれると透過部分無視される構造になっているので検証からしてめんどくさい >>187 それのReadMEに >・SAIへの転送方式を輝度を透明度ではなく、正確にアルファー情報を送るように変更 って書いてあるし クリップボードへコピーすると System.Drawing.Bitmap Bitmap のデータタイプしかコピーされてないから別形式の転送方法使っているとしか思えない SAIは持っていないからこれ以上はわからない
201 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 17:23:11.30 ID:cEvpvy+s.net] >>192 やはりそうですか・・・ >>194 そんなことするくらいなら大人しく宣言分けます!!
202 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 17:55:22.99 ID:mhAMecRA.net] >>196 > そんなことするくらいなら大人しく宣言分けます!! 一時的なデバッグなの? なら例外設定して例外が発生したところで停めればいいと思うが
203 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 18:46:30.63 ID:PKwMSI+4.net] >>195 ペイントやsaiで絵をコピーした状態の時のクリップボードをC#で再現するのは至難の業って事でいいんでしょうか? ペイントもsaiも同じWindowsで動くならクリップボードに格納されているデータ型は特定できそうな気もしますが、 それが出来ないのはちょっともどかしいですね。
204 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 19:04:22.32 ID:tj+CW6H4.net] >>198 >>175 のリンク先のように画像フォーマットをPNG形式にした上でMemoryStreamに保存して そのMemoryStreamの内容を"PNG"(独自形式での指定であってPNG画像を示す物ではない事に注意)としてコピーしたらできる C#に関係ないけどGIMPで画像をコピーするとクリップボード上には PNG DeviceIndependentBitmap System.Drawing.Bitmap Bitmap Format17 の5つのタイプのデータがコピーされている とりあえず話は>>175 のリンク先そのままやってから
205 名前:デフォルトの名無しさん [2016/06/19(日) 19:09:52.57 ID:PKwMSI+4.net] >>199 >>175 はVB.NETで書かれているので>>172 はそれをC#に書き換えたものです。 それをやってsaiにもペイントにも貼り付けできなかったという事です。
206 名前:デフォルトの名無しさん [2016/06/19(日) 19:10:14.88 ID:PKwMSI+4.net] すいませんPNGですね。それで試してみます。
207 名前:デフォルトの名無しさん [2016/06/19(日) 19:15:54.70 ID:PKwMSI+4.net] >>175 をpngで試したところつまり /////////////////////////////////////////////////////////////// MemoryStream ms = new MemoryStream(); Image image = Image.FromFile(filePath);//PNG形式の画像取得 Dataobject data = new DataObject(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); data.SetData("PNG", true, ms); Clipboard.SetDataObject(data, true); /////////////////////////////////////////////////////////////// これだとペイントは「クリップボードにある情報はペイントに挿入できません。」という エラーは出ないものの、貼り付けしても無反応です。SAIも無反応でした。 後気になったのが SetDataの第一引数を"PNG"ってしてますが、SaveメソッドのSystem.Drawing.Imaging.ImageFormat.Png みたいに固有のプロパティではなくstring型で渡せるってのが非常にややこしいですね。 だってDataFormats.Bitmapというのは固有のプロパティだけどDataFormats.Pngは存在しなくてPNGの場合は "PNG"としなければならないという… メソッドの内部処理みないと"PNG"が書けるなんて思いませんよ…
208 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 19:17:21.15 ID:tj+CW6H4.net] ああ、ごめん >ペイントやsaiで絵をコピーした状態の時のクリップボードをC#で再現するのは至難の業 はいw DeviceIndependentBitmapがどうなっているか見てみないとわからない あとそれらが内部でコピーしているのとクリップボードに出しているデータは多分別 で >>201 "PNG"のオブジェクト受けられるのはGIMPとかPaint ,Netとか多分MS officeもできるけどSAIが対応しているかは知らない とりあえず透過付き画像をC#でクリップボード介してやり取りするのは>>175 のやり方以外は知らない
209 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 19:18:59.12 ID:tj+CW6H4.net] >>202 SAI_FONとおなじことやりたいのならILSPYでSAI_FONの中身見るしかないな
210 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 19:34:08.47 ID:QhmIGAOc.net] >>197 今はほぼ全ての関数がtry-catchで括ってあって、 実際に何らかの例外が発生したら変数の値とかわからないと追いかけづらいよね!ということに気がついて もしかして有料版なら今のままでもなんとかなるのかなと思って聞いてみた次第です。 どこでどんな例外が発生しても良いようにするにはやはり変数をtry-catchの外で宣言するのが一番確実のような気がします。 例外が頻発してくれればデバッグはしやすいですけど、 月に1回しか発生しないような例外だと、この例外が発生したからこれを例外設定して・・・ではちょっと大変。
211 名前:デフォルトの名無しさん [2016/06/19(日) 19:36:41.05 ID:PKwMSI+4.net] >>204 少なくともC#で作ったものではないんですかねー分からないですが だってデータ型って用意されたものしか基本使えないですよね。
212 名前:デフォルトの名無しさん [2016/06/19(日) 19:41:00.20 ID:PKwMSI+4.net] DataFormats."PNG"と"PNG"は別物??
213 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 19:42:36.55 ID:QhmIGAOc.net] ん、最初から全部設定すれば良いだけかな?
214 名前:デフォルトの名無しさん [2016/06/19(日) 19:52:39.85 ID:PKwMSI+4.net] image.Save(ms, "PNG");これはダメなのな"PNG"じゃなくて System.Drawing.Imaging.ImageFormat.Pngって書かないとダメw ややこしすぎるwww
215 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:20:39.57 ID:tj+CW6H4.net] DeviceIndependentBitmapはBMP画像形式ファイルの14バイト目以降をMemoryStreamに移して >>175 の"PNG"を"DeviceIndependentBitmap"にしてクリップボードにコピーするとできた 透過付き画像はGIMPあたりで作るか自分でBMP形式のバイト配列作るしかないが >>206 SAI_FONはILSPYで中身全部見れるから ReadMe.txtにも >Windows7 Pro + VisualC# 2015 Express + .NET Framework4.51(4.0でビルド) って書いてあるし
216 名前:デフォルトの名無しさん [2016/06/19(日) 20:29:23.36 ID:PKwMSI+4.net] そもそも何でDeviceIndependentBitmapという具体的なデータ型が出てきたのか 分かりませんが試してみます!本当に付き合ってくださって感謝してます!
217 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:35:30.94 ID:N0SKT7vZ.net] >>205 いや別に君がそれでいいと思うなら止めやしないけど > 月に1回しか発生しないような例外 が発生するまでデバッガで実行させる気?
218 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:38:04.11 ID:6taJ36ar.net] >>212 アタッチ
219 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:49:39.25 ID:N0SKT7vZ.net] >>213 ブレークかけてないのにアタッチしてどうする気?
220 名前:デフォルトの名無しさん [2016/06/19(日) 20:49:53.10 ID:PKwMSI+4.net] >>210 DeviceIndependentBitmapに変えました。 でもダメでしたね。 ペイント、SAIともに駄目でした… /////////////////////////////////////////////////////////////// MemoryStream ms = new MemoryStream(); Image image = Image.FromFile(filePath);//BMP形式の画像取得 Dataobject data = new DataObject(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); data.SetData("DeviceIndependentBitmap", true, ms); Clipboard.SetDataObject(data, true); ///////////////////////////////////////////////////////////////
221 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:58:05.49 ID:tj+CW6H4.net] >>215 >画像形式としてのBMPがGDIで読み込まれると透過部分無視される構造になっている これ忘れないように。ペイントは無理 こちらで確認しているのはGIMPと自作ツールだから SAI_FONはSAIの登録場所確認したり連動させているんだからSAI_FONとSAIのデータのやり取りはクリップボードじゃないはず
222 名前:デフォルトの名無しさん [2016/06/19(日) 21:11:37.93 ID:PKwMSI+4.net] >>216 あぁそうか、ちょっと混乱してるので纏めますね BMPはそもそも透過が無理だ PNGの場合はアルファチャンネルの情報も送ったらペイントとSAIでは クリップボードの状態を読み込めない(OFFICEはOK)なんですね… なのでペイントやSAIでクリップボードから貼り付けるなら Image型のデータまたはBitmap型のデータをClipboardの引数にしてこの 状態からならどのアプリにも共通なデータ型として変換してくれるから 透明は無視されるけど貼り付けはできるってことですね… 事情が分かっただけでも大収穫です これはmicrosoftに懇願するしかないですねwアプリ間で透明状態をやり取りするなんて 技術的に簡単なのにAPI使って難しい事しないとできないとか… そもそもクリップボードなんて滅茶苦茶重要な役割ですよね、デフォルトで1個しか保存できないこと自体おかしい…w 愚痴っちゃってすいません
223 名前:デフォルトの名無しさん [2016/06/19(日) 21:17:17.92 ID:PKwMSI+4.net] >SAI_FONはSAIの登録場所確認したり連動させているんだからSAI_FONとSAIのデータのやり取りはクリップボードじゃないはず あーなるほどそういう事か ハンドル取得して直接描画させる感じですかね、そうなるとお手上げだw
224 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 21:28:59.14 ID:aUmeBUXf.net] 技術的に簡単と言うならおまえがサクっと実装するだけで終わる話なんだけど。 基本を端折ってどれだけ高度なことをしようとしてるか理解していない。 キミの理解の90%は技術、仕様を誤解したままだ。
225 名前:デフォルトの名無しさん [2016/06/19(日) 22:28:58.06 ID:PKwMSI+4.net] 難しさがどこらへんにあるか分からない だって透明情報だってビットマップでこの場所が透明ですよって そういうのを保存したらいいだけじゃね?とかですね それをメモリ上に保存することのどこに難しさがあるのか… こう考えてしまうのは浅はかですか?
226 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 22:40:32.46 ID:3lPnIi6j.net] interfaceはなんでpublicなの? internalならもっと使いやすいのに
227 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 22:53:03.54 ID:XSF8wvd9.net] >>220 難しいって言うか情報が公開されてるかいないかの問題で 情報が公開されてないんだろ?
228 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 23:09:33.38 ID:pXg+pklT.net] internalを使ったことないんだが、あれメリットあるのか?