[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/29 16:42 / Filesize : 310 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part137



1 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 17:40:19.48 ID:oKXVP34zM.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part95
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
mevius.5ch.net/test/read.cgi/tech/1520057345/

■コードを貼る場合は↓を使いましょう。
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
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

348 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 05:38:36.94 ID:LRJiKh0v0.net]
>>341
ありがとうございます
思っていることが問題なく実現できました

できるようになってみると、一体何を悩んでいたのか、自分でもわからなくなってしまいました
多分、DrawImage で書き込む先がVRAMだと思い込んでいたのでしょう

349 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 01:21:02.23 ID:dl2mQyCb0.net]
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))
 {
   // 処理に入らない
 }
}

このコードでフォームを右上にドラッグして拡大した場合に処理に入らないのですがどこがおかしいでしょうか

350 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 01:31:51.93 ID:HfMj07lt0.net]
右上にってことは事後の方が top の値が小さくなってるからじゃないの?

351 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 01:32:20.44 ID:HfMj07lt0.net]
ああ、そう書いてあるのか。失礼。

352 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 01:40:54.74 ID:LGFxrhOP0.net]
>>344
イベント有効になっている?
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";
}
}
これで動いた

353 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 01:45:28.35 ID:mBsERy4z0.net]
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;
}
}

354 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 02:05:39.13 ID:dl2mQyCb0.net]
>>347
ご回答ありがとうございます
イベントは有効です
左や上や左上への拡大縮小ドラッグは正常なのですが左下や右上がおかしいです
提供していただいたコードを試したのですが、何故かは分からないのですが rightEdge < this.Right がfalseになっています
もう少し調べてみます

355 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 02:22:41.56 ID:xovvhFEya.net]
申し訳ないけど、問題を再現できるそのまんまのコードを提示していない時点で
確実に原因はあなたの勘違いにあると断言できる

356 名前:デフォルトの名無しさん [2018/05/06(日) 05:58:39.10 ID:CBGkbUql0.net]
Listを値渡しすべき所が参照渡しになってたせいで
くっそハマったんだけど
こういうのって、C#の解説本1冊読めば
注意しろって書いてあるもんなの?

参照渡し云々って単語はかろうじて知ってて
↓のサイトをたまたま見つけて、偶然解決出来たけど
https://webbibouroku.com/Blog/Article/list-copy

エラーや例外にならないバグが怖すぎる・・・



357 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 06:08:47.32 ID:994JP5I00.net]
そんなものここで聞けば3秒で解決するし

358 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 08:39:03.59 ID:j24ysXtO0.net]
c#って物体X(?)は全部参照渡しになるよね

359 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 08:48:15.69 ID:6gN3mvyQ0.net]
>>351
それ値渡しじゃない

360 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 09:09:18.32 ID:9GXSG5IC0.net]
イメージの配置はできるようになりましたが、いろいろ触っていると、チラツキが
気になるようになってきました
テストしてみたところ、下記のレベルでもチラツキが発生します

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 は内部処理でダブルバッファリングを行っているとも見ました
まだなにかできることはあるのでしょうか

361 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 09:36:21.79 ID:9GXSG5IC0.net]
書いてませんでしたが、bg_brushは背景色の、fg_brushは前景色のブラシです

Brush bg_brush = new SolidBrush(SystemColors.Control);
Brush fg_brush = new SolidBrush(Color.Black);

で定義しています

362 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 09:54:38.21 ID:RTzVBomo0.net]
canvasはどんな風に設定しているの?

363 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 10:06:54.11 ID:9GXSG5IC0.net]
canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);

として定義しています

364 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 10:36:38.03 ID:RTzVBomo0.net]
DoubleBufferdとか触らずともこっちではちらつかないけどなあ
ちらつくってのはどういうふうに見えることを言ってるの?
panelやpictureBoxのサイズやradiusの値もさらしてみては?

365 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 10:50:11.40 ID:IbwjU9Qn0.net]
どこで何やってんの不明瞭だから当てずっぽうだが
下手に自前描画してるチラつくなら大体OnPaintBackgroundのせい

366 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 10:55:03.54 ID:9GXSG5IC0.net]
https://ideone.com/s4ddqO

これが全コードです
空のWindowsフォームアプリケーションで生成されたフォームに、ボタンとパネル、
PictureBoxを配置しただけの状態です
パネルとPictureBoxは、DockをFillにしてウィンドウサイズに合わせてあります



367 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 10:56:51.16 ID:9GXSG5IC0.net]
これで、timer1のIntervalを50msにすると、はっきり分かる程度にちらつきます

368 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 13:14:55.43 ID:gzoDeGmX0.net]
垂直同期しろ。

369 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 13:31:21.62 ID:o/aLqSU5a.net]
>>362
やってみたけとちらついたりはしないねw
ただフレームレートが低いから滑らかに見えないだけ []
[ここ壊れてます]

371 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 15:35:36.42 ID:MOQB+J+Ha.net]
解決のヒントにはならないだろうけど

ちらつきって何かということについて
すでに表示されてるものが一瞬透明に見えるから表示がおかしく見えること

たとえば半径100の円が横に5ドット動くとする
普通に考えたらほとんどの円に背景は隠れたままだけど何も考えないで適当にやると
背景が一瞬見えてしまう

一度円を消してなにもない状態を表示して
次に円を書いてるから問題がある

何もない状態を表示しなければいい

372 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 18:19:28.93 ID:9GXSG5IC0.net]
>>364
環境の問題ですか・・・
一応ディスプレイのリフレッシュレートは60Hz、タイマー設定が50msだと20Hzあれば
十分ですので、あまり関係ない気がするのですが
でも私の環境でしか出ないのであれば、環境依存かもしれません

>>365
これを避けるためにダブルバッファリングをするわけですし、書き換えた後のビットマップを
PictureBoxに貼り付けるようにして、描画途中では貼っていません

373 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 18:22:22.08 ID:gzoDeGmX0.net]
だからハードの違いだって言ってんだろw

374 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 18:25:15.44 ID:w10wIaHya.net]
>>366
いやいや何でそういう話になるのw

たぶん環境の問題なんかじゃなく、あなたが低フレームレートに起因する
カクカクした動きをちらつきだと誤認してるだけだと思うよw

375 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 18:30:35.56 ID:gzoDeGmX0.net]
アホばっかり。

376 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 18:55:10.27 ID:9GXSG5IC0.net]
>>368
カクカクした動きとチラつきを同一視しているわけではありません
>>365
が書いたように、今回の例だと黒い円が一瞬消えているような感じがします
移動量の x += 10; をもっと少なくすれば目立たなくなりますが、それでも
なんとなく嫌な感じがします
でも言葉で説明するのは難しいですね

低フレームレートの認識を誤解していたようですが、インターバルを100msとか
50msとかだとディスプレイのリフレッシュレート(あるいは人間の認識力)に比べて
低すぎるので、かえって目立ってしまうということでしょうか?
確かに、インターバルを思い切って5msとかにしてみると、チラつきは軽減されてきた
気がします



377 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 19:33:59.43 ID:7/UIZFPx0.net]
ちょっと改変して逆にチラツキをわかるようにしてみた
https://ideone.com/3X8oJh
WinFormプロジェクトを新規で作って元のソースを全部消したうえで、このソースを既存の項目として追加
上がPictureBoxで下がPanel
>>370
PictureBoxのダブルバッファがデフォルトで有効なのは知っているのを確認したので
その上でPanelはデフォルトでダブルバッファが有効だというのを念頭に入れてコードを実行してほしい
同じオブジェクトの動きだが、うちで確認する限りは下はあきらかにチラツキがあって上は目立たない
>>365
>何もない状態を表示しなければいい
というわけで先に描画して動いた部分だけを消すという動作を実現してみたつもり
だったんだけど、移動量を大きくするとカクツキがどうしても目立ってしまってうまくいかない。ギブアップw
>>370
もっとGDI+の動作を把握するとかゲームなどでの実装方法を探すかした方がいいと思う
残念ながら俺の知識ではここまで

378 名前:>>370 mailto:sage [2018/05/06(日) 19:37:36.72 ID:7/UIZFPx0.net]
ごめん
>Panelはデフォルトでダブルバッファが有効だというのを念頭に入れて
Panelはデフォルトでダブルバッファが無効だというのを念頭に入れて
の間違い

379 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 20:17:55.74 ID:LW3/RgRJa.net]
うーんw

>>361のコード自体がダブルバッファリングの実装なので、
少なくともGDI+を使う限り、これで本当にちらつくなら何をやってもちらつき回避は不可能。

