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

■ このスレッドは過去ログ倉庫に格納されています
2021/05/16(日) 10:45:59.00ID:8qTwOc620
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/06/09(水) 07:41:07.30ID:T7a0fZeMd
>>265
雑誌はベーマガだった
2021/06/09(水) 07:59:02.17ID:1IFZDN1pM
>>262
昔と違って覚える範囲が広いから
最初はセミナー受けた方が楽じゃね
2021/06/09(水) 08:39:45.92ID:y9xSvLES0
>>267
事前学習無しでセミナーなんて金をドブにすてるだけ
入門書でも買っていくらか触ってみて疑問点をまとめてからうけるべき
2021/06/09(水) 09:56:27.08ID:1IFZDN1pM
あーはいはいそうですねー
2021/06/09(水) 10:29:54.65ID:tFTHFIz/0
質問です
System.Numerics.BigInteger型の整数を小数含めたfloatで乗算したいのですが、何か方法はありませんか?
2021/06/09(水) 11:07:43.11ID:m05KcYPg0
ASP.NETで作ったWEBアプリにグラフ追加したら、iOSでボタン押しても動作しなくなった。
原因分かる人いる?
2021/06/09(水) 11:09:12.94ID:aIWwtEZD0
グラフ追加したからじゃないかなあ
2021/06/09(水) 12:29:29.59ID:paDfdrYmM
>>270
doubleやdecimalで収まる程度の桁数なんだったらそれらに変換してから計算すりゃいい
収まらないんなら必要な精度を決めて予めfloatの方を10^n倍して整数化した上でBigIntegerに入れて乗算するとか
2021/06/09(水) 12:42:27.77ID:A3ai3bJf0
>>270
無駄に頑張っても疲れるし外部のライブラリを使うのが楽
BigDecimalとかでググれば色々見つかるよ
2021/06/09(水) 12:54:22.23ID:RdncRzI4a
>>270
(1) 与えられるBigIntegerの値の範囲
(2) 演算結果として欲しい型と精度

まずこういう要件を定義しないと何とも言えないのでは?
こまけーことはいいんだよならdoubleにキャストして演算するだけだろうけど
2021/06/09(水) 22:22:16.62ID:yp9eglBe0
form1にTabControlとボタン2つ配置。
ボタンはnextボタンとreturnボタンとしてボタンのclickに応じてtabpageを切り替える処理がしたいです。
※処理※
起動時tabpageは最初のページ。nextで次ペ頁、 returnボタンで1つ前の頁。
最終ページでnextなら最初の頁。最初頁でreturnならformを閉じる。

それぞれのボタンのイベントに処理はネットみて書けたんですが、うまいこと一つにまとめる方法が知りたいです。
2021/06/09(水) 23:05:51.15ID:7RnwuUIHa
うまいこと一つにまとめる、とは?
2021/06/09(水) 23:09:38.53ID:qAo90TQX0
剰余演算子をうまく使ってくだせえ
2021/06/10(木) 01:08:35.30ID:M7C9mR8+0
タブに順番なんかあったっけ?
ユーザーがドラックしたら移動できんかったか?
2021/06/10(木) 08:39:52.59ID:+OLSGNkTa
>>276
ボタンのイベントを同じメソッドにしてその中のsenderで処理を分ける
2021/06/10(木) 11:33:53.07ID:rur9wo/n0
class c {
public byte[] arr;
}

foo = new c(){
arr = new byte[10];
}

var ff = foo.GetType().GetFields(
BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.GetField
);

var f = ff[0];
var v = f.GetValue(foo);

この時 v は byte[] になりますが、v[0] にアクセスしたい場合はどうコーディングするのでしょうか。
そのままv[0]とすると、object型に[]を付けられないとエラー表示されます。

var zz=(byte[])v;
var z = zz[0];

とすればアクセスできる事は確認していますが、byte 部分が不明でもアクセスできるようにしたいのです。
2021/06/10(木) 12:01:03.65ID:GQazDyFH0
型が分からないのに配列でアクセスできるわけないだろ。
型制約でも付けてみれば?
2021/06/10(木) 12:04:21.64ID:rur9wo/n0
自己解決
var zz = (Array)v;
var z = zz.GetValue(0);
2021/06/10(木) 22:54:11.27ID:ZEfq1fzk0
ちょっととりとめのない質問なんですけど
社長が取ってきた仕事でどっかの会社が作ったC#アプリをうちの会社で修正するという仕事の担当になりました

んで中を調べてたら
edmxって言う拡張子があって
それがEntityFrameworkと言うことがわかったのです

データベースももらってきてビルドしたら通るように放ったのですけど
edmx内にあるcsファイル?(ッポイやつ)を開こうとしたらビルドエラーになってデザイナーが表示されなかったり
なんだか訳がわからなくて・・・

EntityFrameworkを猫でもわかるように解説してるところってないですか?
2021/06/10(木) 23:13:12.60ID:RKq3rAMR0
只のXMLなので開いてみるべし
2021/06/10(木) 23:28:07.46ID:0U76cbOA0
というか。
それはきちんと全てのファイルを開ける状態を要求しなければダメなパターンでは。

ああ。無駄な要求だと言うことは分かってるけど。
2021/06/11(金) 00:22:08.49ID:6smqcHVx0
EF3のModel Fistとかだったり…
2021/06/11(金) 00:58:16.80ID:kVdsE3UJ0
public class PropertyCls {
public int PropertyInt{ set; get;}
}

class Program {
static void Main() {
PropertyCls p = new PropertyCls();
p.PropertyInt = 32;
Console.WriteLine(p.PropertyInt);
}
}

GetSetの壁にぶち当たってます。調べてもこんなコード等しか出てないし使い所が分かりません。
Mainの中にint p=32で終わりじゃんとか思えないんですが...
ひとつじゃ使わないけど、PropertyIntの他にもNameとかAgeとか複数の構造体?風な事が変数風?に出来るよって感覚ですか?
社員番号とかの例とかよく見ますが、他によく使うパターンとか教えて下さい。
2021/06/11(金) 01:06:01.10ID:qvzRqpry0
xmlファイルと言っても開いてどうなるのでしょうか・・・

とりあえずドキュメントは取説だけあって
doxygenでクラス関連図とか抜き出してみたけどコメントないし名前の付け方も訳がわからないので動かしながら見るしか無いという地獄・・
Totigiとかそんな感じのクラスがあって・・・
2021/06/11(金) 01:34:48.60ID:rjcQbITm0
>>288
無理して使う必要はないよ
以上
2021/06/11(金) 03:39:29.02ID:SAQrE1k60
つかなんで使いどころがないと進めないんだ?
学校の勉強でいちいち使いどころとか考えてたか?
2021/06/11(金) 07:17:53.54ID:oCvSjx8Y0
getsetなんか俺はゴミだと思う
2021/06/11(金) 09:38:54.03ID:Pc6dU7Wud
get setは構造化の基本
データの塊はこーゆー設計がいいよねって話

データの塊なので、利用、登録は意識しない
(なるべく他に依存しない)

ただ、オブジェクト指向だからって、車のネジ一本から作るのは間違い
そのアプリが目的としている形のオブジェクトでいい
トラックなのか乗用車なのか、とか、車なのか電車なのか
2021/06/11(金) 10:22:39.64ID:N5qPgvwKM
×構造化
〇カプセル化(情報隠蔽)
2021/06/11(金) 10:48:58.40ID:Pc6dU7Wud
すまんね。
ただ「プログラムの構造・設計」って意味で言ったので間違ってないよ
(俺自身は隠蔽する意味を見出していない、日本語訳が間違ってるだけ?)

ちなみに、質問者のプログラムだと、登録と利用が同時に行われてるので、get setの意味は全く無い
意味ないと思うのは当然
2021/06/11(金) 12:12:38.48ID:WhHgYbh2a
訳分からん俺様用語を使っている時点で本当は自分で何も調べてもいなければ
他人とコミュニケーションする意思もないことは明白。

getsetの壁って何やねんw
2021/06/11(金) 12:36:14.35ID:9brEePq50
>>288
初心者の域をでない俺だけど
そういう理屈っぽい所理解したいなら
ちゃんとした書籍買って読むといいと思うよ
その辺順を追って説明されてるから
2021/06/11(金) 12:57:23.03ID:/Ldzrd4UM
>>288
社員番号、入社年度、年齢、性別とか沢山の項目があるなら構造化する
ひとつならたいして意味ない。ただし項目によってはValueObjectにしたほうがいいかもしれない。

で、入社年度から在籍年数をクラス内で計算してgetできるようにするとか。そういったロジックをクラスに用意する。

ただこういうクラスの場合はsetを使うより
コンストラクタで渡すほうがよい。
で、get; private set;
にする
2021/06/11(金) 13:05:02.82ID:FNOyhnqL0
>>298
今はコンストラクタで初期化するならprivate setは不要
2021/06/11(金) 14:47:45.55ID:Pc6dU7Wud
わかったよ
入門者はget setに注目してるから、訳がわからなくなるんだな

大事な方は、データの塊の持ち方であって、取り方入れ方は副産物

本来はgetって書いてあるから取ってるんだねって一発でわかる様になってたが、今は書かない様になったから、getメソッドのメリットが薄くなってる
2021/06/11(金) 14:55:57.07ID:gX7+uLUh0
>>288
「GetSetの壁」より先に
「公式リファレンスの壁」を越えるといいよ
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-properties
2021/06/11(金) 15:00:19.14ID:hChWWabk0
根本的な疑問は
プロパティじゃなくて(公開)フィールドで良いんじゃないか、ってことじゃないのかね
2021/06/11(金) 16:12:18.68ID:OoWb95ZEa
>>302
恐らくその通りだと思うけど、聞いてる方も答えてる方も
コミュニケーション能力が低すぎてなんか滑稽なことになってるねw

そして、これが肝心だけど、そういうことなら普通
こんなところで質問する前に「プロパティ フールド 使い分け」
とかで検索する。

getsetの壁とか訳わからんこと言ってることから分かるように、
この質問者さんは普通の人がまずやることを何もやってない。
2021/06/11(金) 18:01:38.21ID:SAQrE1k60
コミュニケーションの壁を感じますね(適当)
2021/06/11(金) 18:06:02.90ID:snOiqcmLd
俺がコミュ症とはひどいなぁ(文才が無いだけ)
人生口先だけで生きてきたよ
それは置いといて

質問者は「Mainの中にint p=32」と言ってる時点で、データ外出しに気づいてないなと思ったよ
2021/06/11(金) 19:22:00.59ID:+sJHqm0v0
>>288
この例ではpを表示してるのは確認の為で主目的ではないね

プロパティはクラスのフィールドみたいな物
フィールドはクラスの変数で、寿命はクラスを作ってから破棄まで
例えば、個人情報のクラスなら住所や電話番号がフィールド

いくつかの理由でフィールドに直接アクセスするのは良くないとされている
つまり
✕personal.phone=09012345678とかnum=personal.phone
○personal.SetPhone(09012345678)やnum=personal.GetPhone()

でも下の表記はクラス側にSetxxx/Getxxxを書かなくてはならず詰まらないコード量が増える

そこでC#は呼出側は上の記述が使え、クラス内では最低限のコード量で書くプロパティが考案された
2021/06/11(金) 19:52:45.88ID:95OnglC4d
以前は{ get; set; }って記述は出来なかったよね。
必ずprivateの保存先に読み書きしたり、なんかロジックとか固定値で値を返したり。
さらにラムダ式とか多様な定義が出来るようになったから、着いていけない人も居るのかも。
自分も自信ない。無駄な書き方してないだろうかと。
2021/06/11(金) 20:13:06.43ID:rguC8k2o0
ここは
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」
だからな

