ふらっと C#,C♯,C#(初心者用) Part144
■ このスレッドは過去ログ倉庫に格納されています
!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 >>672 その場合、テキストボックスでフォーカスを当てるための文字数って地道にカウントしてくしかないっすよね? >>673 基本的にそう テキストエディタとかはそんな感じで実装してる >>674 なるほど 地道にやってんすね やってみた感じ 文字数から行数出した方が楽だったのと 検索しながらは検索文字列に改行コード入ると面倒だったので @検索文字列のヒットした文字数を出す A文字数に対する行数を出す の順でやりました ありがとう御座いました 何言ってるのかよく分からんかったけど、 文字数 ⇒ 一致部分の最初の文字のインデックス 行数 ⇒ 一致部分の行の行番号 ってことかw 数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする メソッドは存在しないんだね。 検索一致箇所までの文字列を切り出して 改行でspritして要素数から行を得るというのはどうかな 折り返しは考慮されないけどね あとtextboxなら折り返し込みで 文字インデックスから行に変換する メソッドがあった気がする 検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。 RegexかString.IndexOfでベタにやった方が 文字数多いとsplitはパフォーマンス辛い可能性があるね regexもそれなりに… パーサー的なものなら頭から逐次処理するのが一番だったりするし ググったらreplaceを使ってlengthの差で求める方法があったけど これも一時的にメモリ上で二重化されるから 巨大なログファイルとかだとあまりいい方法ではないな IndexOfの検索結果を次の検索開始インデックスにしながら カウントするのが一番楽で無駄がなさそうだ 自己解決 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")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。 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が重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので 簡単で早く処理できる方法はないでしょうか? Parameter.Equals() をオーバーライドして 用意した HashSet<Parameter> foreach で Add() を呼ぶ >>682 個々の要素参照するんだからループするしか無いんじゃないの あらかじめどこか他にデータ持っているのならともかく 簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる なんか色々おかしかった ↓正 Equals() をオーバーライドして 用意した HashSet<Parameter> に対して foreach で Add() すればよい >>682 普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから 効率よくしたいならHashSetを使うといい ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある >>686 HashSet の重複判定って GetHashCode() 絡んでるのかね? 名前的には関係ありそうだけど 仕様が見付からない… まだ試してないけどHashSetってことはsetTime, Name, Ageだけのチェックにはならないのかな setTime, Name, AgeがDBのキーになる予定なので無理そうな気が Reference Source で実装みればええやん GetHashCode と ICompare 指定しなければ Default の Equals の両方やね >>689 質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど キーの重複は GetHashCode() の一致 → Equals() みたいだな GetHashCode() は重複しにくいメンバの GetHashCode() で Equals() で完全一致の判定をすれば大丈夫そう あるサイトを参考にしてみたのが 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; } } //データ追加 var ParameterList = new List<Parameter>(); //重複排除 ParameterDistinct qualityComparer = new ParameterDistinct(); IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer); でやってみたんだけど重複がでたんだけど何かまずいだろうか 参考にしたところはDatetimeは使っていなかったので駄目なのかな DateTime をつめるときに DateTime.Now とか使ってると ミリ秒で差がでてるかもしれない。 DateTime を == で比較すると 内部的には DateTime.Tick 同士で比較するから なるほどDateTime.Nowは使っているので調べてみます。 ありがとうございました! なんで単なる取得でメモリ使うんだよ unsafeかなんか付けて昔ながらの方法でやるのが一番速い ライブラリ作ってるわけでもないのにunsafeとか論外なんだが その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ どうせHashSetのパフォーマンスに大敗する git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。 現在Onedrive使ってますが、binやobj配下まで同期されるのが残念な感じ。 binやobjの出力先はWPFプロジェクトなら変更できましたが、ASP.NET coreプロジェクトでどう変更するのか不明 VSTSで上記を実現または他の方法あったりしますか? ちなみに現在はVS pro サブスクリプションに入ってます Microsoftの開発ソフト使ってんならOneDrive使えるだろ? 最後にcleanすりゃいいだけだから。 もしくは同期ドライブ直接はコンパイルしないとかな。 svnを使う onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする なんでonedriveはokでgitがngなのかがわからんと提示しづらい OneDriveって特定のフォルダだけ同期しない設定にできないのか 6,7年前にオンラインストレージが流行った時には タダで大容量で高機能のがいっぱいあったのになんだか退化してるよねw labelの文字列の一部を太文字にしたり色を変えたりといった表現をしたいのですが 何か良い方法はないでしょうか? コントロールではなくメインプログラムのほうで操作できるようにしたいです labelと同じ見た目ならなんでもよいです textboxの様な感じではなくlabelのような感じが目標です のような感じと言われてもどういうのがNGでどういうのがOKなのかよく分からんが 手軽なのはRichTextBoxを使うことで そうでなければPaintイベントで全部自前描画ということになる >>700 ちと面倒だけど、ブランチとか使えるのが便利だから、サーバ立てるまでOneDriveのフォルダ上にgitのリポジトリ作ってた事がある。 OneDrive内の任意のフォルダの中でgit init --bareするだけ。 したら、そのフォルダをremoteとして登録出来る。 あとは任意のタイミングでpush/pullするだけ。 作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。 (競合したら「もとのファイル名-端末名」ってファイルが大量にできる) ああ、確かにリポジトリをonedriveに入れるのが一番スマートかも 昔dropboxにsvnリポジトリ作ってたことあるわ メモリ消費は税のようなもの しょとくだけに 消費だけに 環境はWindows formアプリです。 TableLayoutPanel と DataGridView の使い分け方がわかりません。 datasource property の有無だけ? >>705 自分で描画するのはメソッド作るのも指定するのもめんどくさいよ https://dobon.net/vb/dotnet/graphics/measurestring.html#section1 >>706 の言う通りRichTextBoxをBorderStyle.Noneにして背景色を合わせた方が楽じゃないかな どうしても文字以外を透過させたいとかならともかく >>710 HTMLのテーブルとExcelの表が同じに見えるのならそうかもね コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか? 目標は外部のファイルを読み込んでコンバートするアプリを作ることです。 外部のファイルを読み込んでコンバートするアプリを作ればよいのでは? そんなに難しくないよ 何をどうコンバートするかにはよるかもしれないけど プログラミング未経験者です すいません、ちょっと趣旨から外れるかもしれませんが質問です 電気(強電)、計測(コンビナートとかのプラント計装)の知識ってC#で活かせますか? C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました >>714 FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ >>715 SQLの整形をしたいの? SQLって方言が結構あるしパース(字句解析+構文解析)自体の難易度も初心者がやるものじゃ無いと思う >>715 SQLのパーサーなんて出来合いのライブラリがいくらでもあるよ 自分でわざわざ使い物にならないゴミを作って時間をドブに捨てる必要はない オライリーのlex & yacc がsqlのパースの サンプルだったけど C#は対応していないかと すまんが、スレッドを指定して実行ってできないもんなの? 指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう スレッド起動しないかWaitしておけば、 良いんじゃね >>721 Producer-Consumerパターンを使って特定スレッドでだけ処理するのはどう? BlockingCollection<T>使うと楽に実装できるよ Dllimortで呼び出す関数の引数にはジェネリックは使えないのでしょうか? >>724 どんな使い方を想定してるの? っていうかそれ、呼び出されたアンマネージド関数側はどうしたらいいの?www >>726 .NETのジェネリックは実行時に特殊化されるから、技術的にはそんなに無茶な話ではないよ まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね SystemParametersInfoとかでそういう欲求があること自体はわかる >>729 質問者を馬鹿にするほどには突飛な発想ではないということだよ .NETのジェネリックがどのように実装されているかを知っていれば、できてもいいと考えてもおかしくはない 十分突飛だと思いますけどね。 これ、アンマネージドに限らない。 マネージドだろうが、他のアセンブリで既に定義されてる 非ジェネリックなstaticメソッドをジェネリック化したいと言ってるのと同じ。 だから、呼ばれた側は何すりゃいいんだよw >>731 CのAPIだと、サイズが同一の異なる型を一緒に扱ったり、条件に応じてポインタの指す型の解釈を変えたりとか珍しくないでしょ >>732 そういうのは共用体とかオーバーロードで解決できるでしょ。 ジェネリックを使うって発想は意味不明だよ >>726 具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと 一例としてはこんな感じ 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 c# で必殺技みたいなメソッドがあったのですが思い出せません。どなたかご存知ないでしょうか? >>736 privateメソッドを外部から無理矢理呼び出すやつ? リフレクションならDynamicInvoke()がなんともかっこいいメソッド名 >>736 のはおそらくはデストラクタあたりを想定してるんじゃないかと思うけど >>718 >>719 さんきう とある製品のRDBMSのSQLに独自の書き方やら関数やら記法やらが混じってるからなんとかしたかったんだけどライブラリとやらを使えばいけるのかな。 1) githubで"sql parser"と検索 2) C#で絞り込む 3) 上から順に試す 4) 好みのが見つかったら改造を試みる 少なくとも1から作るよりは圧倒的に楽だし勉強にもなるよ >>726 dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ C#はそういうのをコーディング段階で防いでるだけであって >>746 〜だろ 馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww 少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、 longをint2つと透過的に扱ったりするための仕組みじゃありませんwww だからそういうのは共用体やオーバーロードを使うんだってw BitmapをBitmapDataにしたいのですが、使用されたパラメータが有効ではありませんと言われてしまいます。 ファイルから読み込んだbitmapは変換できるのですが、このようにコード上で作ったbitmapはダメです。 何がいけないのでしょうか? Bitmap trimBmp = baseBmp.Clone(rect, baseBmp.PixelFormat); BitmapData bitData = trimBmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); rectで切り出した後、その切り出した後のビットマップから さらにrectで一部分のロックしようとしてるけど大丈夫? 全面じゃない? >>751 baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね? でも Bitmap bmp = new Bitmap(100,100) みたいな素画像でもやっぱりLockBitsできないです >>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できないです できる。そっちもちゃんと引数の指定してみて private Point CalcPopupLoction(Form launcher, Form popupForm) {} ボタン押したときに上部に表示する モーダルな popup フォーム の位置を計算するメソッドを書きました。 ボタンが左の方にあると、親フォームの左枠をはみ出さないように、popupForm は左揃えで表示。 真ん中へんにあると中央揃え、右端ならボタンとpopupForm を右揃えで表示する感じです。 1つ目の引数の良い名前が思い付きません。 主にボタンを想定してる引数です。 launcher (発射台)はどうもしっくりきません。 parent や baseForm はなんかおかしいのでやめました。 >>754 そもそもそんなメソッドいらんでしょ。 ポップアップがどこに表示されるべきかはボタンを持つFormが知っているんだから そいつに聞く(そいつのプロパティーとして実装)のが一番 あー、右に揃える場合もあるのね。 じゃあボタン持ってるFormに void ShowModalPopup(Form popup) みたいなメソッドを持たせればいい こういう使い回しが効きそうなのはいちいちフォームに実装しないで拡張メソッドにでもした方が 本当はボタン持ってる方のFormに interface IDialogOwner:IWin32Window { HorizontalAlignment DialigHAlignment { get; } Rectangle Rectangle { get; } } みたいなのをかぶせて、Popupする方のFormでShowDialogをオーバーロードして void ShowDialog(IDialogOwner owner) みたいにするのがいいのかも。 酔っぱらってるんでよく分からなくなってきたw 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"); } bitmapinfo とか dibsection とか bitmapinfoheader とか 勉強してみたら >>759 TaskCompletionSourceだっけ?うろ覚えですまんが、jsのPromiseオブジェクト的に使える。 ID:QdBzCxoka 何の話してんのこの人 >>754 変数名が思いつかないとかはこのスレじゃなく クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net https://mevius.5ch.net/test/read.cgi/tech/1494147712/ >>766 交通整理バカw 設計が間違ってるのに名前付けて何の意味がある >>766 レスありがとうございます。 そんなスレあるの知らなかった。 >>754 private Point CalcPopupLoction(Form launcher, Form popupForm) {} 上記は下部のボタンの位置に応じて、大きさのことなるpopupForm の表示位置を計算するメソッド exportButton_Click 内で、 ShowDialog(); で表示する popupForm に戻り値を設定 https://i.imgur.com/ggjo4td.jpg >>754 ・Loctionて何 ・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う ・計算だけなら全部Rectangleでいいんじゃないの Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup) >>769 だからさ、そのメソッドをどこに書くおつもり? ポップアップを左右どちらに寄せるべきかを知ってるのは特定のFormだけのはずなのに その例のllauncherの型がFormってのは変じゃないか? そもそも何で「左右どちらに寄せるべきかを知ってる」奴のメソッドとして実装しないの? それなら引数で渡す必要ないと思うんだけど。 >>770 必要な情報は (1) 左右どちらに揃えるか?(HorizontalAlignment) (2) 揃える位置のx座標 だけだね ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる