トップページ⇒tech
1002コメント348KB

ふらっと C#,C♯,C#(初心者用) Part121 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/06/15(水) 11:34:28.60ID:9eV3efFp
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

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

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1460040653/

■関連スレ
C#, C♯, C#相談室 Part90 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1455160063/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
0153デフォルトの名無しさん2016/06/19(日) 10:06:37.67ID:mQfhDLF3
変数はメソッドの外のタイプミスです。
0154デフォルトの名無しさん2016/06/19(日) 10:13:51.19ID:qvkTbkKV
そのレベルなら今ウダウダと細かい事気にしないで
とにかく入門書の一冊でもちゃんと終わらせるのと、とにかく作って経験積んだ方がいいよ
はっきり言って基本的なところが分かってないから、個別にこんなところで聞いてたらキリがない
0155デフォルトの名無しさん2016/06/19(日) 10:35:19.94ID:+p0/Ua/B
やりたいことがあって〜はどうしたらいいんでしょうかなら質問スレらしくていいけど
・〜はメリットあるんでしょうか
・〜はどういうときに使うんでしょうか
この手のは説明するのにキリが無いんだから自分が使わないのなら気にするなよ
0156デフォルトの名無しさん2016/06/19(日) 11:09:23.85ID:FiqN+bVa
質問者様に向かってなんだその言い草は
お前こそ答える気がないなら気にしないで黙ってろ
答える気がある奴が勝手に答えればいい
0157デフォルトの名無しさん2016/06/19(日) 11:14:19.72ID:qvkTbkKV
>>156
変数のスコープが分かってない子に解説してたらそれだけでこのスレ終わっちゃうぞ
0158デフォルトの名無しさん2016/06/19(日) 11:15:49.94ID:+p0/Ua/B
>>156
質問するなとは書いてないんだから俺に突っかかる前に>>152に答えてやれよ
0159デフォルトの名無しさん2016/06/19(日) 11:18:55.41ID:D8PkNzp4
>>152
変数の有効範囲(スコープ)は出来る限り狭い方が良い。
可読性が向上するので、バグが発生し難くなる。
0160デフォルトの名無しさん2016/06/19(日) 11:38:16.10ID:mQfhDLF3
>>159
メソッドの引数が増えてしまいませんか?
メソッドはの戻り値もvoidにしたいし
0161デフォルトの名無しさん2016/06/19(日) 11:43:51.24ID:s7xLro2i
グローバル変数が100、200と増えてきたとき、どの変数がどのように使用されているかを完全に把握できるの?
0162デフォルトの名無しさん2016/06/19(日) 11:55:12.16ID:CQK/Xnlu
>>156
バカ発見
0163デフォルトの名無しさん2016/06/19(日) 12:01:33.56ID:mQfhDLF3
>>161
僕がメソッド外に書く変数は

・キャラのポジションや攻撃力などの基本情報の変数
・Graphics Bitmapなど極端にメモリを消費する変数

メソッドに書かない変数は

・添え字
・ファイルパス(フォルダの階層なのでプライバシーに関わるから)
0164デフォルトの名無しさん2016/06/19(日) 12:09:15.73ID:esEuQC7H
昔、自分で作ったアプリを直して復活させようとと10年ぶりくらいにVS立ち上げてみた(XPでwww)
使い方さっぱり忘れてるわ!!!ほかのアプリと混同してたりwww
暫くここを読んで思い出します・・・
とりあえずこのスレがまだあって嬉しかったwwwまたよろしく。
0165デフォルトの名無しさん2016/06/19(日) 12:09:39.36ID:s7xLro2i
全部メソッド外じゃんw
てかプライバシーって何?外に書こうが内に書こうが何も変わらないぞ
0166デフォルトの名無しさん2016/06/19(日) 12:13:05.53ID:mQfhDLF3
>>165
頭ぼけてますね

メソッド外
・キャラの基本情報
・GraphicsやBitmapなどメモリを占有するクラスの宣言とオブジェクト生成
・