何度も言うけど、少なくとも俺の環境では低フレームレート特有の不自然さはあっても
フリッカーは確認できない

しつこいようだけど、俺は質問者がちらつき(フリッカー)がどういう現象か
理解してないだけのように思う

380 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 20:20:58.90 ID:j24ysXtO0.net]
まあ、unity使ってもDirectX使ってもスクロールとかなめらかにならないしね
グラボも汚いってのも考慮に入れる
市販のゲームでもスクロールしてるときはカクカクグシャグシャはデフォ

381 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 20:21:41.45 ID:9GXSG5IC0.net]
>>371
ありがとうございます
私が確認しても、確かに上下で明らかにチラつきが違い、下ははっきりとわかります
上はほとんどわからないレベルですね

PictureBoxもPanelも、どちらも出来上がったビットマップを貼り付けているのですから
同じ表示になりそうな気がしますが違いますね
これをちゃんと理解できれば解決できそうです

382 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 20:36:30.01 ID:LW3/RgRJa.net]
>>371のコートだとたしかにフリッカーが確認できるねw
>>373は撤回します

383 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 20:39:37.09 ID:9GXSG5IC0.net]
>>373
私が「チラツキ」と表現しているのは、>>371が上げてくれたプログラムの
下側、panelで発生している現象です

私の理解では、>>371でなぜ表示に違いが生じるのかがわかりません
どちらも、加工後のcanvasを貼り付けているはずなのに

>>371でやっていることは、ダブルバッファリングではないのでしょうか?

>>371のプログラムを実行してみて、違いはPictureBoxをウィンドウに直接
貼り付けているか、panelを置いてその上に貼り付けているか、です
私のテストプログラムでは、panelを置いてその上にpictureBox1を置いてます
これが影響するのでしょうか

384 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 20:49:20.18 ID:7/UIZFPx0.net]
https://ideone.com/PNPIlj
蛇足だろうけどnew BitmapじゃなくPictureBox.Imageを直接描き変えるもの
>>377
370で何をしたかったかというと「ダブルバッファリングではこれ以上改善できない」事の証明
>panelを置いてその上にpictureBox1を置いてます
それは多分関係ない。panelに背景を設定すると話が変わると思うけど
実際に改善するには移動量を少なくして滑らかに見せるくらいしかおもいつかない
消える側の方でなく進行方向側でカクついているんだよなあ・・・

385 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 21:02:31.57 ID:9GXSG5IC0.net]
>>378
試してみました
>>371と変わらない感じですね
これまで質問してきた趣旨とは変わってしまいますが、

Graphics g = Graphics.FromImage(pictureBox1.Image);

これでビットマップを書き換えた後に pictureBox1.Image を書き換えていないと
いうことは、いちいち canvas ビットマップを用意して細工しなくてもよかったと
いうことでしょうか

で、本質ですが、ご提供いただいたテストプログラムでは明らかにチラつきの
改善が見られるということはダブルバッファリングは機能している、これ以上
気になるのであれば、それは滑らかさの問題であってチラつきの問題ではない、
と認識するのが良さそうですね

386 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 21:19:50.71 ID:IbwjU9Qn0.net]
下PanelはBackgroundImage使ってるのが悪いんじゃねえかなあ

canvasはPanelのPaintで描画するようにして
PanelのDoubleBufferedをtrueにするかOnPaintBackgroundの無効化でチラ付かなくなったよ

あとチラつきとは関係ないけどお行儀的には再描画はTickで
Invalidate(true)呼び出してPaintのタイミングはフレームワークに任せるべし
Tick毎に無駄にImage/BackgroundImageに突っ込んでるから結果的に自分で再描画してるけど



387 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 21:52:55.18 ID:LW3/RgRJa.net]
ああ、やっぱり俺の認識で合ってるねw
何だかおかしいと思ったが

>>377
フリッカーを誤解してないのは分かったけど、>>361のコードでフリッカーなんか
発生しないってだから

388 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 23:08:48.35 ID:s/HjZ7Qd0.net]
>>351
それは参照渡しになってたわけじゃない
C#の参照渡しはhoge(ref list)のようにrefがつく
あなたがハマったのは参照の値渡しでインスタンスは複製されないということ

ぺらぺらの入門書とかだとわからんが、ジェネリックやクラスをちゃんと学べる程度の本なら載ってるはず

