X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ドコグロ MM2f-DHp5)
垢版 |
2019/07/16(火) 15:36:23.74ID:i1fbuZ/pM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

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

■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/

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

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0675デフォルトの名無しさん (ワッチョイ 4dde-YXlV)
垢版 |
2019/09/19(木) 13:00:06.50ID:cKzRnh020
>>674
なるほど
地道にやってんすね

やってみた感じ
文字数から行数出した方が楽だったのと
検索しながらは検索文字列に改行コード入ると面倒だったので

@検索文字列のヒットした文字数を出す
A文字数に対する行数を出す

の順でやりました
ありがとう御座いました
0676デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/19(木) 14:17:59.08ID:R2S0qhpOa
何言ってるのかよく分からんかったけど、

文字数 ⇒ 一致部分の最初の文字のインデックス
行数 ⇒ 一致部分の行の行番号

ってことかw

数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする
メソッドは存在しないんだね。
0677デフォルトの名無しさん (ワッチョイ 11da-7ma+)
垢版 |
2019/09/19(木) 14:45:37.14ID:6IKimtYb0
検索一致箇所までの文字列を切り出して
改行でspritして要素数から行を得るというのはどうかな
折り返しは考慮されないけどね

あとtextboxなら折り返し込みで
文字インデックスから行に変換する
メソッドがあった気がする
0678デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/19(木) 14:58:17.90ID:R2S0qhpOa
検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。
RegexかString.IndexOfでベタにやった方が
0680デフォルトの名無しさん (ワッチョイ 11da-7ma+)
垢版 |
2019/09/19(木) 15:41:06.68ID:6IKimtYb0
ググったらreplaceを使ってlengthの差で求める方法があったけど
これも一時的にメモリ上で二重化されるから
巨大なログファイルとかだとあまりいい方法ではないな

IndexOfの検索結果を次の検索開始インデックスにしながら
カウントするのが一番楽で無駄がなさそうだ
0681659 (ワッチョイ 6ed8-U1xq)
垢版 |
2019/09/19(木) 21:16:22.29ID:sYHr9xpc0
自己解決
MTPデバイスへのショートカット(.lnk)をメモ帳で開くと見えるリンク先
(こんなの→"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_12d1&pid_1031&mi_00#7&22311cc4&0&0000#{6fa27828-a61a-4555-ba33-f28f495d4f31}")
をProcess->Start()にそのまま突っ込んだら、エクスプローラが起動してMTPデバイスを開いてくれました。
ちなみに、テキストの末尾に(〜5d4f31}\内部ストレージ\Android")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。
0682デフォルトの名無しさん (ワッチョイ c95f-ACnl)
垢版 |
2019/09/20(金) 00:06:22.05ID:Z+Dr4fZe0
private class Parameter
{
public DateTime setTime { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string address { get; set; }
public int sex { get; set; }
}
↑のParameterのListデータで
setTime,Name,Ageが重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので
簡単で早く処理できる方法はないでしょうか?
0684デフォルトの名無しさん (ワッチョイ 217b-qZEh)
垢版 |
2019/09/20(金) 00:15:52.99ID:MWgaILTA0
>>682
個々の要素参照するんだからループするしか無いんじゃないの
あらかじめどこか他にデータ持っているのならともかく
簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる
0686デフォルトの名無しさん (アウアウウー Sa85-9Tgq)
垢版 |
2019/09/20(金) 00:20:11.39ID:H/0RNa6Fa
>>682
普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから
効率よくしたいならHashSetを使うといい
ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある
0690デフォルトの名無しさん (アウアウウー Sa85-9Tgq)
垢版 |
2019/09/20(金) 00:34:05.25ID:H/0RNa6Fa
>>687
Microsoft Docs見てきたが明言はされてないのか……ただ
https://docs.microsoft.com/en-us/dotnet/api/system.object.gethashcode ではDictionaryなどで使われるとあって
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.hashset-1 ではDictionaryのKeyアクセスと同様のハイパフォーマンス集合操作を提供、とあるから
HashSetで扱う型についてもGetHashCode()の実装は必要なはず
0691デフォルトの名無しさん (アウアウウー Sa85-TrZH)
垢版 |
2019/09/20(金) 00:41:13.96ID:WJxc7oYHa
>>689
質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど
0693デフォルトの名無しさん (ワッチョイ c95f-ACnl)
垢版 |
2019/09/20(金) 00:58:18.71ID:Z+Dr4fZe0
あるサイトを参考にしてみたのが
private class Parameter
{
public DateTime setTime { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string address { get; set; }
public int sex { get; set; }
}


private class ParameterDistinct : IEqualityComparer<Parameter>
{
public bool Equals(Parameter i_lhs, Parameter i_rhs)
{
if (i_lhs.setTime == i_rhs.setTime && i_lhs.Name == i_rhs.Name && i_lhs.Age == i_rhs.Age)
{
return true;
}
return false;
}

public int GetHashCode(Parameter i_obj)
{
return i_obj.setTime.GetHashCode() ^ i_obj.Name.GetHashCode() ^ i_obj.Age;
}
}
0694デフォルトの名無しさん (ワッチョイ c95f-ACnl)
垢版 |
2019/09/20(金) 01:02:47.93ID:Z+Dr4fZe0
//データ追加
var ParameterList = new List<Parameter>();

//重複排除
ParameterDistinct qualityComparer = new ParameterDistinct();
IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer);

でやってみたんだけど重複がでたんだけど何かまずいだろうか
参考にしたところはDatetimeは使っていなかったので駄目なのかな
0698デフォルトの名無しさん (ワッチョイ 0279-Ms+D)
垢版 |
2019/09/20(金) 01:35:53.41ID:JBznBYO/0
ライブラリ作ってるわけでもないのにunsafeとか論外なんだが

その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ
どうせHashSetのパフォーマンスに大敗する
0700デフォルトの名無しさん (ワッチョイ aeda-Ms+D)
垢版 |
2019/09/20(金) 11:53:09.00ID:URFVhEsV0
git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。

現在Onedrive使ってますが、binやobj配下まで同期されるのが残念な感じ。
binやobjの出力先はWPFプロジェクトなら変更できましたが、ASP.NET coreプロジェクトでどう変更するのか不明

VSTSで上記を実現または他の方法あったりしますか?
ちなみに現在はVS pro サブスクリプションに入ってます
0703デフォルトの名無しさん (スッップ Sd22-wC8D)
垢版 |
2019/09/20(金) 12:02:42.34ID:bfuJBtmYd
svnを使う
onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする

なんでonedriveはokでgitがngなのかがわからんと提示しづらい
0704デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/20(金) 12:48:37.25ID:uLmjcKMSa
OneDriveって特定のフォルダだけ同期しない設定にできないのか

6,7年前にオンラインストレージが流行った時には
タダで大容量で高機能のがいっぱいあったのになんだか退化してるよねw
0705デフォルトの名無しさん (ワッチョイ 4605-Mu6I)
垢版 |
2019/09/20(金) 12:56:56.83ID:uH7l3KIr0
labelの文字列の一部を太文字にしたり色を変えたりといった表現をしたいのですが
何か良い方法はないでしょうか?
コントロールではなくメインプログラムのほうで操作できるようにしたいです
labelと同じ見た目ならなんでもよいです
textboxの様な感じではなくlabelのような感じが目標です
0706デフォルトの名無しさん (ワッチョイ fe7c-plfC)
垢版 |
2019/09/20(金) 13:13:16.41ID:WW0nVoDA0
のような感じと言われてもどういうのがNGでどういうのがOKなのかよく分からんが
手軽なのはRichTextBoxを使うことで
そうでなければPaintイベントで全部自前描画ということになる
0707デフォルトの名無しさん (スププ Sd22-J2vi)
垢版 |
2019/09/20(金) 14:28:02.26ID:9RWO75b+d
>>700
ちと面倒だけど、ブランチとか使えるのが便利だから、サーバ立てるまでOneDriveのフォルダ上にgitのリポジトリ作ってた事がある。
OneDrive内の任意のフォルダの中でgit init --bareするだけ。
したら、そのフォルダをremoteとして登録出来る。
あとは任意のタイミングでpush/pullするだけ。

作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。
(競合したら「もとのファイル名-端末名」ってファイルが大量にできる)
0709デフォルトの名無しさん (ワッチョイ 6990-jgJV)
垢版 |
2019/09/20(金) 17:01:09.25ID:9F0x+J+E0
メモリ消費は税のようなもの
しょとくだけに
消費だけに
0711デフォルトの名無しさん (ワッチョイ 6e7b-25Vu)
垢版 |
2019/09/20(金) 19:53:22.57ID:+tHFIfxx0
>>705
自分で描画するのはメソッド作るのも指定するのもめんどくさいよ
https://dobon.net/vb/dotnet/graphics/measurestring.html#section1
>>706の言う通りRichTextBoxをBorderStyle.Noneにして背景色を合わせた方が楽じゃないかな
どうしても文字以外を透過させたいとかならともかく
>>710
HTMLのテーブルとExcelの表が同じに見えるのならそうかもね
0712デフォルトの名無しさん (ワッチョイ c245-Iqd1)
垢版 |
2019/09/21(土) 10:00:25.29ID:DmWWMvK20
コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか?
目標は外部のファイルを読み込んでコンバートするアプリを作ることです。
0714デフォルトの名無しさん (アウアウエー Sa0a-o9zd)
垢版 |
2019/09/21(土) 11:05:31.91ID:wLZyePcca
プログラミング未経験者です
すいません、ちょっと趣旨から外れるかもしれませんが質問です

電気(強電)、計測(コンビナートとかのプラント計装)の知識ってC#で活かせますか?

C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました
0716デフォルトの名無しさん (アウアウウー Sa85-TrZH)
垢版 |
2019/09/21(土) 11:42:35.85ID:uzyGV4kra
>>714
FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ
0721デフォルトの名無しさん (ワッチョイ ae2d-Z796)
垢版 |
2019/09/21(土) 14:57:58.99ID:8edEcM0R0
すまんが、スレッドを指定して実行ってできないもんなの?
指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう
0726デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 17:41:38.79ID:dMKiDHPTa
>>724
どんな使い方を想定してるの?
っていうかそれ、呼び出されたアンマネージド関数側はどうしたらいいの?www
0728デフォルトの名無しさん (ワッチョイ 4d0c-Ms+D)
垢版 |
2019/09/21(土) 17:57:47.91ID:rw4WtgZd0
まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って
Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね
SystemParametersInfoとかでそういう欲求があること自体はわかる
0731デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 18:32:15.65ID:dMKiDHPTa
十分突飛だと思いますけどね。

これ、アンマネージドに限らない。
マネージドだろうが、他のアセンブリで既に定義されてる
非ジェネリックなstaticメソッドをジェネリック化したいと言ってるのと同じ。

だから、呼ばれた側は何すりゃいいんだよw
0733デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 18:44:55.69ID:dMKiDHPTa
>>732
そういうのは共用体とかオーバーロードで解決できるでしょ。
ジェネリックを使うって発想は意味不明だよ
0734デフォルトの名無しさん (ワッチョイ 1124-JE5y)
垢版 |
2019/09/21(土) 18:46:58.39ID:3kDOCDXv0
>>726
具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています
なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと
0735デフォルトの名無しさん (ワッチョイ 4d0c-Ms+D)
垢版 |
2019/09/21(土) 19:46:47.84ID:rw4WtgZd0
一例としてはこんな感じ

APIの想定される構造体がBlittableのみならマーシャリング不要なので
unmanaged制約にしてアドレス渡しの方が効率は良い

public static T GetSystemParametersInfo<T>(SPI uiAction, uint uiParam, SPIF fWinIni) where T : struct {
  T value;
  var buffer = Marshal.AllocCoTaskMem(Marshal.SizeOf<T>());
  SystemParametersInfo(uiAction, uiParam, buffer, fWinIni);
  value = Marshal.PtrToStructure<T>(buffer);
  Marshal.FreeCoTaskMem(buffer);
  return value;
}

まあぶっちゃけお行儀的にはオーバーロードだらだら並べる方が正解ではあるんだけどねw
0746デフォルトの名無しさん (ワッチョイ 829f-cF+R)
垢版 |
2019/09/22(日) 09:28:54.26ID:p/RNYxc40
>>726
dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ
C#はそういうのをコーディング段階で防いでるだけであって
0747デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/22(日) 12:11:14.62ID:PittLpUUa
>>746
〜だろ
馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww
0748デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/22(日) 12:16:38.76ID:PittLpUUa
少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、
longをint2つと透過的に扱ったりするための仕組みじゃありませんwww

だからそういうのは共用体やオーバーロードを使うんだってw
0750デフォルトの名無しさん (ワッチョイ 02e0-jgJV)
垢版 |
2019/09/22(日) 22:36:43.63ID:584djEVu0
BitmapをBitmapDataにしたいのですが、使用されたパラメータが有効ではありませんと言われてしまいます。
ファイルから読み込んだbitmapは変換できるのですが、このようにコード上で作ったbitmapはダメです。
何がいけないのでしょうか?

Bitmap trimBmp = baseBmp.Clone(rect, baseBmp.PixelFormat);
BitmapData bitData = trimBmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
0752デフォルトの名無しさん (ワッチョイ 02e0-jgJV)
垢版 |
2019/09/22(日) 22:53:39.23ID:584djEVu0
>>751
baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね?

でも
Bitmap bmp = new Bitmap(100,100)
みたいな素画像でもやっぱりLockBitsできないです
0753デフォルトの名無しさん (ワッチョイ 6e7b-25Vu)
垢版 |
2019/09/22(日) 23:53:45.92ID:yl5BH+I+0
>>752
>trimBMPにとってはrectは全面
ではなくbaseBmpのrectの範囲って自分で指定しているよね
BitmapData bitData = trimBmp.LockBits(new Rectangle(0, 0, trimBmp.Width, trimBmp.Height), ImageLockMode.ReadOnly, trimBmp.PixelFormat);
>Bitmap bmp = new Bitmap(100,100)
>みたいな素画像でもやっぱりLockBitsできないです
できる。そっちもちゃんと引数の指定してみて
0754デフォルトの名無しさん (ワッチョイ a207-vIUH)
垢版 |
2019/09/23(月) 01:34:07.15ID:CAyWI0VB0
private Point CalcPopupLoction(Form launcher, Form popupForm) {}

ボタン押したときに上部に表示する モーダルな popup フォーム の位置を計算するメソッドを書きました。

ボタンが左の方にあると、親フォームの左枠をはみ出さないように、popupForm は左揃えで表示。
真ん中へんにあると中央揃え、右端ならボタンとpopupForm を右揃えで表示する感じです。

1つ目の引数の良い名前が思い付きません。
主にボタンを想定してる引数です。
launcher (発射台)はどうもしっくりきません。
parent や baseForm はなんかおかしいのでやめました。
0755デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 03:14:26.31ID:QdBzCxoka
>>754
そもそもそんなメソッドいらんでしょ。

ポップアップがどこに表示されるべきかはボタンを持つFormが知っているんだから
そいつに聞く(そいつのプロパティーとして実装)のが一番
0756デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 03:28:32.57ID:QdBzCxoka
あー、右に揃える場合もあるのね。
じゃあボタン持ってるFormに

void ShowModalPopup(Form popup)
みたいなメソッドを持たせればいい
0758デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 03:56:41.99ID:QdBzCxoka
本当はボタン持ってる方のFormに
interface IDialogOwner:IWin32Window
{
  HorizontalAlignment DialigHAlignment { get; }
  Rectangle Rectangle { get; }
}
みたいなのをかぶせて、Popupする方のFormでShowDialogをオーバーロードして
void ShowDialog(IDialogOwner owner)
みたいにするのがいいのかも。

酔っぱらってるんでよく分からなくなってきたw
0759デフォルトの名無しさん (ワッチョイ a211-2BIS)
垢版 |
2019/09/23(月) 08:49:12.84ID:l2jPGLgc0
C#でawaitに対応していないメソッドをawaitで非同期実行できるようにする方法を教えてください.

以下のようにしてもActionが実行されませんでした.
private async static void SomeHandler()
{
Console.Write("Burn");

await new Task(new Action(() =>{
Console.Write("[Start]");
Thread.Sleep(2000);
Console.Write("[Completed]");
}));

Console.Write("End");
}
0761デフォルトの名無しさん (アウウィフ FF85-9GzD)
垢版 |
2019/09/23(月) 12:17:14.67ID:3qdqqJ07F
bitmapinfo とか
dibsection とか
bitmapinfoheader とか
勉強してみたら
0764デフォルトの名無しさん (ワッチョイ c135-2BIS)
垢版 |
2019/09/23(月) 15:46:49.67ID:s6/Kehza0
>>763
ありがとうございます!
0767デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 22:40:56.88ID:6ZQTgZjHa
>>766
交通整理バカw
設計が間違ってるのに名前付けて何の意味がある
0770デフォルトの名無しさん (ワッチョイ 0279-McVF)
垢版 |
2019/09/24(火) 00:01:07.45ID:OEzHH54a0
>>754
・Loctionて何
・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う
・計算だけなら全部Rectangleでいいんじゃないの
Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup)
0771デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/24(火) 00:03:53.21ID:ftn8dtDua
>>769
だからさ、そのメソッドをどこに書くおつもり?

ポップアップを左右どちらに寄せるべきかを知ってるのは特定のFormだけのはずなのに
その例のllauncherの型がFormってのは変じゃないか?

そもそも何で「左右どちらに寄せるべきかを知ってる」奴のメソッドとして実装しないの?
それなら引数で渡す必要ないと思うんだけど。
0772デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/24(火) 00:09:30.85ID:ftn8dtDua
>>770
必要な情報は

(1) 左右どちらに揃えるか?(HorizontalAlignment)
(2) 揃える位置のx座標

だけだね
■ このスレッドは過去ログ倉庫に格納されています

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