メソッド内に書く変数は

・ループで使う添え字
・ファイルパス
0167デフォルトの名無しさん2016/06/19(日) 12:15:56.71ID:D8PkNzp4
まともに答えても我流を直そうともせず余計な事ばっかり気にしてるいつもの子だった…。
0168デフォルトの名無しさん2016/06/19(日) 12:20:57.59ID:pXg+pklT
>>145
問題ない

>>152
メソッド外から使う変数はメソッドの中に書いてはいけない

>>160
スパゲティコードになりそう

>>163
とりあえずオブジェクト指向学ぼうか?
あとメソッドの外に書く変数じゃなくて、インスタンス変数/クラス変数って言おうね
>キャラのポジションや攻撃力などの基本情報の変数
これはイントランス変数
>Graphics Bitmapなど極端にメモリを消費する変数
こういうメモリを大量に消費する物は、出来るだけnewしないようにしないといけないから必要最低限だけ作るようにする
参照型は、スタックに入るのはオブジェクトへの参照だからローカル変数/メンバ変数はあまり関係ない
時と場合による
>添え字
添え字って言っても色々あるから時と場合による
for文とかなら基本ローカル
>ファイルパス(フォルダの階層なのでプライバシーに関わるから)
プライバシーは関係ない。ローカルで動かすものは全て見られていると思え
あと、文字列も参照型だから参照しかスタックにはつまれない
0169デフォルトの名無しさん2016/06/19(日) 12:25:22.36ID:pXg+pklT
>>166
とりあえず「すっきり分かるjava入門」読もうか?
c#の構文はjava+αだから、javaを覚えればc#も書ける
オブジェクト指向とか、参照とか結構詳しく解説してあるからおすすめ
俺もこの本でjava勉強した後にc#したけど、構文一緒だったから1日で出来るようになったよ
javaの構文をそのままc#で使って、少しずつc#風に(プロパティとか)書き換えるといい
0170デフォルトの名無しさん2016/06/19(日) 12:31:07.53ID:D8PkNzp4
>>169
スッキリわかるJava入門か。
帯に「RPG制作を例に、オブジェクト指向もよくわかる!」とか書いてあるし、ぴったりかもね。
0171デフォルトの名無しさん2016/06/19(日) 12:31:16.41ID:gfPWR5Hk
最近はインジェクション以外の変数を滅多に書かなくなったな
継続的にリファクタリングしてるから変数がほとんど引数になる
0172デフォルトの名無しさん2016/06/19(日) 12:43:20.30ID:SFAW8Ppa
以下のプログラムなんですが実行を試み、ペイントに貼り付けようとすると
「クリップボードにある情報はペイントに挿入できません。」となってしまいます。
原因は何でしょうか?

///////////////////////////////////////////////////////////////
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);
///////////////////////////////////////////////////////////////