389 名前:デフォルトの名無しさん mailto:sage [2018/05/06(日) 23:23:27.04 ID:gzoDeGmX0.net]
グラボの性能差だから、ちらつき。

390 名前:デフォルトの名無しさん [2018/05/06(日) 23:49:17.66 ID:5astaXB20.net]
>>351
List固有の問題ではなく、classは全て参照型だからだ。
だから、=で代入しても同じオブジェクトを指すだけ。
ちなみにstructは値型。こっちなら=で代入したらオブジェクトが複製される。

391 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 01:29:04.63 ID:inVQGvpaa.net]
>>361をFPSと速度を変えられるようにしてみたけど
思ったより面白くもないし動作も滑らかじゃないなw
どっちにしろやっぱりフリッカーは発生しない
https://ideone.com/E3V57h

ところで、タイトルバーをドラッグしたりすると画面の更新が止まる問題を
回避する方法ってなかったっけ?

392 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 01:32:11.28 ID:inVQGvpaa.net]
ああ、今思ったけど、FPSは本当は実測した値を表示すべきだねw
>>385はタイマーのインターバルから計算した理論値で実測値じゃない

393 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 01:32:57.05 ID:3karsGmmp.net]
グラボやドライバーの違いで発生する問題を自分のところじゃ発生しないからって頭ごなしに否定する奴はどうして生きてるんだろうな?

394 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 01:42:18.83 ID:inVQGvpaa.net]
>>387
それは君が勝手にそう思ってるだけw
そんな問題はWin9xの時代だって存在しなかったよ
っていうか、言っちゃわるいけどフリッカーが発生する原因を理解していればそんな間抜けな台詞は
出てこない

395 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 01:43:57.94 ID:inVQGvpaa.net]
なんか垂直同期(笑)とか書いてるのもいたけど、
頭の中80年代で止まってるんじゃなかろうかw

396 名前:デフォルトの名無しさん [2018/05/07(月) 04:32:44.15 ID:S2Y5gzQd0.net]
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



397 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 06:24:03.69 ID:SlIACPlK0.net]
プロパティだけでは無理
各列のSortModeはAutomatic以外にして
ColumnHeaderClickイベントで自分でソートする必要がある
実際にどうやってソートするかはDataGridViewに表示してるデータをどうやっているか次第
ところで下の状態で1番目の方のカラムヘッダをクリックしたらどうなるの?
とか色々場合があってUIというかUX?を決定するのが結構面倒

398 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 06:43:05.39 ID:UbBhnDZYM.net]
さすがに垂直同期はネタだろ
釣られる奴がいるとは思わなかったけど w

399 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 07:18:03.31 ID:3karsGmmp.net]
ググって事実を知ったんだな。そんなに悔しいのか?

400 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 08:25:49.50 ID:H7YotaIo0.net]
>>390-391
複数列でのソートは、Kotlin なら、

配列.sortedWith(compareBy({ 列1 }, { 列2 }))

C# は、よく知らないけど、こういう感じ?

配列.OrderBy(列1).ThenBy(列2)

401 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 14:38:50.30 ID:iApxgodj0.net]
教えてください
キャストが上手くできずに困っています
具体的には、VisualStudioでデバッグのウォッチウィンドウに

Enumerable.Empty<int>() is IEnumerable<object>

と入力するとtrueと表示されるので少なくとも条件が整えば
IEnumerable<int> は IEnumerable<object> に
キャストできるとおもうのですが、プログラム上で安直に

Console.WriteLine(Enumerable.Empty<int>() is IEnumerable<object>);

を実行すると画面にFalseと表示されてしまいます

ウォッチウィンドウ

402 名前:上とプログラム上で何か条件の違いがあって
このようなことが起こっているのだとは思いますが、理解が不十分で解決方法が分かりません

そもそもIEnumerable<T>のTは共変なのでintがobjectにアップキャストできる以上
IEnumerable<int>も無条件でIEnumerable<object>にキャストできると
思っていたのですが、この部分に何か誤解があるのでしょうか

VisualStudio15.6.7、コンソールアプリ、ターゲットフレームワーク4.7.1でテストしています
よろしくお願いします
[]
[ここ壊れてます]

403 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 18:57:27.81 ID:cAXvX5WKa.net]
>>395
値型は不変だったような
ufcpp.net/study/csharp/sp4_variance.html#value

