「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part136
http://mevius.5ch.net/test/read.cgi/tech/1520057345/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part137
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ドコグロ MM07-2FKJ)
2018/04/06(金) 17:40:19.48ID:oKXVP34zM327デフォルトの名無しさん (スフッ Sdaa-xC2/)
2018/05/04(金) 17:22:00.73ID:0gwAiFk4d328デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/04(金) 19:43:22.77ID:RYlEGIXb0 グラフィックの扱いについて教えてください
panelに複数の画像イメージを貼り付けたいと思います
(トランプのカードを任意の枚数置くような感じです)
WidthとHeightをpanelのサイズに合わせて、Bitmapオブジェクトを
作ってそこに必要な画像を貼り付けて、最後にPaintイベントでその
ビットマップを Graphics.DrawImage で表示すれば良さそうだ、という
認識です
問題はBitmapオブジェクトに画像を貼り付けることで、メソッドを
調べても、Bitmapオブジェクトの任意の場所に任意のイメージを
貼り付けるものはなさそうです
そもそも用意した画像は Image.FromFile で準備しているのですが、
Imageオブジェクトを貼り付けられるのは Graphics.DrawImage
メソッドになるので、そもそも Bitmap オブジェクトを用意すると
いう発想が間違っているような気もします
多分いろいろ間違って認識しているので、どこから考え直せばよいか
教えていただけると嬉しいです
panelに複数の画像イメージを貼り付けたいと思います
(トランプのカードを任意の枚数置くような感じです)
WidthとHeightをpanelのサイズに合わせて、Bitmapオブジェクトを
作ってそこに必要な画像を貼り付けて、最後にPaintイベントでその
ビットマップを Graphics.DrawImage で表示すれば良さそうだ、という
認識です
問題はBitmapオブジェクトに画像を貼り付けることで、メソッドを
調べても、Bitmapオブジェクトの任意の場所に任意のイメージを
貼り付けるものはなさそうです
そもそも用意した画像は Image.FromFile で準備しているのですが、
Imageオブジェクトを貼り付けられるのは Graphics.DrawImage
メソッドになるので、そもそも Bitmap オブジェクトを用意すると
いう発想が間違っているような気もします
多分いろいろ間違って認識しているので、どこから考え直せばよいか
教えていただけると嬉しいです
329デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/04(金) 19:54:32.04ID:EvkA5vHv0 >>328
ベースの画像のいくつかの任意の位置に画像を貼り付ける描画ならそれで間違っていないけど
https://msdn.microsoft.com/ja-jp/library/system.drawing.graphics.drawimage(v=vs.110).aspx
https://msdn.microsoft.com/ja-jp/library/558kfzex(v=vs.110).aspx
どこを勘違いして悩んでいるのかいまいちわからない
とりあえずBitmap オブジェクトはImageオブジェクトの一種
他にMetaFileとかあるから
そしてGraphics.DrawImageメソッドを使って貼り付けてもベースのBitmap オブジェクトはBitmap オブジェクトのまま
ベースの画像のいくつかの任意の位置に画像を貼り付ける描画ならそれで間違っていないけど
https://msdn.microsoft.com/ja-jp/library/system.drawing.graphics.drawimage(v=vs.110).aspx
https://msdn.microsoft.com/ja-jp/library/558kfzex(v=vs.110).aspx
どこを勘違いして悩んでいるのかいまいちわからない
とりあえずBitmap オブジェクトはImageオブジェクトの一種
他にMetaFileとかあるから
そしてGraphics.DrawImageメソッドを使って貼り付けてもベースのBitmap オブジェクトはBitmap オブジェクトのまま
330デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/04(金) 20:25:52.55ID:RYlEGIXb0 >>329
私の認識は、最終的に描画したいビットマップを用意して、それを Paint イベントで
描画するというものです
Panel1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(canvas, 0, 0);
}
で、上記の例で Bitmap canvas; とでもして用意したビットマップに、任意の画像を
貼り付ける方法を知りたいのです
例えば256x256ピクセルのサイズで用意したビットマップに、32x32ピクセルの
画像を3個位貼り付けた canvas を用意したいというものです
「そうではなくて、最終的に描画したいものはGraphicsオブジェクトで用意して、
Paintイベントで毎回描画するのだ」というのが正なのかもしれません
Panel1_Paint(省略) {
e.Graphics.DrawImage(image_1, image_1_x, image_1_y);
e.Graphics.DrawImage(image_2, image_2_x, image_2_y);
...
}
といった感じで
でもなんだか、毎回Paintイベントハンドラに描画処理を全部書くのは変な感じがして、
描画したい画像を用意するのと、実際に描画するのは別の処理ではないかと思っている
次第です
私の認識は、最終的に描画したいビットマップを用意して、それを Paint イベントで
描画するというものです
Panel1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(canvas, 0, 0);
}
で、上記の例で Bitmap canvas; とでもして用意したビットマップに、任意の画像を
貼り付ける方法を知りたいのです
例えば256x256ピクセルのサイズで用意したビットマップに、32x32ピクセルの
画像を3個位貼り付けた canvas を用意したいというものです
「そうではなくて、最終的に描画したいものはGraphicsオブジェクトで用意して、
Paintイベントで毎回描画するのだ」というのが正なのかもしれません
Panel1_Paint(省略) {
e.Graphics.DrawImage(image_1, image_1_x, image_1_y);
e.Graphics.DrawImage(image_2, image_2_x, image_2_y);
...
}
といった感じで
でもなんだか、毎回Paintイベントハンドラに描画処理を全部書くのは変な感じがして、
描画したい画像を用意するのと、実際に描画するのは別の処理ではないかと思っている
次第です
331デフォルトの名無しさん (ワッチョイ bbb5-MrO9)
2018/05/04(金) 20:30:54.11ID:Ad2tmUBO0 描画したい画像を用意するのと、それを描画するのは当然別の処理だ。
でもアニメーションさせたいとか画像の変更を即座に描画に反映させたいとかなら、用意した足で再描画させるしかないだろ?
でもアニメーションさせたいとか画像の変更を即座に描画に反映させたいとかなら、用意した足で再描画させるしかないだろ?
332デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/04(金) 20:36:30.50ID:EvkA5vHv0 >>330
何でイベントでやるのか知らないけど複数の描画を同時にやるメソッドはなかったと思うよ
https://dobon.net/vb/dotnet/graphics/index.html
Bitmap canvas=new Bitmap(x,y);
Graphics g = Graphics.FromImage(canvas);
Graphics.DrawImage(image_1, image_1_x, image_1_y);
Graphics.DrawImage(image_2, image_2_x, image_2_y);
何でイベントでやるのか知らないけど複数の描画を同時にやるメソッドはなかったと思うよ
https://dobon.net/vb/dotnet/graphics/index.html
Bitmap canvas=new Bitmap(x,y);
Graphics g = Graphics.FromImage(canvas);
Graphics.DrawImage(image_1, image_1_x, image_1_y);
Graphics.DrawImage(image_2, image_2_x, image_2_y);
333デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/04(金) 20:38:50.67ID:EvkA5vHv0 あ、ごめん
Graphics g = Graphics.FromImage(canvas);
g.DrawImage(image_1, image_1_x, image_1_y);
g.DrawImage(image_2, image_2_x, image_2_y);
だった
Graphics g = Graphics.FromImage(canvas);
g.DrawImage(image_1, image_1_x, image_1_y);
g.DrawImage(image_2, image_2_x, image_2_y);
だった
334デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/04(金) 20:49:55.24ID:RYlEGIXb0 >>331
アニメーションさせたいとか、そういう意図はないです
単に、描画したい画像を用意するのに、Bitmapオブジェクトにさらに画像を
貼り付ける方法がわからなくて悩んでいます
>>332
イベントでやってるのは、単に参考にしたサイトで「Paintイベントハンドラで
処理する」と書いてあったので、それを鵜呑みにしただけです
https://dobon.net/vb/dotnet/graphics/drawimage.html
これを見て気づきましたが、そもそもパネルに直接描こうとするのが間違いで、
パネルにPictureBoxを貼り付けた上でそこに置けば良いのかな?
アニメーションさせたいとか、そういう意図はないです
単に、描画したい画像を用意するのに、Bitmapオブジェクトにさらに画像を
貼り付ける方法がわからなくて悩んでいます
>>332
イベントでやってるのは、単に参考にしたサイトで「Paintイベントハンドラで
処理する」と書いてあったので、それを鵜呑みにしただけです
https://dobon.net/vb/dotnet/graphics/drawimage.html
これを見て気づきましたが、そもそもパネルに直接描こうとするのが間違いで、
パネルにPictureBoxを貼り付けた上でそこに置けば良いのかな?
335デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/04(金) 20:54:32.05ID:EvkA5vHv0 >>334
どっちでも同じだと思う
Graphics g = Graphics.FromImage(panel1.BackGroundImage);
でやれば直接パネルに書き込めるし
ただ大きい画像を表示して画像の表示位置をスクロールさせたいのならパネルの上にPictureBoxが基本
とりあえず書いて動かしてみたら
どっちでも同じだと思う
Graphics g = Graphics.FromImage(panel1.BackGroundImage);
でやれば直接パネルに書き込めるし
ただ大きい画像を表示して画像の表示位置をスクロールさせたいのならパネルの上にPictureBoxが基本
とりあえず書いて動かしてみたら
336デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/04(金) 21:05:17.61ID:aP3h8uSia337デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/04(金) 21:11:39.38ID:RYlEGIXb0 >>336
実現したいことは、「任意の画像を任意の場所に配置したイメージを、panelに描画したい」です
これは明確で、それを実装するための方法でどう悩んでいるかが正しく伝わらないと、答える方も
こちらのレベルがわからなくて困るかと思ってました
実現したいことがちゃんと伝わっていませんでしたか
それ以前の問題でしたね。。。
実現したいことは、「任意の画像を任意の場所に配置したイメージを、panelに描画したい」です
これは明確で、それを実装するための方法でどう悩んでいるかが正しく伝わらないと、答える方も
こちらのレベルがわからなくて困るかと思ってました
実現したいことがちゃんと伝わっていませんでしたか
それ以前の問題でしたね。。。
338デフォルトの名無しさん (ササクッテロラ Sp23-MrO9)
2018/05/04(金) 21:43:04.80ID:pJ6Zbbxdp ファイル読んでバインドするだけちゃうのか?
339デフォルトの名無しさん (ワッチョイ 1fe3-jSAq)
2018/05/04(金) 22:52:54.89ID:IMcj9GIN0 >>337
dobon.netにあるじゃん
dobon.netにあるじゃん
340デフォルトの名無しさん (ワッチョイ 1ee8-XJxX)
2018/05/05(土) 01:53:47.84ID:US1Viqbq0 bmp1が配置先のイメージ、
bmp2がbmp1に配置したいイメージだとしたら以下になる
Graphics g = Graphics.FromImage(bmp1);
g.DrawImage(bmp2, x, y); // bmp1の(x, y)にbmp2を書き込む
g.Dispose();
pictureBox1.Image = bmp1;
これだけでパネルにbmp1が表示される
bmp2がbmp1に配置したいイメージだとしたら以下になる
Graphics g = Graphics.FromImage(bmp1);
g.DrawImage(bmp2, x, y); // bmp1の(x, y)にbmp2を書き込む
g.Dispose();
pictureBox1.Image = bmp1;
これだけでパネルにbmp1が表示される
341デフォルトの名無しさん (ワッチョイ 1ee8-XJxX)
2018/05/05(土) 01:54:36.93ID:US1Viqbq0 あ、パネルにPictureBox貼ってる前提ね
342デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/05(土) 05:38:36.94ID:LRJiKh0v0 >>340
ありがとうございます
思っていることが問題なく実現できました
できるようになってみると、一体何を悩んでいたのか、自分でもわからなくなってしまいました
多分、DrawImage で書き込む先がVRAMだと思い込んでいたのでしょう
ありがとうございます
思っていることが問題なく実現できました
できるようになってみると、一体何を悩んでいたのか、自分でもわからなくなってしまいました
多分、DrawImage で書き込む先がVRAMだと思い込んでいたのでしょう
343デフォルトの名無しさん (ワッチョイ bf9e-DJjQ)
2018/05/06(日) 01:21:02.23ID:dl2mQyCb0 private void Form1_ResizeBegin(object sender, EventArgs e)
{
leftEdge = this.Left;
rightEdge = this.Right;
topEdge = this.Top;
bottomEdge = this.Bottom;
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
if ((rightEdge < this.Right) && (topEdge > this.Top))
{
// 処理に入らない
}
}
このコードでフォームを右上にドラッグして拡大した場合に処理に入らないのですがどこがおかしいでしょうか
{
leftEdge = this.Left;
rightEdge = this.Right;
topEdge = this.Top;
bottomEdge = this.Bottom;
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
if ((rightEdge < this.Right) && (topEdge > this.Top))
{
// 処理に入らない
}
}
このコードでフォームを右上にドラッグして拡大した場合に処理に入らないのですがどこがおかしいでしょうか
344デフォルトの名無しさん (ワッチョイ abd2-7y2u)
2018/05/06(日) 01:31:51.93ID:HfMj07lt0 右上にってことは事後の方が top の値が小さくなってるからじゃないの?
345デフォルトの名無しさん (ワッチョイ abd2-7y2u)
2018/05/06(日) 01:32:20.44ID:HfMj07lt0 ああ、そう書いてあるのか。失礼。
346デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/06(日) 01:40:54.74ID:LGFxrhOP0 >>343
イベント有効になっている?
Form1_ResizeEndのメソッドに処理が入っているかそこから確認
int leftEdge, rightEdge,topEdge ,bottomEdge;
public Form1()
{
InitializeComponent();
this.ResizeBegin += Form1_ResizeBegin;
this.ResizeEnd += Form1_ResizeEnd;
}
private void Form1_ResizeBegin(object sender, EventArgs e)
{
this.Text = "start";
leftEdge = this.Left;
rightEdge = this.Right;
topEdge = this.Top;
bottomEdge = this.Bottom;
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
this.Text = String.Format("{0}:{1}", (rightEdge < this.Right), (topEdge > this.Top));
if ((rightEdge < this.Right) && (topEdge > this.Top))
{
this.Text = "OK";
}
}
これで動いた
イベント有効になっている?
Form1_ResizeEndのメソッドに処理が入っているかそこから確認
int leftEdge, rightEdge,topEdge ,bottomEdge;
public Form1()
{
InitializeComponent();
this.ResizeBegin += Form1_ResizeBegin;
this.ResizeEnd += Form1_ResizeEnd;
}
private void Form1_ResizeBegin(object sender, EventArgs e)
{
this.Text = "start";
leftEdge = this.Left;
rightEdge = this.Right;
topEdge = this.Top;
bottomEdge = this.Bottom;
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
this.Text = String.Format("{0}:{1}", (rightEdge < this.Right), (topEdge > this.Top));
if ((rightEdge < this.Right) && (topEdge > this.Top))
{
this.Text = "OK";
}
}
これで動いた
347デフォルトの名無しさん (ワッチョイ 7bd6-pRpi)
2018/05/06(日) 01:45:28.35ID:mBsERy4z0 private void DataGridViewFilter()
{
BindingSource objBind;
DataTable objData;
string strFilter;
objData = (DataTable)DataGridView1.DataSource;
if (IsNothing(objData) == false)
{
objBind = new BindingSource();
objBind.DataSource = objData;
strFilter = "Color like '%" + txt_Condition.Text + "%'";
objBind.Filter = strFilter;
}
}
{
BindingSource objBind;
DataTable objData;
string strFilter;
objData = (DataTable)DataGridView1.DataSource;
if (IsNothing(objData) == false)
{
objBind = new BindingSource();
objBind.DataSource = objData;
strFilter = "Color like '%" + txt_Condition.Text + "%'";
objBind.Filter = strFilter;
}
}
348デフォルトの名無しさん (ワッチョイ bf9e-DJjQ)
2018/05/06(日) 02:05:39.13ID:dl2mQyCb0 >>346
ご回答ありがとうございます
イベントは有効です
左や上や左上への拡大縮小ドラッグは正常なのですが左下や右上がおかしいです
提供していただいたコードを試したのですが、何故かは分からないのですが rightEdge < this.Right がfalseになっています
もう少し調べてみます
ご回答ありがとうございます
イベントは有効です
左や上や左上への拡大縮小ドラッグは正常なのですが左下や右上がおかしいです
提供していただいたコードを試したのですが、何故かは分からないのですが rightEdge < this.Right がfalseになっています
もう少し調べてみます
349デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/06(日) 02:22:41.56ID:xovvhFEya 申し訳ないけど、問題を再現できるそのまんまのコードを提示していない時点で
確実に原因はあなたの勘違いにあると断言できる
確実に原因はあなたの勘違いにあると断言できる
350デフォルトの名無しさん (ワッチョイ 8a98-XJxX)
2018/05/06(日) 05:58:39.10ID:CBGkbUql0 Listを値渡しすべき所が参照渡しになってたせいで
くっそハマったんだけど
こういうのって、C#の解説本1冊読めば
注意しろって書いてあるもんなの?
参照渡し云々って単語はかろうじて知ってて
↓のサイトをたまたま見つけて、偶然解決出来たけど
https://webbibouroku.com/Blog/Article/list-copy
エラーや例外にならないバグが怖すぎる・・・
くっそハマったんだけど
こういうのって、C#の解説本1冊読めば
注意しろって書いてあるもんなの?
参照渡し云々って単語はかろうじて知ってて
↓のサイトをたまたま見つけて、偶然解決出来たけど
https://webbibouroku.com/Blog/Article/list-copy
エラーや例外にならないバグが怖すぎる・・・
351デフォルトの名無しさん (ワッチョイ 0a1e-lX4z)
2018/05/06(日) 06:08:47.32ID:994JP5I00 そんなものここで聞けば3秒で解決するし
352デフォルトの名無しさん (ワッチョイ 1fe3-jSAq)
2018/05/06(日) 08:39:03.59ID:j24ysXtO0 c#って物体X(?)は全部参照渡しになるよね
353デフォルトの名無しさん (ワッチョイ faa1-XFQU)
2018/05/06(日) 08:48:15.69ID:6gN3mvyQ0 >>350
それ値渡しじゃない
それ値渡しじゃない
354デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 09:09:18.32ID:9GXSG5IC0 イメージの配置はできるようになりましたが、いろいろ触っていると、チラツキが
気になるようになってきました
テストしてみたところ、下記のレベルでもチラツキが発生します
private void timer1_Tick(object sender, EventArgs e)
{
Graphics g = Graphics.FromImage(canvas);
g.FillEllipse(bg_brush, x, y, radius, radius);
x += 5;
g.FillEllipse(fg_brush, x, y, radius, radius);
count++;
g.Dispose();
pictureBox1.Image = canvas;
if (count == 10)
{
count = 0;
timer1.Stop();
}
}
timer1.Intervalは100msにしてあります
チラつきを押さえるには、フォームの DoubleBufferd を true にすると良いと見ましたが、
true にしても false にしても変わりないようです
そもそも PictureBox は内部処理でダブルバッファリングを行っているとも見ました
まだなにかできることはあるのでしょうか
気になるようになってきました
テストしてみたところ、下記のレベルでもチラツキが発生します
private void timer1_Tick(object sender, EventArgs e)
{
Graphics g = Graphics.FromImage(canvas);
g.FillEllipse(bg_brush, x, y, radius, radius);
x += 5;
g.FillEllipse(fg_brush, x, y, radius, radius);
count++;
g.Dispose();
pictureBox1.Image = canvas;
if (count == 10)
{
count = 0;
timer1.Stop();
}
}
timer1.Intervalは100msにしてあります
チラつきを押さえるには、フォームの DoubleBufferd を true にすると良いと見ましたが、
true にしても false にしても変わりないようです
そもそも PictureBox は内部処理でダブルバッファリングを行っているとも見ました
まだなにかできることはあるのでしょうか
355デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 09:36:21.79ID:9GXSG5IC0 書いてませんでしたが、bg_brushは背景色の、fg_brushは前景色のブラシです
Brush bg_brush = new SolidBrush(SystemColors.Control);
Brush fg_brush = new SolidBrush(Color.Black);
で定義しています
Brush bg_brush = new SolidBrush(SystemColors.Control);
Brush fg_brush = new SolidBrush(Color.Black);
で定義しています
356デフォルトの名無しさん (ワッチョイ 1ee8-XJxX)
2018/05/06(日) 09:54:38.21ID:RTzVBomo0 canvasはどんな風に設定しているの?
357デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 10:06:54.11ID:9GXSG5IC0 canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
として定義しています
として定義しています
358デフォルトの名無しさん (ワッチョイ 1ee8-XJxX)
2018/05/06(日) 10:36:38.03ID:RTzVBomo0 DoubleBufferdとか触らずともこっちではちらつかないけどなあ
ちらつくってのはどういうふうに見えることを言ってるの?
panelやpictureBoxのサイズやradiusの値もさらしてみては?
ちらつくってのはどういうふうに見えることを言ってるの?
panelやpictureBoxのサイズやradiusの値もさらしてみては?
359デフォルトの名無しさん (ワッチョイ 7fd3-jSUp)
2018/05/06(日) 10:50:11.40ID:IbwjU9Qn0 どこで何やってんの不明瞭だから当てずっぽうだが
下手に自前描画してるチラつくなら大体OnPaintBackgroundのせい
下手に自前描画してるチラつくなら大体OnPaintBackgroundのせい
360デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 10:55:03.54ID:9GXSG5IC0 https://ideone.com/s4ddqO
これが全コードです
空のWindowsフォームアプリケーションで生成されたフォームに、ボタンとパネル、
PictureBoxを配置しただけの状態です
パネルとPictureBoxは、DockをFillにしてウィンドウサイズに合わせてあります
これが全コードです
空のWindowsフォームアプリケーションで生成されたフォームに、ボタンとパネル、
PictureBoxを配置しただけの状態です
パネルとPictureBoxは、DockをFillにしてウィンドウサイズに合わせてあります
361デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 10:56:51.16ID:9GXSG5IC0 これで、timer1のIntervalを50msにすると、はっきり分かる程度にちらつきます
362デフォルトの名無しさん (ワッチョイ bbb5-MrO9)
2018/05/06(日) 13:14:55.43ID:gzoDeGmX0 垂直同期しろ。
363デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/06(日) 13:31:21.62ID:o/aLqSU5a364デフォルトの名無しさん (アウアウウー Sacf-pRpi)
2018/05/06(日) 15:35:36.42ID:MOQB+J+Ha 解決のヒントにはならないだろうけど
ちらつきって何かということについて
すでに表示されてるものが一瞬透明に見えるから表示がおかしく見えること
たとえば半径100の円が横に5ドット動くとする
普通に考えたらほとんどの円に背景は隠れたままだけど何も考えないで適当にやると
背景が一瞬見えてしまう
一度円を消してなにもない状態を表示して
次に円を書いてるから問題がある
何もない状態を表示しなければいい
ちらつきって何かということについて
すでに表示されてるものが一瞬透明に見えるから表示がおかしく見えること
たとえば半径100の円が横に5ドット動くとする
普通に考えたらほとんどの円に背景は隠れたままだけど何も考えないで適当にやると
背景が一瞬見えてしまう
一度円を消してなにもない状態を表示して
次に円を書いてるから問題がある
何もない状態を表示しなければいい
365デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 18:19:28.93ID:9GXSG5IC0366デフォルトの名無しさん (ワッチョイ bbb5-MrO9)
2018/05/06(日) 18:22:22.08ID:gzoDeGmX0 だからハードの違いだって言ってんだろw
367デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/06(日) 18:25:15.44ID:w10wIaHya368デフォルトの名無しさん (ワッチョイ bbb5-MrO9)
2018/05/06(日) 18:30:35.56ID:gzoDeGmX0 アホばっかり。
369デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 18:55:10.27ID:9GXSG5IC0 >>367
カクカクした動きとチラつきを同一視しているわけではありません
>>364
が書いたように、今回の例だと黒い円が一瞬消えているような感じがします
移動量の x += 10; をもっと少なくすれば目立たなくなりますが、それでも
なんとなく嫌な感じがします
でも言葉で説明するのは難しいですね
低フレームレートの認識を誤解していたようですが、インターバルを100msとか
50msとかだとディスプレイのリフレッシュレート(あるいは人間の認識力)に比べて
低すぎるので、かえって目立ってしまうということでしょうか?
確かに、インターバルを思い切って5msとかにしてみると、チラつきは軽減されてきた
気がします
カクカクした動きとチラつきを同一視しているわけではありません
>>364
が書いたように、今回の例だと黒い円が一瞬消えているような感じがします
移動量の x += 10; をもっと少なくすれば目立たなくなりますが、それでも
なんとなく嫌な感じがします
でも言葉で説明するのは難しいですね
低フレームレートの認識を誤解していたようですが、インターバルを100msとか
50msとかだとディスプレイのリフレッシュレート(あるいは人間の認識力)に比べて
低すぎるので、かえって目立ってしまうということでしょうか?
確かに、インターバルを思い切って5msとかにしてみると、チラつきは軽減されてきた
気がします
370デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/06(日) 19:33:59.43ID:7/UIZFPx0 ちょっと改変して逆にチラツキをわかるようにしてみた
https://ideone.com/3X8oJh
WinFormプロジェクトを新規で作って元のソースを全部消したうえで、このソースを既存の項目として追加
上がPictureBoxで下がPanel
>>369
PictureBoxのダブルバッファがデフォルトで有効なのは知っているのを確認したので
その上でPanelはデフォルトでダブルバッファが有効だというのを念頭に入れてコードを実行してほしい
同じオブジェクトの動きだが、うちで確認する限りは下はあきらかにチラツキがあって上は目立たない
>>364
>何もない状態を表示しなければいい
というわけで先に描画して動いた部分だけを消すという動作を実現してみたつもり
だったんだけど、移動量を大きくするとカクツキがどうしても目立ってしまってうまくいかない。ギブアップw
>>369
もっとGDI+の動作を把握するとかゲームなどでの実装方法を探すかした方がいいと思う
残念ながら俺の知識ではここまで
https://ideone.com/3X8oJh
WinFormプロジェクトを新規で作って元のソースを全部消したうえで、このソースを既存の項目として追加
上がPictureBoxで下がPanel
>>369
PictureBoxのダブルバッファがデフォルトで有効なのは知っているのを確認したので
その上でPanelはデフォルトでダブルバッファが有効だというのを念頭に入れてコードを実行してほしい
同じオブジェクトの動きだが、うちで確認する限りは下はあきらかにチラツキがあって上は目立たない
>>364
>何もない状態を表示しなければいい
というわけで先に描画して動いた部分だけを消すという動作を実現してみたつもり
だったんだけど、移動量を大きくするとカクツキがどうしても目立ってしまってうまくいかない。ギブアップw
>>369
もっとGDI+の動作を把握するとかゲームなどでの実装方法を探すかした方がいいと思う
残念ながら俺の知識ではここまで
371>>370 (ワッチョイ 1e9a-XJxX)
2018/05/06(日) 19:37:36.72ID:7/UIZFPx0 ごめん
>Panelはデフォルトでダブルバッファが有効だというのを念頭に入れて
Panelはデフォルトでダブルバッファが無効だというのを念頭に入れて
の間違い
>Panelはデフォルトでダブルバッファが有効だというのを念頭に入れて
Panelはデフォルトでダブルバッファが無効だというのを念頭に入れて
の間違い
372デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/06(日) 20:17:55.74ID:LW3/RgRJa うーんw
>>360のコード自体がダブルバッファリングの実装なので、
少なくともGDI+を使う限り、これで本当にちらつくなら何をやってもちらつき回避は不可能。
何度も言うけど、少なくとも俺の環境では低フレームレート特有の不自然さはあっても
フリッカーは確認できない
しつこいようだけど、俺は質問者がちらつき(フリッカー)がどういう現象か
理解してないだけのように思う
>>360のコード自体がダブルバッファリングの実装なので、
少なくともGDI+を使う限り、これで本当にちらつくなら何をやってもちらつき回避は不可能。
何度も言うけど、少なくとも俺の環境では低フレームレート特有の不自然さはあっても
フリッカーは確認できない
しつこいようだけど、俺は質問者がちらつき(フリッカー)がどういう現象か
理解してないだけのように思う
373デフォルトの名無しさん (ワッチョイ 1fe3-jSAq)
2018/05/06(日) 20:20:58.90ID:j24ysXtO0 まあ、unity使ってもDirectX使ってもスクロールとかなめらかにならないしね
グラボも汚いってのも考慮に入れる
市販のゲームでもスクロールしてるときはカクカクグシャグシャはデフォ
グラボも汚いってのも考慮に入れる
市販のゲームでもスクロールしてるときはカクカクグシャグシャはデフォ
374デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 20:21:41.45ID:9GXSG5IC0 >>370
ありがとうございます
私が確認しても、確かに上下で明らかにチラつきが違い、下ははっきりとわかります
上はほとんどわからないレベルですね
PictureBoxもPanelも、どちらも出来上がったビットマップを貼り付けているのですから
同じ表示になりそうな気がしますが違いますね
これをちゃんと理解できれば解決できそうです
ありがとうございます
私が確認しても、確かに上下で明らかにチラつきが違い、下ははっきりとわかります
上はほとんどわからないレベルですね
PictureBoxもPanelも、どちらも出来上がったビットマップを貼り付けているのですから
同じ表示になりそうな気がしますが違いますね
これをちゃんと理解できれば解決できそうです
375デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/06(日) 20:36:30.01ID:LW3/RgRJa376デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 20:39:37.09ID:9GXSG5IC0377デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
2018/05/06(日) 20:49:20.18ID:7/UIZFPx0 https://ideone.com/PNPIlj
蛇足だろうけどnew BitmapじゃなくPictureBox.Imageを直接描き変えるもの
>>376
370で何をしたかったかというと「ダブルバッファリングではこれ以上改善できない」事の証明
>panelを置いてその上にpictureBox1を置いてます
それは多分関係ない。panelに背景を設定すると話が変わると思うけど
実際に改善するには移動量を少なくして滑らかに見せるくらいしかおもいつかない
消える側の方でなく進行方向側でカクついているんだよなあ・・・
蛇足だろうけどnew BitmapじゃなくPictureBox.Imageを直接描き変えるもの
>>376
370で何をしたかったかというと「ダブルバッファリングではこれ以上改善できない」事の証明
>panelを置いてその上にpictureBox1を置いてます
それは多分関係ない。panelに背景を設定すると話が変わると思うけど
実際に改善するには移動量を少なくして滑らかに見せるくらいしかおもいつかない
消える側の方でなく進行方向側でカクついているんだよなあ・・・
378デフォルトの名無しさん (ワッチョイ 03c3-XJxX)
2018/05/06(日) 21:02:31.57ID:9GXSG5IC0 >>377
試してみました
>>370と変わらない感じですね
これまで質問してきた趣旨とは変わってしまいますが、
Graphics g = Graphics.FromImage(pictureBox1.Image);
これでビットマップを書き換えた後に pictureBox1.Image を書き換えていないと
いうことは、いちいち canvas ビットマップを用意して細工しなくてもよかったと
いうことでしょうか
で、本質ですが、ご提供いただいたテストプログラムでは明らかにチラつきの
改善が見られるということはダブルバッファリングは機能している、これ以上
気になるのであれば、それは滑らかさの問題であってチラつきの問題ではない、
と認識するのが良さそうですね
試してみました
>>370と変わらない感じですね
これまで質問してきた趣旨とは変わってしまいますが、
Graphics g = Graphics.FromImage(pictureBox1.Image);
これでビットマップを書き換えた後に pictureBox1.Image を書き換えていないと
いうことは、いちいち canvas ビットマップを用意して細工しなくてもよかったと
いうことでしょうか
で、本質ですが、ご提供いただいたテストプログラムでは明らかにチラつきの
改善が見られるということはダブルバッファリングは機能している、これ以上
気になるのであれば、それは滑らかさの問題であってチラつきの問題ではない、
と認識するのが良さそうですね
379デフォルトの名無しさん (ワッチョイ 7fd3-jSUp)
2018/05/06(日) 21:19:50.71ID:IbwjU9Qn0 下PanelはBackgroundImage使ってるのが悪いんじゃねえかなあ
canvasはPanelのPaintで描画するようにして
PanelのDoubleBufferedをtrueにするかOnPaintBackgroundの無効化でチラ付かなくなったよ
あとチラつきとは関係ないけどお行儀的には再描画はTickで
Invalidate(true)呼び出してPaintのタイミングはフレームワークに任せるべし
Tick毎に無駄にImage/BackgroundImageに突っ込んでるから結果的に自分で再描画してるけど
canvasはPanelのPaintで描画するようにして
PanelのDoubleBufferedをtrueにするかOnPaintBackgroundの無効化でチラ付かなくなったよ
あとチラつきとは関係ないけどお行儀的には再描画はTickで
Invalidate(true)呼び出してPaintのタイミングはフレームワークに任せるべし
Tick毎に無駄にImage/BackgroundImageに突っ込んでるから結果的に自分で再描画してるけど
380デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/06(日) 21:52:55.18ID:LW3/RgRJa381デフォルトの名無しさん (ワッチョイ ea27-0vvG)
2018/05/06(日) 23:08:48.35ID:s/HjZ7Qd0 >>350
それは参照渡しになってたわけじゃない
C#の参照渡しはhoge(ref list)のようにrefがつく
あなたがハマったのは参照の値渡しでインスタンスは複製されないということ
ぺらぺらの入門書とかだとわからんが、ジェネリックやクラスをちゃんと学べる程度の本なら載ってるはず
それは参照渡しになってたわけじゃない
C#の参照渡しはhoge(ref list)のようにrefがつく
あなたがハマったのは参照の値渡しでインスタンスは複製されないということ
ぺらぺらの入門書とかだとわからんが、ジェネリックやクラスをちゃんと学べる程度の本なら載ってるはず
382デフォルトの名無しさん (ワッチョイ bbb5-MrO9)
2018/05/06(日) 23:23:27.04ID:gzoDeGmX0 グラボの性能差だから、ちらつき。
383デフォルトの名無しさん (ワッチョイ 8a7f-NrvC)
2018/05/06(日) 23:49:17.66ID:5astaXB20 >>350
List固有の問題ではなく、classは全て参照型だからだ。
だから、=で代入しても同じオブジェクトを指すだけ。
ちなみにstructは値型。こっちなら=で代入したらオブジェクトが複製される。
List固有の問題ではなく、classは全て参照型だからだ。
だから、=で代入しても同じオブジェクトを指すだけ。
ちなみにstructは値型。こっちなら=で代入したらオブジェクトが複製される。
384デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/07(月) 01:29:04.63ID:inVQGvpaa >>360をFPSと速度を変えられるようにしてみたけど
思ったより面白くもないし動作も滑らかじゃないなw
どっちにしろやっぱりフリッカーは発生しない
https://ideone.com/E3V57h
ところで、タイトルバーをドラッグしたりすると画面の更新が止まる問題を
回避する方法ってなかったっけ?
思ったより面白くもないし動作も滑らかじゃないなw
どっちにしろやっぱりフリッカーは発生しない
https://ideone.com/E3V57h
ところで、タイトルバーをドラッグしたりすると画面の更新が止まる問題を
回避する方法ってなかったっけ?
385デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/07(月) 01:32:11.28ID:inVQGvpaa ああ、今思ったけど、FPSは本当は実測した値を表示すべきだねw
>>384はタイマーのインターバルから計算した理論値で実測値じゃない
>>384はタイマーのインターバルから計算した理論値で実測値じゃない
386デフォルトの名無しさん (ササクッテロラ Sp23-MrO9)
2018/05/07(月) 01:32:57.05ID:3karsGmmp グラボやドライバーの違いで発生する問題を自分のところじゃ発生しないからって頭ごなしに否定する奴はどうして生きてるんだろうな?
387デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/07(月) 01:42:18.83ID:inVQGvpaa >>386
それは君が勝手にそう思ってるだけw
そんな問題はWin9xの時代だって存在しなかったよ
っていうか、言っちゃわるいけどフリッカーが発生する原因を理解していればそんな間抜けな台詞は
出てこない
それは君が勝手にそう思ってるだけw
そんな問題はWin9xの時代だって存在しなかったよ
っていうか、言っちゃわるいけどフリッカーが発生する原因を理解していればそんな間抜けな台詞は
出てこない
388デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/07(月) 01:43:57.94ID:inVQGvpaa なんか垂直同期(笑)とか書いてるのもいたけど、
頭の中80年代で止まってるんじゃなかろうかw
頭の中80年代で止まってるんじゃなかろうかw
389デフォルトの名無しさん (ワッチョイ de8a-a7mP)
2018/05/07(月) 04:32:44.15ID:S2Y5gzQd0 DataGridViewで、複数のカラムを基準にソートするにはどうしたらいいでしょうか。
以下のようなイメージです。
元データ
------
4 2
1 4
2 1
5 4
6 7
1 3
1 6
これを、カラムのヘッダーセルのクリック操作だけで、以下のように出来るようにしたいです。
------
1 3
1 4
1 6
2 1
4 2
5 4
6 7
以下のようなイメージです。
元データ
------
4 2
1 4
2 1
5 4
6 7
1 3
1 6
これを、カラムのヘッダーセルのクリック操作だけで、以下のように出来るようにしたいです。
------
1 3
1 4
1 6
2 1
4 2
5 4
6 7
390デフォルトの名無しさん (ワッチョイ 1e80-pKnf)
2018/05/07(月) 06:24:03.69ID:SlIACPlK0 プロパティだけでは無理
各列のSortModeはAutomatic以外にして
ColumnHeaderClickイベントで自分でソートする必要がある
実際にどうやってソートするかはDataGridViewに表示してるデータをどうやっているか次第
ところで下の状態で1番目の方のカラムヘッダをクリックしたらどうなるの?
とか色々場合があってUIというかUX?を決定するのが結構面倒
各列のSortModeはAutomatic以外にして
ColumnHeaderClickイベントで自分でソートする必要がある
実際にどうやってソートするかはDataGridViewに表示してるデータをどうやっているか次第
ところで下の状態で1番目の方のカラムヘッダをクリックしたらどうなるの?
とか色々場合があってUIというかUX?を決定するのが結構面倒
391デフォルトの名無しさん (ドコグロ MM33-XUQH)
2018/05/07(月) 06:43:05.39ID:UbBhnDZYM さすがに垂直同期はネタだろ
釣られる奴がいるとは思わなかったけど w
釣られる奴がいるとは思わなかったけど w
392デフォルトの名無しさん (ササクッテロラ Sp23-MrO9)
2018/05/07(月) 07:18:03.31ID:3karsGmmp ググって事実を知ったんだな。そんなに悔しいのか?
393デフォルトの名無しさん (ワッチョイ 1e80-SIjl)
2018/05/07(月) 08:25:49.50ID:H7YotaIo0 >>389-390
複数列でのソートは、Kotlin なら、
配列.sortedWith(compareBy({ 列1 }, { 列2 }))
C# は、よく知らないけど、こういう感じ?
配列.OrderBy(列1).ThenBy(列2)
複数列でのソートは、Kotlin なら、
配列.sortedWith(compareBy({ 列1 }, { 列2 }))
C# は、よく知らないけど、こういう感じ?
配列.OrderBy(列1).ThenBy(列2)
394デフォルトの名無しさん (ワッチョイ 0a5d-N4mI)
2018/05/07(月) 14:38:50.30ID:iApxgodj0 教えてください
キャストが上手くできずに困っています
具体的には、VisualStudioでデバッグのウォッチウィンドウに
Enumerable.Empty<int>() is IEnumerable<object>
と入力するとtrueと表示されるので少なくとも条件が整えば
IEnumerable<int> は IEnumerable<object> に
キャストできるとおもうのですが、プログラム上で安直に
Console.WriteLine(Enumerable.Empty<int>() is IEnumerable<object>);
を実行すると画面にFalseと表示されてしまいます
ウォッチウィンドウ上とプログラム上で何か条件の違いがあって
このようなことが起こっているのだとは思いますが、理解が不十分で解決方法が分かりません
そもそもIEnumerable<T>のTは共変なのでintがobjectにアップキャストできる以上
IEnumerable<int>も無条件でIEnumerable<object>にキャストできると
思っていたのですが、この部分に何か誤解があるのでしょうか
VisualStudio15.6.7、コンソールアプリ、ターゲットフレームワーク4.7.1でテストしています
よろしくお願いします
キャストが上手くできずに困っています
具体的には、VisualStudioでデバッグのウォッチウィンドウに
Enumerable.Empty<int>() is IEnumerable<object>
と入力するとtrueと表示されるので少なくとも条件が整えば
IEnumerable<int> は IEnumerable<object> に
キャストできるとおもうのですが、プログラム上で安直に
Console.WriteLine(Enumerable.Empty<int>() is IEnumerable<object>);
を実行すると画面にFalseと表示されてしまいます
ウォッチウィンドウ上とプログラム上で何か条件の違いがあって
このようなことが起こっているのだとは思いますが、理解が不十分で解決方法が分かりません
そもそもIEnumerable<T>のTは共変なのでintがobjectにアップキャストできる以上
IEnumerable<int>も無条件でIEnumerable<object>にキャストできると
思っていたのですが、この部分に何か誤解があるのでしょうか
VisualStudio15.6.7、コンソールアプリ、ターゲットフレームワーク4.7.1でテストしています
よろしくお願いします
395デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/07(月) 18:57:27.81ID:cAXvX5WKa >>394
値型は不変だったような
http://ufcpp.net/study/csharp/sp4_variance.html#value
イミディエイトだとs演算子がtrueを返す理由は分かりませんw
何でしょうね
値型は不変だったような
http://ufcpp.net/study/csharp/sp4_variance.html#value
イミディエイトだとs演算子がtrueを返す理由は分かりませんw
何でしょうね
396デフォルトの名無しさん (ワッチョイ 0a5d-N4mI)
2018/05/07(月) 21:52:56.92ID:iApxgodj0 >>395
レスどうもありがとうございます。その後色々と試してみると、プログラムで
Console.WriteLine((Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184);
を実行すると画面には184と表示され、教えていただいとことと辻褄が合うように思います
また、これまでの結果から考えてウォッチウィンドウで
(Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184
の値を調べれば4649と表示されるのかなと思いきや「メモリを読み取ることができません」と表示されたので、
こちらの挙動はおっしゃる通り分からない(バグ?)と考えるしかなさそうです
ジェネリックでないIEnumerableはLINQが使えないのでこれまで
if (x is IEnumerable<object> enumerableObject)
{
...
}
と書く場面があったのですが、これではIEnumerable<値型>が拾えなさそうなので
if (x is IEnumerable enumerable)
{
var enumerableObject = enumerable as IEnumerable<object> ?? enumerable.Cast<object>();
...
}
とでも書いておこうかと思います(今のプログラムではxがジェネリックでないIEnumerableになることはないのですが)
もっと良い方法があれば教えてもらえると嬉しいです
レスどうもありがとうございます。その後色々と試してみると、プログラムで
Console.WriteLine((Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184);
を実行すると画面には184と表示され、教えていただいとことと辻褄が合うように思います
また、これまでの結果から考えてウォッチウィンドウで
(Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184
の値を調べれば4649と表示されるのかなと思いきや「メモリを読み取ることができません」と表示されたので、
こちらの挙動はおっしゃる通り分からない(バグ?)と考えるしかなさそうです
ジェネリックでないIEnumerableはLINQが使えないのでこれまで
if (x is IEnumerable<object> enumerableObject)
{
...
}
と書く場面があったのですが、これではIEnumerable<値型>が拾えなさそうなので
if (x is IEnumerable enumerable)
{
var enumerableObject = enumerable as IEnumerable<object> ?? enumerable.Cast<object>();
...
}
とでも書いておこうかと思います(今のプログラムではxがジェネリックでないIEnumerableになることはないのですが)
もっと良い方法があれば教えてもらえると嬉しいです
397デフォルトの名無しさん (ワッチョイ faeb-r3te)
2018/05/09(水) 00:08:06.32ID:98vw71AM0 名前空間A と名前空間A.B がある場合に、A.B内からAのクラスを扱うにはどうすればいいのですか?
398デフォルトの名無しさん (ワッチョイ 1e81-fCfW)
2018/05/09(水) 01:14:34.94ID:KTiGjU5t0 >>321
Aをusingすればよい
Aをusingすればよい
399デフォルトの名無しさん (ワッチョイ 1e81-fCfW)
2018/05/09(水) 01:15:21.71ID:KTiGjU5t0 なんかすげーレス間違えたけど
>>397宛
>>397宛
400デフォルトの名無しさん (ワッチョイ 1fe3-jSAq)
2018/05/09(水) 01:47:53.29ID:lSrhXmV/0 そもそも名前空間ってどうやって扱うのが正しいの?
401デフォルトの名無しさん (ワッチョイ faeb-a7mP)
2018/05/09(水) 02:09:09.87ID:98vw71AM0 >>399
クラスとは違って、やはりそうやって使うものなのですか
クラスとは違って、やはりそうやって使うものなのですか
402デフォルトの名無しさん (ササクッテロラ Sp23-MrO9)
2018/05/09(水) 02:25:39.99ID:PD0iDBLsp 完全表記しても良いんだよ?
403デフォルトの名無しさん (ワッチョイ cf17-jSUp)
2018/05/09(水) 17:57:38.22ID:8iDq54Sd0 嫌なら全部同じ名前空間内に入れ込んでしまえ
悩まなくて済むぞ
悩まなくて済むぞ
404デフォルトの名無しさん (ワッチョイ 1fe3-XJxX)
2018/05/09(水) 18:15:06.67ID:GFIhYWfG0 別に名前空間分ける意味ないよな。
405デフォルトの名無しさん (ワッチョイ 53b3-EG9I)
2018/05/09(水) 18:19:36.14ID:nbiQ9nbF0 分業の為の仕組み
406デフォルトの名無しさん (ワッチョイ 1fe3-jSAq)
2018/05/09(水) 19:48:53.19ID:lSrhXmV/0407デフォルトの名無しさん (ブーイモ MMef-fCfW)
2018/05/09(水) 19:49:33.69ID:D7X0frHnM C#好きだけどnamespaceでネスト一つ深くなるのはあかんわ
408デフォルトの名無しさん (スッップ Sdaa-xC2/)
2018/05/09(水) 20:08:50.17ID:4zjT3ksId >>406
全て自分で書くコードならいいんだけどね。サードパーティのライブラリのクラスと衝突する可能性なんていくらでもあるから。
全て自分で書くコードならいいんだけどね。サードパーティのライブラリのクラスと衝突する可能性なんていくらでもあるから。
409デフォルトの名無しさん (ワッチョイ 03e7-m5Zl)
2018/05/09(水) 20:10:07.14ID:QZYGN7xi0 >>406
書き分けのために命名が歪むのは良くない
NM1.Class/NM2.Class
NM1Class/NM2Class
単にプリフィクス付けるだけなら
名前空間があろうとなかろうとやってる事は同じ
書き分けのために命名が歪むのは良くない
NM1.Class/NM2.Class
NM1Class/NM2Class
単にプリフィクス付けるだけなら
名前空間があろうとなかろうとやってる事は同じ
410デフォルトの名無しさん (ワッチョイ 8ab3-XUQH)
2018/05/09(水) 20:22:37.87ID:SavMNDDu0 >>406
むしろ同じ名前でも被らないようにする仕組みなんだが...
むしろ同じ名前でも被らないようにする仕組みなんだが...
411デフォルトの名無しさん (ワッチョイ bbb5-MrO9)
2018/05/09(水) 20:54:59.54ID:EkWsGx0u0 やたら長い名前付けて重複を避けるのさ。
ダイビングがかったるいって?
最初のusingに書くだけだから大丈夫。
ダイビングがかったるいって?
最初のusingに書くだけだから大丈夫。
412デフォルトの名無しさん (アウアウエー Sa82-oFLj)
2018/05/09(水) 21:00:22.54ID:EHFfoX53a >>406
自分(同じチーム)で同じ名前の違うクラスが必要になるケースは
少ないが(ないことはない)他人が書いたライブラリで既に使われているのと
同じ名前が必要になるケースなんかいくらでもあるよw
例えばSystem.Drawing.Point以外のPointが使えなかったら困るでしょ
あと、名前空間の目的は名前のバッティングの回避だけじゃない。
むしろ一番の目的は分類と整理でしょ。
名前空間が使えないライブラリは全部のファイルをデスクトップに置くできない人と同じ
適切に命名され適切な階層構造をもった名前空間は索引の機能を持つし、
コードのコンテキストを明確にする。
System.Drawing.PointがPointだけで2Dグラフィックの座標だと分かるのは、
プログラマはそれがSystem.Drawing内の型だと知っているから
自分(同じチーム)で同じ名前の違うクラスが必要になるケースは
少ないが(ないことはない)他人が書いたライブラリで既に使われているのと
同じ名前が必要になるケースなんかいくらでもあるよw
例えばSystem.Drawing.Point以外のPointが使えなかったら困るでしょ
あと、名前空間の目的は名前のバッティングの回避だけじゃない。
むしろ一番の目的は分類と整理でしょ。
名前空間が使えないライブラリは全部のファイルをデスクトップに置くできない人と同じ
適切に命名され適切な階層構造をもった名前空間は索引の機能を持つし、
コードのコンテキストを明確にする。
System.Drawing.PointがPointだけで2Dグラフィックの座標だと分かるのは、
プログラマはそれがSystem.Drawing内の型だと知っているから
413デフォルトの名無しさん (ワントンキン MMa3-k/8h)
2018/05/10(木) 00:36:27.80ID:yXMj8vMdM using エイリアス ディレクティブ でggr
414デフォルトの名無しさん (ワッチョイ 6de3-V2If)
2018/05/10(木) 01:45:10.65ID:m/SOSTAZ0 >>412
普通にdrawingのcolorとmediaのcolorがバッティングしてるじゃん
それと自作のcolorとこれまた別の奴の作ったcolorがバッティングするだけでもう面倒臭くて死にそうになる
普通にdrawingのcolorとmediaのcolorがバッティングしてるじゃん
それと自作のcolorとこれまた別の奴の作ったcolorがバッティングするだけでもう面倒臭くて死にそうになる
415デフォルトの名無しさん (ワッチョイ 6de3-V2If)
2018/05/10(木) 01:55:25.02ID:m/SOSTAZ0 もっというとwpfでも別のcolor作ってんじゃん
バッティングうぜぇんだよ
こんな簡単なクラスでもう再利用効かないんだから名前空間まで作って管理するなよバカっタレかよ
当のMSからもうまともなことやってねぇっていうかできないんだから
いい加減ファンタジー設計はやめるべき
いや、もうファンタジーじゃないな
メルヘンの領域まで入ってる
バッティングうぜぇんだよ
こんな簡単なクラスでもう再利用効かないんだから名前空間まで作って管理するなよバカっタレかよ
当のMSからもうまともなことやってねぇっていうかできないんだから
いい加減ファンタジー設計はやめるべき
いや、もうファンタジーじゃないな
メルヘンの領域まで入ってる
416デフォルトの名無しさん (アウアウエー Sa13-5wbU)
2018/05/10(木) 02:19:31.02ID:di97fd/ta >>414-415
何を言ってるのか意味がわからねいよ。
何を言ってるのか意味がわからねいよ。
417デフォルトの名無しさん (ワッチョイ 237f-iSle)
2018/05/10(木) 02:30:05.52ID:yIfUPK8/0 この程度で死ぬほど面倒臭がってたら、プログラミング自体が向いてないな。
418デフォルトの名無しさん (ワッチョイ 23d2-UqMB)
2018/05/10(木) 04:06:02.42ID:R4f/WJPq0 C#8.0のpreviewきましたねえ
https://github.com/dotnet/csharplang/wiki/vNext-Preview
https://github.com/dotnet/csharplang/wiki/vNext-Preview
419デフォルトの名無しさん (ドコグロ MM93-V2If)
2018/05/10(木) 07:27:01.34ID:1WB9uyi8M >>416
バカじゃん
何でwinformにcolorあるのにwpfでも作ったの?
再利用できてないじゃん
役に立たないじゃん
名前空間分けてそれで?
新しいもの作ったら元気一杯に捨ててるじゃん
ってとこに集約する
バカじゃん
何でwinformにcolorあるのにwpfでも作ったの?
再利用できてないじゃん
役に立たないじゃん
名前空間分けてそれで?
新しいもの作ったら元気一杯に捨ててるじゃん
ってとこに集約する
420デフォルトの名無しさん (ワッチョイ 7daf-RQhD)
2018/05/10(木) 07:37:29.76ID:CKE2Ak/10 Color構造体とColorsクラスの事かな?
421デフォルトの名無しさん (ワッチョイ cb81-nFcL)
2018/05/10(木) 07:48:33.05ID:M9xdMPFN0 こいついつものアレだろ
触るな
触るな
422デフォルトの名無しさん (ドコグロ MM93-V2If)
2018/05/10(木) 08:08:52.60ID:1WB9uyi8M >>421
反論できないならcolorクラスはもう作らせないぞ
反論できないならcolorクラスはもう作らせないぞ
423デフォルトの名無しさん (アウアウウー Sa89-27Jw)
2018/05/10(木) 09:17:58.68ID:l4uhHAvqa 全く話題になってないけどC#7.3も正式リリースされたぞ
念願の where T : Enum
念願の where T : Enum
424デフォルトの名無しさん (ワッチョイ 2dd3-Iyo3)
2018/05/10(木) 09:36:24.91ID:EV77m/Hv0425デフォルトの名無しさん (ラクッペ MM01-nFcL)
2018/05/10(木) 09:51:09.75ID:2wmh3oy2M426デフォルトの名無しさん (ササクッテロラ Sp21-4FyP)
2018/05/10(木) 10:30:56.59ID:Yjx9MaDJp つか、同じ名前で違う用途に割り当てる方が難儀だろ普通は名前変える。
427デフォルトの名無しさん (スッップ Sd43-UqMB)
2018/05/10(木) 12:33:21.16ID:kan/O/6Ed >>426
だから世の中にどんだけクラスが存在すると思ってんの?
だから世の中にどんだけクラスが存在すると思ってんの?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国 東アジアの海域に過去最大規模 100隻超の艦船を展開 高市総理の発言に反発か ★2 [Hitzeschleier★]
- 【独自】渡邊渚さんを脅迫の疑いで32歳女を書類送検 警視庁 渡邊さんの写真集に包丁置いた写真を投稿 ★2 [ひかり★]
- “信号待ち”中国人観光客2人死亡の山陽電鉄踏切事故 遺族が約1億4000万円賠償求め提訴 神戸地裁 [七波羅探題★]
- 【千葉】「今ぶつかっただろ。痛えじゃねえか。骨折れてるぞ。慰謝料払えよ」 松戸駅で40代男性に因縁をつけ暴行、強盗 男5人を逮捕 [シャチ★]
- 【速報】山本由伸のWBC欠場決定! [牛丼★]
- 米国、ホワイトカラーよりブルーカラーが重視される社会になってしまう、AIの影響で25年大卒者は就職難に直面 [お断り★]
- 【速報】AI生成した自動ポルノ画像所持で初の逮捕者 [329329848]
- 整形女がキレる「カリカリ」イラストを実写化 [663382246]
- バカ「円安がインフレの原因なんだから!利上げしろ!X3」公債金利上昇して「日本は終わりだぁ!」👈マジで何なん? [757644362]
- 【悲報】小学校2年生「パパこの算数の問題わかる?」→難しくて炎上wwwwwwwwwwwwwwwwwwww [802034645]
- 【高市カード】 マイナンバーカード。1億枚を突破 🎉 保有率80%超え。 持ってないのって、お前らとバカウヨだけじゃね? [485983549]
- 【悲報】鈴木農水相、JAから497万円もらっていた