参考にしたページは
http://dobon.net/vb/dotnet/string/clipboardcsv.htmlです。
imageをクリップボードに表示する事はもちろん可能でした。
0173デフォルトの名無しさん2016/06/19(日) 12:49:41.26ID:FiqN+bVa
C#erならもっと食いつくかと思ったのにそうでもないね
本人が素知らぬ顔で質問を続けたせいか
0174デフォルトの名無しさん2016/06/19(日) 12:52:17.05ID:+p0/Ua/B
>>172
MemoryStreamにいれてコピーしたらMemoryStreamに格納しないと取り出せない
何で直接BMPでコピーしない?
0175デフォルトの名無しさん2016/06/19(日) 12:54:06.79ID:SFAW8Ppa
>>174
http://tomovertex.at.webry.info/201009/article_2.html
これがしたいんです。
javaではできるそうですがC#だと透過をそのまま残すのはちょっと難しいらしいですね。
0176デフォルトの名無しさん2016/06/19(日) 13:01:08.28ID:+p0/Ua/B
ああBMPじゃなくてBitmapだった
>>175
そこのままにやればPNG形式でコピーできるけどペイントはそれに対応していない
GIMPはコピーで取り込めるのを確認している
クリップボードでBitmapはαチャンネルに対応していないからBitmapでやる限り無理
Bitmap形式でPictureBoxとかで透過表示したい場合は別
0177デフォルトの名無しさん2016/06/19(日) 13:21:56.41ID:vFy/bQYV
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;
0178デフォルトの名無しさん2016/06/19(日) 13:22:46.23ID:vFy/bQYV
//以下はデフォルトで設定されているので不要だが念のため設定
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());
}
}
0179デフォルトの名無しさん2016/06/19(日) 13:23:59.05ID:vFy/bQYV
上記のコードを走らせてみてもウインドウしか表示されません
どこが悪いのでしょうjか?
0180デフォルトの名無しさん2016/06/19(日) 13:24:15.76ID:SFAW8Ppa
>>176
>そこのままにやればPNG形式でコピーできるけどペイントはそれに対応していない
透明の選択という項目があって、ペイント上で絵をその設定でコピーして貼り付けたらちゃんと透明になってますけど?

>Bitmapはそもそも透過が無理(Transparentで透過させてるようにみせるのは可能)
分かりました、そうなんですね。

>GIMPはコピーで取り込めるのを確認している
さっきGIMPインストールして試しました。
取り込めるんですが透明の部分が白い画像として取り込まれてしまいます。
0181デフォルトの名無しさん2016/06/19(日) 13:28:24.96ID:pXg+pklT
ソース貼る時は半角スペース2個を全角スペース1個に置き換えて貼ってくれ…
0182デフォルトの名無しさん2016/06/19(日) 13:31:10.74ID:vFy/bQYV
>>181
迷惑かけて申し訳ございません

上記のコードについて分かったことがあります
Mainメソッドのところに
Application.Run(new MyForm());
しかかいていませんね
01831802016/06/19(日) 13:37:08.69ID:SFAW8Ppa
申し訳ありません。

>さっきGIMPインストールして試しました。
>取り込めるんですが透明の部分が白い画像として取り込まれてしまいます。

これについてはもともとの画像が透過でなかったためそのようになりました。
ただペイントは透過切り取りが可能なのに何故対応してないと分かるのでしょうか?
0184デフォルトの名無しさん2016/06/19(日) 13:48:41.98ID:Kmjvz99s
ブラウザで開いた透過PNGをクリップボードにコピーしてPowerPointに貼り付けるとちゃんと透過してるんだけど、これって結構厄介なのかな
0185デフォルトの名無しさん2016/06/19(日) 14:09:23.28ID:1xNvGCg2
stringbuilderを使う状況というのは、出来上がる文字列の長さがどれくらい以上だと
効果的なの?
0186デフォルトの名無しさん2016/06/19(日) 14:24:31.05ID:s7xLro2i
長さじゃなくて回数が重要
それでも10〜20程度じゃ速度低下なんてほとんど起こらないので
ループで不特定回数の文字連結を行うときに使うようにするといい

まぁ何万文字とかそこら辺までいくとStringBuilder使えよって感じはするけど
気になるならいろいろな条件で計測してみるといいよ
01871802016/06/19(日) 14:42:24.03ID:SFAW8Ppa
どんなアプリでもそのアプリ内では透過状態を残す事ができるけど
コピーして他アプリに貼り付けた途端に白い色になってしまうな。
これ難しくて実現できないかもしれませんね。

でもSAI_FONっていうソフトがあるんだけど、これは文字をSAIに送ることができて
透明部分が白い部分にならないようになってる。一体どういう仕組みなんだろう?

初心者には難しいのかなぁ。
0188デフォルトの名無しさん2016/06/19(日) 14:43:19.04ID:SFAW8Ppa
一応リンク
http://onix.moe.hm/SAI_FON.html