イミディエイトだとs演算子がtrueを返す理由は分かりませんw
何でしょうね

404 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 21:52:56.92 ID:iApxgodj0.net]
>>396
レスどうもありがとうございます。その後色々と試してみると、プログラムで

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になることはないのですが)
もっと良い方法があれば教えてもらえると嬉しいです

405 名前:デフォルトの名無しさん [2018/05/09(水) 00:08:06.32 ID:98vw71AM0.net]
名前空間A と名前空間A.B がある場合に、A.B内からAのクラスを扱うにはどうすればいいのですか?

406 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 01:14:34.94 ID:KTiGjU5t0.net]
>>322
Aをusingすればよい



407 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 01:15:21.71 ID:KTiGjU5t0.net]
なんかすげーレス間違えたけど
>>398

408 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 01:47:53.29 ID:lSrhXmV/0.net]
そもそも名前空間ってどうやって扱うのが正しいの?

409 名前:デフォルトの名無しさん [2018/05/09(水) 02:09:09.87 ID:98vw71AM0.net]
>>400
クラスとは違って、やはりそうやって使うものなのですか

410 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 02:25:39.99 ID:PD0iDBLsp.net]
完全表記しても良いんだよ?

411 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 17:57:38.22 ID:8iDq54Sd0.net]
嫌なら全部同じ名前空間内に入れ込んでしまえ
悩まなくて済むぞ

412 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 18:15:06.67 ID:GFIhYWfG0.net]
別に名前空間分ける意味ないよな。

413 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 18:19:36.14 ID:nbiQ9nbF0.net]
分業の為の仕組み

414 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 19:48:53.19 ID:lSrhXmV/0.net]
>>406
逆に無駄な混乱が起きない?
同じ名前のクラスとかあるとちょっと面倒じゃない?

415 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 19:49:33.69 ID:D7X0frHnM.net]
C#好きだけどnamespaceでネスト一つ深くなるのはあかんわ

416 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 20:08:50.17 ID:4zjT3ksId.net]
>>407
全て自分で書くコードならいいんだけどね。サードパーティのライブラリのクラスと衝突する可能性なんていくらでもあるから。



417 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 20:10:07.14 ID:QZYGN7xi0.net]
>>407
書き分けのために命名が歪むのは良くない
NM1.Class/NM2.Class
NM1Class/NM2Class
単にプリフィクス付けるだけなら
名前空間があろうとなかろうとやってる事は同じ

418 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 20:22:37.87 ID: ]
[ここ壊れてます]

419 名前:SavMNDDu0.net mailto: >>407
むしろ同じ名前でも被らないようにする仕組みなんだが...
[]
[ここ壊れてます]

420 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 20:54:59.54 ID:EkWsGx0u0.net]
やたら長い名前付けて重複を避けるのさ。
ダイビングがかったるいって?
最初のusingに書くだけだから大丈夫。

421 名前:デフォルトの名無しさん mailto:sage [2018/05/09(水) 21:00:22.54 ID:EHFfoX53a.net]
>>407
自分(同じチーム)で同じ名前の違うクラスが必要になるケースは
少ないが(ないことはない)他人が書いたライブラリで既に使われているのと
同じ名前が必要になるケースなんかいくらでもあるよw

例えばSystem.Drawing.Point以外のPointが使えなかったら困るでしょ

あと、名前空間の目的は名前のバッティングの回避だけじゃない。
むしろ一番の目的は分類と整理でしょ。
名前空間が使えないライブラリは全部のファイルをデスクトップに置くできない人と同じ

適切に命名され適切な階層構造をもった名前空間は索引の機能を持つし、
コードのコンテキストを明確にする。

System.Drawing.PointがPointだけで2Dグラフィックの座標だと分かるのは、
プログラマはそれがSystem.Drawing内の型だと知っているから

422 名前:デフォルトの名無しさん mailto:sage釣 [2018/05/10(木) 00:36:27.80 ID:yXMj8vMdM.net]
using エイリアス ディレクティブ でggr

423 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 01:45:10.65 ID:m/SOSTAZ0.net]
>>413
普通にdrawingのcolorとmediaのcolorがバッティングしてるじゃん
それと自作のcolorとこれまた別の奴の作ったcolorがバッティングするだけでもう面倒臭くて死にそうになる