>>288は、まずプロパティという概念を理解できているのか?
そしてそれがC#ではどのように実装されるのかを理解できているのか?
(今のC#のプロパティにはいろんな書き方ができるのでわかりにくい)

その上でフィールドとの使い分けなら
クラスの外部に公開するものはプロパティにする
単純に値を格納するだけのもの以外はプロパティにする
が基本方針だと思えばいい
2021/06/11(金) 20:37:00.28ID:fG/j16u90
アルゴリズム云々じゃなくてとりあえずコーディングの練習したいときの手軽な問題って何があるかな?

今は競技プログラミングの簡単な問題を最近の記法使いつつ解いてるのだが他に何かあれば知りたいです
2021/06/12(土) 00:34:16.72ID:5WmNz19V0
>>309
テトリスでいい
2021/06/14(月) 11:10:57.15ID:pnoKn6oo0
Debugger.Breakメソッドってリリースビルドで落ちますか?
2021/06/14(月) 11:30:41.88ID:pnoKn6oo0
とりあえず
Debugger.isAttachedで解決しました
313デフォルトの名無しさん (ワッチョイ ff05-W6T4)
垢版 |
2021/06/14(月) 20:09:02.57ID:BmiJqBp+0
株価チャートは作れますか?
2021/06/14(月) 20:10:32.46ID:mg3Aqqn/M
作れるけど自分で使う用ならPythonの方がいいよ
2021/06/14(月) 23:03:12.79ID:JUMQWHQ70
Python遅くない?
2021/06/15(火) 02:51:49.51ID:sfSEzJaG0
完成するまでの時間を考慮すればペイするよ
初心者がC#で完成させるのは不可能だから、速度はゼロだ
2021/06/15(火) 06:00:09.68ID:KK4WQfQVd
Pythonとjupyter notebookですぐに欲しい結果が出せるのが良いよね。
実効速度で比較する意味はないってことか。
2021/06/15(火) 07:49:35.29ID:KkBjFpYc0
>>314
ありがとうございました。
2021/06/15(火) 09:42:34.43ID:7x06OJH8M
そもそもグラフィカルなアプリは人間の知覚や操作がボトルネックになるので、単純なコードの実行速度にはあまり意味がない
2021/06/15(火) 22:28:24.77ID:YIKkkAYj0
アプリの設定情報の保存がイマイチよくわかってない自分。
2021/06/15(火) 23:06:30.86ID:vcMBupBl0
<ブックリスト>
<アイテム id="11">
<タイトル>XML</タイトル>
<筆者>鈴木</筆者>
<カテゴリ>1</カテゴリ>
</アイテム>
<アイテム id="22">
<タイトル>WORD</タイトル>
<筆者>田中</筆者>
<カテゴリ>2</カテゴリ>
</アイテム>
</ブックリスト>
こんなxmlをID指定で読みたい。ID 22ならば、WORD、田中、2が得られるように。

調べると下のようなものが出てきました。指定で読み込みたいのでforeachでなく読んだ結果を直に欲しいです。(foreachの中身のような)
IEnumerable<XElement> infos = from item in xml.Elements("??") select item;
foreach (XElement info in infos){
info.Element("タイトル")
info.Element("カテゴリ)
}

指定で読むにはどうしたら良いですか?
2021/06/16(水) 00:27:44.40ID:/wNWjCZd0
findByIdはないです
なんで無いのかは知らないです
実用性を無視した意味不明なこだわりを持ってるライブラリ設計者っていますけど、たぶんその類だと思いますね
別の言語ですがElementTreeの設計に関しても似たような後継を見ましたね
XMLは変な設計者を引きつけるのかも知れない
323デフォルトの名無しさん (ワッチョイ ffe6-U+vn)
垢版 |
2021/06/16(水) 00:34:43.94ID:5mM/xZpb0
XPathで一発じゃんか
Linqはコレクション向けの機能だからな
2021/06/16(水) 01:16:30.17ID:jt20Rl6v0
>>321
読んでみないとわかんないじゃん?
だから全部読むよ
id=22だけっつったって
ネスト入りのテキストである以上全部読まなきゃどんな構造かわからんよの
325デフォルトの名無しさん (アウウィフ FF67-U3V2)
垢版 |
2021/06/16(水) 17:36:15.53ID:uJQ6HHCXF
>>321
bs = BeautifulSoup(xml, features='lxml')
for item in bs.find(id='22'):
if type(item) != bs4.element.NavigableString:
print(item.text)
2021/06/16(水) 18:57:39.81ID:/wNWjCZd0
bsのfindはリストやシーケンスを返さないよ(Tag or Noneを返す)
よってTypeErrorで動かない
2021/06/16(水) 21:45:08.91ID:6jJilgqa0
Ruby, Nokogiri では、XML もHTML のように使える。
CSS セレクターも使える

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<root><books>
<book id="1">
<title>one</title>
</book>
<book id="2">
<title>two</title>
</book>
</books></root>
EOT

element = doc.at_css( "#2" )
puts element.at( "title" ).content #=> two
328デフォルトの名無しさん (ワッチョイ 8f67-MHI0)
垢版 |
2021/06/16(水) 23:24:04.21ID:nxmBk19h0
初心者だけどVBAのノリでgosub return使おうとしてコンパイラにエラー出されて悩んだ
goto使えるんならこっちも使えてもいいじゃん
2021/06/16(水) 23:38:57.75ID:5dGb7KxN0
>>321
var doc = XDocument.Load("BookList.xml");
var item = doc.XPathSelectElement("//booklist/item[@id='22']");
Console.WriteLine(item.Element("title"));
2021/06/17(木) 00:41:59.71ID:3qVDU9gDa
>>328
ローカル関数やラムダ式は使えるよ。
どうでもいいけどGoSubなんてまともな人はVBAでも使わないよw
そんなのは80年代の遺物だ
2021/06/17(木) 03:03:58.98ID:ZAUwj7CW0
質問失礼いたします。
0.5秒間隔に、3回連続で2枚の画像を交互に表示させたいのですが、2つ目の画像しか表示されません。
開発環境はVisual Basic Studio、言語はC#です。
プログラムは下記の通りです。
どうぞよろしくお願いいたします。

private void button1_Click(object sender, EventArgs e)
{

Timer timer = new Timer();
timer.Interval = 500;
timer.Start();

int count = 0;

pictureBox1.ImageLocation = @"ファイル名";

pictureBox1.ImageLocation = @"ファイル名";

if (count < 3)
{
count++;
}

else
{
MessageBox.Show("終了");
timer.Stop();
}
2021/06/17(木) 05:52:30.68ID:8FKshyx30
>>331
何が悪いとかのレベルじゃない
特定の行でF9でブレークポイントが設定できデバッグ実行を止めることができる
その後F10で一行ずつデバッグ実行を進めることができるから想定している動きになってるか確認することから始めた方がいい
2021/06/17(木) 05:54:28.97ID:Y5lXnysMd
>>328
特定の処理を呼んで返したいなら、メソッドに切り出せば良いんじゃないのかな。
2021/06/17(木) 15:21:46.42ID:WS39elSMa
>>331
private bool mIsBusy = false;
private async void StartSlideShow()
{
  if (mIsBusy) return;
  mIsBusy = true;
  var dir = @"C:\Windows\Web\Wallpaper\Theme2";
  var names = new[] { "img7.jpg", "img8.jpg", "img7.jpg", "img8.jpg", "img7.jpg", "img8.jpg" };
  foreach (var name in names)
  {
    var path = System.IO.Path.Combine(dir, name);
    pictureBox1.ImageLocation = path;
    await Task.Delay(500);
  }
  mIsBusy = false;
}
2021/06/17(木) 16:07:14.40ID:tBktLRON0
>>330
いや、寧ろGoSub使わずに一つのサブルーチンにすべてを書くやつがコボラーの亡霊です
2021/06/17(木) 16:09:36.15ID:4w07t7GO0
ローカルメソッドはどうなんだろうね
外出せばいいじゃん派と他で使わないならローカルにしとけよ派で争うのかな
2021/06/17(木) 16:59:01.31ID:ooZzmu2N0
>>331
>>334ががっつり趣旨に沿ったコード書いてくれちゃってるので解決かもしれないけど
>>331のコードだと2つ目だけ表示されるのは正しい動作だぞ
コードとしてはボタンが押されたらタイマー設定のみ行って画像1を表示
待ち時間なく画像2を表示(同じものに上書きしているので結果として画像2だけ表示)
countは常にメソッドの中で初期化されるので永遠に終了ダイアログは表示されないし
timerも止まらない
イベントメソッドも存在しないのでTimerクラスを使った意味がない
っとプログラムとして成立していないよ
2021/06/17(木) 21:24:02.95ID:gnGFQr/W0
>>334
原型とどめてなくてわろす、でもそうじゃないんだ
2021/06/18(金) 08:14:42.61ID:CeuVWc4D0
if (mIsBusy)と returnの間にスレッドが割り込まれたら複数動いちゃうんじゃね・・。
2021/06/18(金) 09:03:58.05ID:kks5fFRD0
StartSlideShowはUIスレッドでしか呼び出されない前提だから問題ないよ
2021/06/18(金) 12:12:31.58ID:wj2zORhF0
他人のコードにケチつけずにはいられない、嫌われる人。
2021/06/18(金) 13:08:32.73ID:ApjvrmIoM
VisualStudioスレで質問しましたが回答を得られなかったのでこちらに投げ直します、よろしくお願いします

c#でWindowsFormのForm1(大きさ以外全てデフォルト)に
richTextbox(大きさ以外全てデフォルト)のコントロールを張り付けて以下のコードを実行

static void Main()
{
Application.Run(new Form1());
}

表示されたrichTextboxにイメージをペーストすると強制的に縮小されてしましまいます、richTextboxのサイズに依存せずすべて同じ大きさになります

どうして等倍で表示されないかの理由と等倍にする方法、又は倍率指定をする方法はありますか?

※キャプチャ画面 http://up-img.net/img.php?mode=jpg&;id=22425

参考1:vb.netでも同じ現象が起きます
参考2:クリップボードのイメージを縮小してからペーストしたところ画像は小さくなるのですが拡大してからペーストをしても同じ大きさのままで一定の大きさを超えることはありませんでした
参考3:イメージのハンドルをマウスカーソルでつかんで大きさを変えることは可能です
2021/06/18(金) 15:11:40.58ID:BPwODCTr0
テトリス作ってるんだけどおもしれー
もしググったら洗練されたコード出てきちゃってつまんなくなるから一切調べない方向で行く
オブジェクト指向って何ですか?っていうとんでもなく酷いコードなんだけど、とりあえず力尽くで作ってみる
2021/06/18(金) 15:15:28.22ID:IfPYq/+20
>>343
イイね!できたら教えてよ!!
2021/06/18(金) 15:25:02.03ID:BPwODCTr0
はぁ〜い 時間かかりそうだけど!
346デフォルトの名無しさん (ラクッペペ MMb6-tFUR)
垢版 |
2021/06/18(金) 16:37:12.93ID:tae+NGJOM
wpfのdatagridでmvvmでテトリス
2021/06/18(金) 17:29:10.97ID:2oHMGf83a
>>342
再現できんなあ。

コピー元アプリの方で縮小してるんじゃないの?
その問題のクリップボードの画像は、他のアプリ、例えばペイントにペーストした時には
ちゃんと原寸大でペーストされる?

画像サイズがデカい時、ワードパッドだと横幅に合わせて縮小されるけど、
RichTextBoxにそんな気の利いた機能が実装されてるとも思えんけど
2021/06/18(金) 17:35:41.01ID:CeuVWc4D0
DPIじゃねーの
2021/06/18(金) 19:34:09.02ID:sIt6goKIM
>>347、348
ペイント、エクセルでは等倍になりましたがOneNoteは少し小さくなりました
確かにDPIが関係していそうな気がするのでそのあたりを調べてみますね
2021/06/18(金) 21:14:08.05ID:sIt6goKIM
>>349
色々試してみたところ画像ファイル(jpg)を直接ドラッグしたりコピペした場合には画像が小さくなって、ペイントに一度貼り付けたものをコピペした時は等倍になるようです
つまりクリップボードの中身がファイル名だとなぜか縮小されて、イメージファイルだと正しくコピーされるようです、理由は解らないですがちゃんとイメージをコピーしていない自分のミスでした、すみません
ありがとうございます
2021/06/18(金) 21:18:17.98ID:CeuVWc4D0
マカーが作った画像じゃないの?DPIが72になってるやつ。
Windows標準は96dpiだから、同じ300ピクセルの画像でもdpi情報が72か96かで変な挙動した記憶がある。
テストに使ってる画像を右クリックして詳細タブの「水平/垂直方向の解像度」の値みてみ。

それとテスト画像を96dpiで作られてるもので試してみるとか
2021/06/18(金) 21:21:54.18ID:CeuVWc4D0
右クリックしてプロパティの詳細タブね
中段くらいにあるの「水平方向の解像度/垂直方向の解像度」
2021/06/19(土) 00:22:28.91ID:6GSPTGzeM
>>351
私もそう思って色々なDPIのファイルを試したのですけど全て同じ挙動なんですよね、大体は96か300あたりでした
逆に72は今のところはないようです

とりあえずPictureBoxに画像を読み込めば等倍でいけるのでそれで代用するしかないかなと考えています
2021/06/19(土) 11:19:41.98ID:aMtkyk0f0
再現はしたけど、解決方法は分からないなあ。
間接的な方法ではこんなのがあるかも。
1) RichTextBox の中に PictureBox を貼り付ける
2) コピー元によっては期待通りになるなら、一度別のコントロールに貼り付けた後にそこからコピペしてみる

RichTextBox.Rtf プロパティをどうにかするって投稿もあったけど、自分にはどうにもならなかった。
2021/06/19(土) 13:34:06.66ID:Dd96s04da
だから最初から言ってるけど、コピペにしろD&Dにしろ、まずソース側を疑うのが普通でしょ。
何でそれをやらないのか不思議でしょうがない。

ソース側がサムネイルを提供してるならサムネイルが表示されるのが正常な動作で受け取る側では
どうしようもない。

少なくともデータがビットマップなら勝手に縮小するような仕様になってないのは確かだ。
2021/06/19(土) 16:10:20.94ID:aMtkyk0f0
疑うソースがないからでは。
新規作成のプロジェクトに RichTextBox を張っただけで再現したし。
2021/06/19(土) 16:34:18.74ID:Dd96s04da
>>356
えっと日本語通じてますか?
2021/06/19(土) 16:42:34.90ID:uTQPbFOf0
通じるだけでいいのか?(挑発)
2021/06/19(土) 17:09:46.83ID:Dd96s04da
>>342の人がソース側(コピー元)に使っているアプリがそうなっているか分からないが、
コピーやドラッグ操作が行われた時、デスティネーション側に提供するデータが

(1) 元画像のファイル名
(2) その画像のサムネイル

この2つを含む時、ペーストまたはドロップされる側のアプリがどちらを優先的に受け取るかによって
何が表示されるかは異なってくる。

>>350に書かれているような現象が起こるとしたらこういう理由でしょうね。
2021/06/19(土) 18:35:19.62ID:21QoYkZn0
有料サービスかYahoo!知恵遅れを使いたまえ
2021/06/19(土) 23:50:18.43ID:c/Gc9inqM
>>359
ありがとうございます、350です、確かにクリップボードをみてみると同じjpgファイルでも
ペイントに表示させてからコピーしたものはイメージの形式がCF_DIBになっていて
エクスプローラからコピーしたものはCF_HDROPになっていました
予想ではrichTextboxはこのデータの形式によって挙動(優先順位もそうですが)が違うようで
CF_DIB(BITMAP)形式のデータを渡してあげないと等倍にはしてくれないようです

ここまでは教えて頂いて解ったのですがじゃあどうするかというとかなり難しいようで
スキル的にさっぱり解らないので今回は何か他の方法を検討してみようと思います
※ちなみにPictureBoxに表示させてからコピペしてもダメでした
2021/06/20(日) 02:16:25.90ID:ly1l4Yun0
普通にエクスプローラからコピペとかドロップしたら、ファイル名が表示される気がするんだが
詳しい環境と手順書いてくれ
2021/06/20(日) 08:47:45.77ID:j7B8ObuHM
>>362
解る限りですが……
VS:Version 16.7.2 win10 4K
ブラウザ:Chronme
手順は基本 >>342のとおりです、それ以外は特にいじっていないです
あとは下記2点で試しています
元ファイルはネットにある画像ファイル(不特定多数でなんでも)で
縮小は横幅が376(目読み 笑)ピクセル以上あればどれでも起こるようです
※PictureBox1.SizeMode = PictureBoxSizeMode.Zoom;と同じ挙動です

クリップボード内容はこれで確認しました
https://www.officedaytime.com/clipmm/

参考にしたのはここらへんです
https://www.atmarkit.co.jp/ait/articles/0012/19/news005.html
https://johobase.com/clipboard-get-set-csharp/
http://blog.esora.xyz/clipboard-auto-convert
https://docs.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats
https://dobon.net/vb/dotnet/system/clipboardformats.html

もちろんエクスプローラーからコピペしたものはファイル名も入っているのですが
前回その部分は割愛させていただきました
2021/06/20(日) 11:30:26.30ID:VCVOwR8e0
ここを見るといいと思う
https://weblog.west-wind.com/posts/2020/Sep/16/Retrieving-Images-from-the-Clipboard-and-WPF-Image-Control-Woes
2021/06/20(日) 13:09:02.38ID:ly1l4Yun0
RichTextBoxのEnableAutoDragDropはデフォルトfalseだから、そもそもドロップできないってのはおいといて

エクスプローラからRichTextBoxに(JPEG)ファイルをドロップやペーストしても
ファイル名が表示されるだけで、そこに画像が表示されたりしないだろって言ってるんだが

俺の環境だけか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況