凄いソフトです。こんなのが作りたい。
0189デフォルトの名無しさん2016/06/19(日) 15:18:48.47ID:SFAW8Ppa
一応excel、gimpは透過画像貼り付け可能でした。
でもexcelからsaiだと透明だったのが白になりましたが。
saiには貼り付けできなかったのが非常に残念です。
かなり厄介な話で初心者スレにはそぐわないので、すいません
ここで終わらせて頂きます。ありがとうございました。
0190デフォルトの名無しさん2016/06/19(日) 15:59:32.10ID:BrpXsgWP
reshaperの設定をエクスポート、インポートする方法を教えて
0191デフォルトの名無しさん2016/06/19(日) 16:12:25.49ID:cEvpvy+s
エラー捕まえるために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の値がわかるとかないですよね?
地道に分けるしかない??
0192デフォルトの名無しさん2016/06/19(日) 16:23:22.45ID:s7xLro2i
プロでも同じなのでエラーがあったときにどうしたいのかによって書き分けるしかない
0193デフォルトの名無しさん2016/06/19(日) 16:34:02.09ID:pXg+pklT
プロ版とかない
0194デフォルトの名無しさん2016/06/19(日) 16:44:23.07ID:Pvc+naRU
>>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); // ここにブレークポイント
}
0195デフォルトの名無しさん2016/06/19(日) 17:01:13.57ID:tj+CW6H4
>>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は持っていないからこれ以上はわからない
0196デフォルトの名無しさん2016/06/19(日) 17:23:11.30ID:cEvpvy+s
>>192
やはりそうですか・・・

>>194
そんなことするくらいなら大人しく宣言分けます!!
0197デフォルトの名無しさん2016/06/19(日) 17:55:22.99ID:mhAMecRA
>>196
> そんなことするくらいなら大人しく宣言分けます!!
一時的なデバッグなの?
なら例外設定して例外が発生したところで停めればいいと思うが
0198デフォルトの名無しさん2016/06/19(日) 18:46:30.63ID:PKwMSI+4
>>195
ペイントやsaiで絵をコピーした状態の時のクリップボードをC#で再現するのは至難の業って事でいいんでしょうか?
ペイントもsaiも同じWindowsで動くならクリップボードに格納されているデータ型は特定できそうな気もしますが、
それが出来ないのはちょっともどかしいですね。
0199デフォルトの名無しさん2016/06/19(日) 19:04:22.32ID:tj+CW6H4
>>198
>>175のリンク先のように画像フォーマットをPNG形式にした上でMemoryStreamに保存して
そのMemoryStreamの内容を"PNG"(独自形式での指定であってPNG画像を示す物ではない事に注意)としてコピーしたらできる
C#に関係ないけどGIMPで画像をコピーするとクリップボード上には
PNG
DeviceIndependentBitmap
System.Drawing.Bitmap
Bitmap
Format17
の5つのタイプのデータがコピーされている
とりあえず話は>>175のリンク先そのままやってから
0200デフォルトの名無しさん2016/06/19(日) 19:09:52.57ID:PKwMSI+4
>>199
>>175はVB.NETで書かれているので>>172はそれをC#に書き換えたものです。
それをやってsaiにもペイントにも貼り付けできなかったという事です。
0201デフォルトの名無しさん2016/06/19(日) 19:10:14.88ID:PKwMSI+4
すいませんPNGですね。それで試してみます。
0202デフォルトの名無しさん2016/06/19(日) 19:15:54.70ID:PKwMSI+4
>>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"が書けるなんて思いませんよ…
0203デフォルトの名無しさん2016/06/19(日) 19:17:21.15ID:tj+CW6H4
ああ、ごめん
>ペイントやsaiで絵をコピーした状態の時のクリップボードをC#で再現するのは至難の業
はいw
DeviceIndependentBitmapがどうなっているか見てみないとわからない
あとそれらが内部でコピーしているのとクリップボードに出しているデータは多分別
で
>>201
"PNG"のオブジェクト受けられるのはGIMPとかPaint ,Netとか多分MS officeもできるけどSAIが対応しているかは知らない
とりあえず透過付き画像をC#でクリップボード介してやり取りするのは>>175のやり方以外は知らない
0204デフォルトの名無しさん2016/06/19(日) 19:18:59.12ID:tj+CW6H4
>>202
SAI_FONとおなじことやりたいのならILSPYでSAI_FONの中身見るしかないな
0205デフォルトの名無しさん2016/06/19(日) 19:34:08.47ID:QhmIGAOc
>>197
今はほぼ全ての関数がtry-catchで括ってあって、
実際に何らかの例外が発生したら変数の値とかわからないと追いかけづらいよね!ということに気がついて
もしかして有料版なら今のままでもなんとかなるのかなと思って聞いてみた次第です。

どこでどんな例外が発生しても良いようにするにはやはり変数をtry-catchの外で宣言するのが一番確実のような気がします。
例外が頻発してくれればデバッグはしやすいですけど、
月に1回しか発生しないような例外だと、この例外が発生したからこれを例外設定して・・・ではちょっと大変。
0206デフォルトの名無しさん2016/06/19(日) 19:36:41.05ID:PKwMSI+4
>>204
少なくともC#で作ったものではないんですかねー分からないですが
だってデータ型って用意されたものしか基本使えないですよね。
0207デフォルトの名無しさん2016/06/19(日) 19:41:00.20ID:PKwMSI+4
DataFormats."PNG"と"PNG"は別物??
0208デフォルトの名無しさん2016/06/19(日) 19:42:36.55ID:QhmIGAOc
ん、最初から全部設定すれば良いだけかな?
0209デフォルトの名無しさん2016/06/19(日) 19:52:39.85ID:PKwMSI+4
image.Save(ms, "PNG");これはダメなのな"PNG"じゃなくて
System.Drawing.Imaging.ImageFormat.Pngって書かないとダメw
ややこしすぎるwww
0210デフォルトの名無しさん2016/06/19(日) 20:20:39.57ID:tj+CW6H4
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でビルド)
って書いてあるし
0211デフォルトの名無しさん2016/06/19(日) 20:29:23.36ID:PKwMSI+4
そもそも何でDeviceIndependentBitmapという具体的なデータ型が出てきたのか
分かりませんが試してみます!本当に付き合ってくださって感謝してます!
0212デフォルトの名無しさん2016/06/19(日) 20:35:30.94ID:N0SKT7vZ
>>205
いや別に君がそれでいいと思うなら止めやしないけど

> 月に1回しか発生しないような例外
が発生するまでデバッガで実行させる気?
0213デフォルトの名無しさん2016/06/19(日) 20:38:04.11ID:6taJ36ar
>>212
アタッチ
0214デフォルトの名無しさん2016/06/19(日) 20:49:39.25ID:N0SKT7vZ
>>213
ブレークかけてないのにアタッチしてどうする気?
0215デフォルトの名無しさん2016/06/19(日) 20:49:53.10ID:PKwMSI+4
>>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);
///////////////////////////////////////////////////////////////
0216デフォルトの名無しさん2016/06/19(日) 20:58:05.49ID:tj+CW6H4
>>215
>画像形式としてのBMPがGDIで読み込まれると透過部分無視される構造になっている
これ忘れないように。ペイントは無理
こちらで確認しているのはGIMPと自作ツールだから
SAI_FONはSAIの登録場所確認したり連動させているんだからSAI_FONとSAIのデータのやり取りはクリップボードじゃないはず
0217デフォルトの名無しさん2016/06/19(日) 21:11:37.93ID:PKwMSI+4
>>216
あぁそうか、ちょっと混乱してるので纏めますね
BMPはそもそも透過が無理だ
PNGの場合はアルファチャンネルの情報も送ったらペイントとSAIでは
クリップボードの状態を読み込めない(OFFICEはOK)なんですね…
なのでペイントやSAIでクリップボードから貼り付けるなら
Image型のデータまたはBitmap型のデータをClipboardの引数にしてこの
状態からならどのアプリにも共通なデータ型として変換してくれるから
透明は無視されるけど貼り付けはできるってことですね…
事情が分かっただけでも大収穫です
これはmicrosoftに懇願するしかないですねwアプリ間で透明状態をやり取りするなんて
技術的に簡単なのにAPI使って難しい事しないとできないとか…
そもそもクリップボードなんて滅茶苦茶重要な役割ですよね、デフォルトで1個しか保存できないこと自体おかしい…w
愚痴っちゃってすいません
0218デフォルトの名無しさん2016/06/19(日) 21:17:17.92ID:PKwMSI+4
>SAI_FONはSAIの登録場所確認したり連動させているんだからSAI_FONとSAIのデータのやり取りはクリップボードじゃないはず
あーなるほどそういう事か
ハンドル取得して直接描画させる感じですかね、そうなるとお手上げだw
0219デフォルトの名無しさん2016/06/19(日) 21:28:59.14ID:aUmeBUXf
技術的に簡単と言うならおまえがサクっと実装するだけで終わる話なんだけど。
基本を端折ってどれだけ高度なことをしようとしてるか理解していない。
キミの理解の90%は技術、仕様を誤解したままだ。
0220デフォルトの名無しさん2016/06/19(日) 22:28:58.06ID:PKwMSI+4
難しさがどこらへんにあるか分からない
だって透明情報だってビットマップでこの場所が透明ですよって
そういうのを保存したらいいだけじゃね?とかですね
それをメモリ上に保存することのどこに難しさがあるのか…
こう考えてしまうのは浅はかですか?
0221デフォルトの名無しさん2016/06/19(日) 22:40:32.46ID:3lPnIi6j
interfaceはなんでpublicなの?
internalならもっと使いやすいのに
0222デフォルトの名無しさん2016/06/19(日) 22:53:03.54ID:XSF8wvd9
>>220
難しいって言うか情報が公開されてるかいないかの問題で
情報が公開されてないんだろ?
0223デフォルトの名無しさん2016/06/19(日) 23:09:33.38ID:pXg+pklT
internalを使ったことないんだが、あれメリットあるのか?
0224デフォルトの名無しさん2016/06/19(日) 23:15:36.21ID:qvkTbkKV
>>221
?
internal interface でいいだろ
0225デフォルトの名無しさん2016/06/19(日) 23:18:50.43ID:PKwMSI+4
そのアプリ内では透明度保存できるけど、アプリを超えると透明度保存ができない
そしてその仕組みは公開されていない!!!

これって公開鍵暗号に似てません?www
0226デフォルトの名無しさん2016/06/19(日) 23:25:56.26ID:aUmeBUXf
外に公開するものをinterfaceと言うのだ。
02272102016/06/19(日) 23:58:28.97ID:tj+CW6H4
>>215は14バイト目以降を移していないし画像ファイルを直接DeviceIndependentBitmapとしてコピーするコード
http://ideone.com/fyeqXQ
ビルドして画像ファイルをドロップするとDeviceIndependentBitmapとしてコピー
0228デフォルトの名無しさん2016/06/20(月) 06:46:58.86ID:A8kl/PgB
> これって公開鍵暗号に似てません?www
似てないし何が面白いのかもさっぱりわからん
0229デフォルトの名無しさん2016/06/20(月) 07:42:42.33ID:8+wUFNFJ
仕組みは公開されてるしな。
0230デフォルトの名無しさん2016/06/20(月) 08:02:12.18ID:MOJTeKy8
>>191
パラメータをログに吐く仕組みを作ればいいよ
ログに吐かれたデータからユニットテストを書いて直して終わり
0231ツールクリエイター ◆RK.FSYZiFD1j 2016/06/20(月) 10:38:33.39ID:VbKImTWd
>>227
かなり複雑なコードですね!ちょっと理解するのに時間がかかるので今日の夕方まで待ってください!
わざわざすいません。args[]とかちょっと初めて見ましたww
0232デフォルトの名無しさん2016/06/20(月) 15:51:12.52ID:Vvo6itZJ
まさか一番基本の最初のHello Worldまで端折ってるとは。
0233デフォルトの名無しさん2016/06/20(月) 17:45:16.00ID:bEvQuIcU
int型ってプリミティブ型なのに、toStringメソッドが使えるのは何故ですか?
javaならラップクラスにしないとこんなこと出来ないはず。何故でしょう?
0234デフォルトの名無しさん2016/06/20(月) 17:57:26.35ID:Vvo6itZJ
Boxing and Unboxing
https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
0235デフォルトの名無しさん2016/06/20(月) 18:08:33.52ID:N0uD9uvA
Javaのintはobjectから派生してない。
C#のintはobjectから派生してる。
0236デフォルトの名無しさん2016/06/20(月) 18:08:36.30ID:tys3WiX6
C#が凄いから
0237ツールクリエイター ◆RK.FSYZiFD1j 2016/06/20(月) 18:53:32.03ID:Gi8PdViF
>>227
すいません、やはり理解できません。
理解できないところを纏めたので基礎から勉強します。

�@ビットマップはx×yの大きさなのに必要な変数が異常に多い
 lenやらlxやらpやcなど、ビット計算されてるcは意味が分からない
�A何故(((Image)bm).PixelFormatのようにキャストありと
 bm.PixelFormatなしがあるのか?キャストがいるなら後者もいるんでは?
�Bかなり根本的な問題ですが、何故一端メモリストリームに格納する必要があるのか?
 メモリストリームをいじらなければデフォルトで設定されるから?
�CByteという変数を使ういみ。int型ではダメなのか?
�D何故IDataObjectインターフェースを使うのか、SetDataで引数3つならDataObjectで作ればいいのでは
�Etry〜catch構文を使う理由、これは好みか?

などなど疑問が多くて逆に勉強しがいがあると思っています。
かなり時間がかかりますが解読させて下さい。
0238デフォルトの名無しさん2016/06/20(月) 19:31:50.15ID:ZcaP1ukc
http://www.shuwasystem.co.jp/support/7980html/4551.html


csvファイルの扱いを覚えたくて、上のサイトのサンプル(Chapter9)を見ながらやっているのですが、
LoadDataメソッドにある、moneyDataSetのmoneyDataTableに下波線が出ていて使えません。
これはどうすれば解決しますでしょうか?

ちなみにサンプルのデザインにあるmoneyDataSetを別のプロジェクトにコピペできませんでした。
ボタン等はできるのになぜなんでしょうか?
分かる方いましたら、よろしくお願いします。
02392272016/06/20(月) 19:40:16.67ID:Fm5evlwS
>>237
申し訳ないけどそのコードはビルドして動くけど間違いだらけで中身見るだけ無駄w
特に24ビットカラーか32ビットカラー以外の画像ファイルを使うとクリップボードに壊れたデータが書き込まれてしまう
�A�D�E あまり考えずに書いているから深い意味はない。((Image)bm).PixelFormatはbm.PixelFormatで問題ない
�C意味がわからない
�@BMPフォーマットの知識が必要。cはパディング
�B"DeviceIndependentBitmap"はブラウザとか他で作られたものでもデータの形式はSystem.IO.MemoryStream

レスの要点は
・透過付きの画像をクリップボードにBitmapとしてコピーすると色化けするか透過部分が無視される
・C#で"DeviceIndependentBitmap"として透過付きの画像をクリップボードとやりとりできる
・"DeviceIndependentBitmap"はBMPフォーマット形式からBITMAPFILEHEADERの14バイトを外したバイト配列をMemoryStreamに書き込むことで作れる

こっちも初心者だから全部説明できる自信もないし,、ここでやると他の人の邪魔になるので悪いけどここまで
0240デフォルトの名無しさん2016/06/20(月) 19:43:39.26ID:Vvo6itZJ
意地でも基本のC#入門、チュートリアルの類を一切読まずににコードを書く気のゆとり馬鹿は無視したほうがいいだろう。
0241デフォルトの名無しさん2016/06/20(月) 19:54:18.07ID:Gi8PdViF
いやC#の入門書は読まなくていいと思ってます。
だって本屋で索引から調べてもDataObject型とかMemoryStream型とか載ってませんでしたし。
こういうのって応用的な使い方だから書籍見ても無駄なのではないでしょうか。
だからネット中心に調べてますよ。
0242デフォルトの名無しさん2016/06/20(月) 19:54:47.38ID:2W2DbIcv
>>237は教えてよって意味じゃなくて、こういうこと勉強して出直してくるって意味じゃないのか?
0243デフォルトの名無しさん2016/06/20(月) 19:55:51.72ID:Vvo6itZJ
ならいちいち基本的なことを質問するなって話だな。ググレカス。
0244デフォルトの名無しさん2016/06/20(月) 20:00:22.48ID:Gi8PdViF
>>242
そうですね。纏めただけなんで今から勉強します。
0245デフォルトの名無しさん2016/06/20(月) 20:09:13.58ID:6mpJGPIZ
一応でてるけど1000ページ超で翻訳できないっていうオチなんだよね
儲からない以上は出版されない、仮に$50の本が1万円で発売されても酷評されて終わりでしょ
0246デフォルトの名無しさん2016/06/20(月) 20:18:51.12ID:Vvo6itZJ
全部MSのヘルプ、リファレンスに書いてる。そんなものいちいち入門書に載せるな。
入門書とはリファレンスや他人のソースやを読める知識のない ID:Gi8PdViF みたいな馬鹿が読むものだ。
九九や四則演算は覚えなくていいと思ってる。だけど微積分や三角関数で計算したい、
だがどうやってやるのか理解できないみたいなこと言ってる馬鹿に何を説明しても無駄だ。
0247デフォルトの名無しさん2016/06/20(月) 20:21:30.00ID:p6+rLIxN
なんかここの雰囲気がmsdnフォーラムに似てきたな。初心者の質問に対して質問の仕方が悪いと説教するアホがいる。
0248デフォルトの名無しさん2016/06/20(月) 20:25:50.43ID:Gi8PdViF
>>246
とりあずマイクロソフトの関数全部(8割くらいは覚えたい)覚えますわ
話はそこからですよね
0249デフォルトの名無しさん2016/06/20(月) 20:39:38.35ID:Vvo6itZJ
>>247
散々質問しといて自ら基礎や基本は知らなくていいと主張する初心者なんかmsdn forums にいねーよ、馬鹿。
しかも全然反省してない >>248 意地でも基本はやらない気らしい。基本やればおまえの疑問の9割は解決するのに。

>�CByteという変数を使ういみ。int型ではダメなのか?

>いやC#の入門書は読まなくていいと思ってます。

なんやねんこいつ。人を馬鹿にしすぎ。
0250デフォルトの名無しさん2016/06/20(月) 20:41:25.49ID:E+iwf+wd
>>246
MSDNすら読めないアホが多いから載せざるを得ないんだよ
0251デフォルトの名無しさん2016/06/20(月) 21:00:51.63ID:Gi8PdViF
>>249
基本文法(デリゲート、ラムダ式、ジェネリクス)も習得してますよ
ただMemoryStreamとIDataObjectは本には基本レベルでも載ってないから
難しい事するなら入門書はいらないかなって思いますね
0252デフォルトの名無しさん2016/06/20(月) 21:04:42.36ID:Gi8PdViF
Byteはちょっと機械語扱う勝手なイメージがあってどきっとするんですよね
恐らく色の値が0〜255の間にあるからByteがちょうどいいと思うんですけど
まぁでも基本的な事も抜けてるかもしれないので立ち返ってみますね
■ このスレッドは過去ログ倉庫に格納されています