424 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 01:55:25.02 ID:m/SOSTAZ0.net]
もっというとwpfでも別のcolor作ってんじゃん
バッティングうぜぇんだよ

こんな簡単なクラスでもう再利用効かないんだから名前空間まで作って管理するなよバカっタレかよ
当のMSからもうまともなことやってねぇっていうかできないんだから
いい加減ファンタジー設計はやめるべき
いや、もうファンタジーじゃないな
メルヘンの領域まで入ってる

425 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 02:19:31.02 ID:di97fd/ta.net]
>>415-416
何を言ってるのか意味がわからねいよ。

426 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 02:30:05.52 ID:yIfUPK8/0.net]
この程度で死ぬほど面倒臭がってたら、プログラミング自体が向いてないな。



427 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 04:06:02.42 ID:R4f/WJPq0.net]
C#8.0のpreviewきましたねえ
https://github.com/dotnet/csharplang/wiki/vNext-Preview

428 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 07:27:01.34 ID:1WB9uyi8M.net]
>>417
バカじゃん
何でwinformにcolorあるのにwpfでも作ったの?
再利用できてないじゃん
役に立たないじゃん
名前空間分けてそれで?
新しいもの作ったら元気一杯に捨ててるじゃん

ってとこに集約する

429 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 07:37:29.76 ID:CKE2Ak/10.net]
Color構造体とColorsクラスの事かな?

430 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 07:48:33.05 ID:M9xdMPFN0.net]
こいついつものアレだろ
触るな

431 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 08:08:52.60 ID:1WB9uyi8M.net]
>>422
反論できないならcolorクラスはもう作らせないぞ

432 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 09:17:58.68 ID:l4uhHAvqa.net]
全く話題になってないけどC#7.3も正式リリースされたぞ
念願の where T : Enum

433 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 09:36:24.91 ID:EV77m/Hv0.net]
>>423
> それと自作のcolorとこれまた別の奴の作ったcolor

> バカじゃん
> 何でwinformにcolorあるのにwpfでも作ったの?

え、なんで自分でcolor作ったの?

434 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 09:51:09.75 ID:2wmh3oy2M.net]
>>425
触るなって言ってんだろテメーマッチポンプか?
それとも別種の頭かわいそうな生ゴミか?

435 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 10:30:56.59 ID:Yjx9MaDJp.net]
つか、同じ名前で違う用途に割り当てる方が難儀だろ普通は名前変える。

436 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 12:33:21.16 ID:kan/O/6Ed.net]
>>427
だから世の中にどんだけクラスが存在すると思ってんの?



437 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 12:51:46.30 ID:YLAKf1v1a.net]
普通の初心者だったらSystem.IOのPathとWPFのPathが競合することが気になると思う

438 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 12:53:40.23 ID:YLAKf1v1a.net]
イギリスだったらつづりはcolour

439 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 19:43:14.60 ID:M5rAF93d0.net]
コロワァ

440 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 20:53:17.15 ID:Yjx9MaDJp.net]
>>428
自前クラスを組み込むクラスの組み合わせだけ考えりゃよかんべよ。

441 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 22:10:03.44 ID:R4f/WJPq0.net]
>>432
日本語で

442 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 00:30:31.25 ID:F4aYSsq30.net]
>>425
WPF「WinFormなんて爺さんのクラスなんて使えるかよ」

443 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 00:58:40.04 ID:TW3IXpUfa.net]
>>434
WinFormsが定年間近の爺さんだとしたらWPFは35歳無職童貞だな

444 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 13:52:55.21 ID:sq5ITweXM.net]
drawimageって自分でクリッピングしないとはみ出たら遅い?

445 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 14:13:09.38 ID:NZxgVNkdp.net]
formとwpfで、似て非なる部品ってどうにかならんの?
ネットで使い方調べる時、紛らわしいんだよな。

446 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 14:36:21.57 ID:SfoScckv0.net]
>>434
UWP「そろそろWPFさんにはご退場願おうか」



447 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 15:23:07.83 ID:oUtXC/5od.net]
>>438
メーカー「そろそろUWP用のコントロールつくっか?」

448 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 16:30:16.71 ID:DPTi05MZM.net]
親フォームからnewした子フォームは親とは非同期ですか?それとも同期処理となりますか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<310KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef