ふらっと C#,C♯,C#(初心者用) Part137
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらない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 WPFで
WindowStyle="None"
AllowsTransparency="True"
Background="#01FFFFFF"
でほぼ透明だけどマウスイベントを受け取るウィンドウを作ったのですが
これとおなじことをFormでやりたいのですがやりかたがわかりません
どのようにすればいいですか? >>798
できると思います。
データ格納フォルダB:Aフォームから値を取得
Cクラス:Bから値を取得
となってるのでsetもpublicでないと困るんですよね。
データ格納フォルダBの値はAから値取得した後なにも処理がないので、
「Reは使用されていません」って正しい警告なんですけどねぇ。
格納しているデータが10個あって警告10個もでるとさすがにうっとうしい。 >>790
BOM付きのUTF以外は、文字コードの情報なんてものは最初から存在しない。
また、文字コードの自動判別も完璧ではなく、場合によっては全く判別出来ない。 BのコンストラクタにAからの値を受け付けて
public readonly double Reに渡すとかじゃだめなんね? >>799
Formはウィンドウ全体のアルファはOpacityで指定できるけど、
背景だけ透過させるとかは簡単にはできなかったような
http://yellow.ribbon.to/~azumaya/doc_dotnet_uplayeredwnd.php
>>800
そもそも>>796みたいな告なんか出ないと思うけど...
何か盛大に勘違いしてる予感... >>803
WPFだと簡単にできたけどだめですか。。
背景透明なウィンドウとOpacity≒0で全体をほぼ透明化したウィンドウを重ねて代用します >>803
勘違いなのかなぁ・・・。
すいませんもうちょっといろいろ実験してみます。 もともとスタートアップだったform1からform2にスタートアップを変更したいと考えています。
Program.csの
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new InitialSettingForm1());
}
のForm1をForm2に変更したのですがどうもうまくいきません。 form1が出てからform2が表示されているような…。
試しに
public ExaminationForm1()
{
InitializeComponent();
MessageBox.Show("a");
}
と入れてみると
メッセージボックスが表示→okをクリック→form2が表示
となります。
他にも設定しなければいけないところがあるのでしょうか・・・。 InitialSettingなのかExaminationなのかどっちだよ
ExaminationForm1のコンストラクタにブレークポイントおいて実行
ブレークしたら呼び出し履歴を確認する >>809
Debugで確認していったらどうもインスタンスの参照を渡せていないようです。 public partial class Form1 : Form
{
Form2 form2;
Class1 class1;
public Form1()
{
InitializeComponent();
form2 = new Form2();
form2.Show();
class1 = new Class1();
form2.Pointer = class1;
}
} public partial class Form2 : Form
{
Class1 class1;
public Class1 Pointer
{
set
{
class1 = value;
}
}
public Form2()
{
InitializeComponent();
int i = class1.fuga();
MessageBox.Show(i.ToString());
}
} public class Class1
{
public int hoge = 2222;
public int fuga()
{
return hoge;
}
} Form2で
int i = class1.fuga();
みたいなclass1のメソッドを使う命令を書くと、実行時にForm1もForm2も表示されずに終了になります。
Form2にclass1の参照をきちんと渡せていないようなのですが、どこが悪いんでしょう・・・。 >>814
みたいな、じゃなくて問題を再現可能な最小コードをIdeoneにでもあげる
何で>>811-813まで書いおいて一番肝心なところを書かないんだ
それじゃやってること荒らしと同じ 806から811で全然別物の質問になってるんだけど
Form1のコンストラクタの先頭とForm2のコンストラクタの先頭にそれぞれブレークポイントおいて
ブレークしたらF10キー1行ずつステップオーバーしていって
どういう順番で実行されてるか確認 うるせーな一度答えると決めたら最後までニコニコヅラで相手しろよクソハゲ >>777
返信遅くなりました
ありがとうございます、確かに存在しました
やってみたら問題なくアクセスできました >>811
Form2のコンストラクタ内でclass1を使用しようとしているのに、
form2.Pointer(class1)がその後で設定されてる。 >>819
ありがとうございます。m(__)m
その通りでした。
一個づつ追っていけば分かるはずなんですけど、
自分では思い込みがあって気づきませんでした。
本当に助かりました。
ありがとうございました。 >>815
すいません。
文章の書き方が悪かったです。
812の下から4行目のように
Form2で
int i = class1.fuga();
class1のメソッドを使う命令を書くと、実行時にForm1もForm2も表示されずに終了になります。
と書くべきでした。 >>816
これまたすいません、ブレークポイントで見て言ったら画面の生成順は問題ないことが分かって、
インスタンスの参照が渡っていないことが原因と分かり。811-813みたいな最小コードで実験してました。 中学生ぐらいだったら教えてやってもいいけど、あんたいくつよ? 不安なメソッド内じゃ全部TryCatchで囲っちゃった方が良いです? メインの処理全体をtry〜catchで括るだけさ。 ジェネリクスのListやHashSetを良く使うのですが、これで用が足りてしまうので自作までしたことありません
出来る企業や個人はバリバリ自作するのでしょうか >>827
できる人はそんな無駄なことに時間をかけたりしません
視野狭窄な無能ほどそういうことに拘って工数をドブに捨て、結果的に全体のクォリティを上げる時間が失われるのです ありものでどうしても駄目な理由がある場合のみ、仕方なく自作だわね >>830
それも注意が必要だけどね
視野狭窄な小手先の技術に拘るプログラマは、くだらない問題に拘って「どうしても駄目だ」と思い込む(思い込もうとする)傾向がある
大抵そういうケースでは、視野を広げるとそもそも無理に手間をかけてまで解決する必要のない問題であることが多い Dictionary クラスを継承して使いたくて、
これの各種インターフェイスを実装した中身 Dictionary クラスのラッパーを作った事あるなあ。
今思えば若かった。 >>831
プログラム以外でもあてはまる話だわな。
それ たいていは英語力の無さに原因があるんだよな。
その機能を見つけられないとかだからさ。 コンソールアプリです。
今までに自分が吐き出した標準出力を自分で取得する事は可能でしょうか?
このアプリ(A)は主に他のアプリ(B)から実行されることを想定しています。Aは普通にConsole.WriteLineで出力し、BがProcess.StandardOutput.ReadToEndで取得、ログを残します。
A単体で実行してログも残したい要求があります。 Console.WriteLineと同時にファイルに出力すればいいのですが、最後に一括で取得できればスマートかなと思ったのですが、いかがでしょうか? 両方に出力する関数作って、その関数に置き換える事すら出来ない無能に何をアドバイスしろと? Windowsで使えるteeコマンド探した方が早いんじゃねえか PowerShellならデフォルトで用意されてるよ!>tee >>836
???
すみません、よくわかりません
>>837
書き方まずかったですかね。
そう言うのも含めて、2つの処理を同時にするという意味だつたのてすが。
他にはなさそうですね。 正直何言ってるのかよく分からんけど、普通にリダイレクトするだけのような...
っていうか、普通はコマンドライン引数で出力先を切り替えるように作ると思うんだけど... PowerShellとか罰ゲームだろ
インタラクティブシェルとしては悪くないけど、まとまったスクリプト書こうとすると大嫌いになる
Add-TypeでインラインでC#書いたほうがマシだわ
特にC#erはソースの見た目がなんとなく似てるだけに地獄を見るんだよ アプリ側で完結してないと、スクリプト操作とか変なバッチ叩かせてアプリ起動とか怪し過ぎるだろ。
業務アプリじゃねーんだw if (-100 <= clickPointXTemp && clickPointXTemp <= 100)
{
clickPointX[clickNumber] = clickPointXTemp;
MessageBox.Show(clickPointX[clickNumber].ToString() + "%");
MessageBox.Show(clickPointX[0].ToString() + "%");
MessageBox.Show(clickPointX[1].ToString() + "%");
MessageBox.Show(clickPointX[2].ToString() + "%");
clickNumber++;
} クリックしてカーソルが-100<=clickPointXTemp<=100の位置にあるときに配列にその値を代入させているのですが、
クリックするとその場で配列に代入できても次のクリックで0になってしまいます。
1回目クリック
clickPointXTemp=10
[0]=10
[1]=0
[2]=0
2回目クリック
clickPointXTemp=30
[0]=0
[1]=30
[2]=0
2回目クリック
clickPointXTemp=100
[0]=0
[1]=0
[2]=100
なんでだろ・・・。 データベースを使わないで、インデックスが共通する複数のデータ配列を作りたいときってどういう風な実装が最適なんでしょうか
var A = new int[x]
var B = new int[x]
var C = new int[x]
・
・
・
var E = new int[x]
みたいな感じです スコープが原因だろうから全体のソース出さないとエスパーだらけの回答になるよ >>851
struct Hoge
{
int A;
int B;
int C;
int D;
int E;
}
....
var hogeArray = new Hoge[100]; 複数のクラスで共通の変数定数を外出しして、
その変数クラスを継承するのって良し悪しで言うとどうでしょうか
is aなのかちと微妙な感じです
内臓名クラスを継承して動物クラスを作ってるような
has aなのでオブジェクトとして渡すべきですか? >>859
共通の変数などという低い抽象度でクラス設計を考えるのがそもそも間違ってる
実装からクラスを考えると必ず破綻するから、君の今の考え方のまま進む限りはいかなる選択肢も不正解
とはいえ最初から抽象度を上げて設計しろといっても初心者には無理な話だから、気にせず自分の思うように作ればいい
一通りモノ作れるようになったらオブジェクト指向モデリングの書籍を読むことをお勧めする オブジェクト指向プログラミングしない方がいいもの作れるよ
関数で組む方法を極めた方がいい >>860
>オブジェクト指向モデリングの書籍
例えばどんな本がありますか?特におすすめ、とかじゃなくてもいいです
どういう本が該当するのかよくわからないのです >>862
王道はエリック・エヴァンスとかダグ・ローゼンバーグとか
今読んでも実際のコーディングに対しては何の参考にもならないと思うよ どのプログラム言語を選ぶかでオブジェクト指向モデルの実現方法がかなり違う >>863の本くらいの抽象度になると実装方法にはほとんど依存しないよ
それどころかオブジェクト指向モデルすらも方法論全体の中では下層の方に位置付けられる とりあえず入門レベルが終わったんだけど次はeffective c#4.0っての読めばいいですか? more effective C# 6.0 7.0ですか?
moreとついてるので前の本を読む必要があるかと思っていたんですが大丈夫そうならそちらを購入しようかと思います フォーム間でのデータのやりとりはどうするのが一般的なのでしょうか?
例えば、Form2の表示と同時に、Form1に入力済みのデータをForm2に表示させる場合、今は以下のようにしています。
class Form1
{
public object Data{get; set;}
var form2 = new Form2();
form2.Parent = this;
}
class Form2
{
public Form Parent{get; set;}
Load()
{
this.Data = Parent.Data;
}
} >>869
言語仕様とか環境の変化で不要になった部分をバージョンアップしてるから
今からかうなら最新だけでいい
初版と4.0と最新で内容は被っている ビジュアルスタジオでC#使ってると、どんどんコードスタイルが簡略化されていくんだよな。 SocketクラスのBeginConnectとかBeginReceiveとかに渡すコールバック関数を
staticで書いてあるのとそうでないのと両方見かけるんですけど
どっちが良いんでしょう? まあ、C#ならコールバックは登録解除を明示的に行うからスタティックである必要は無いけどな。
でもこれがイベントハンドラからのデリゲートなら話は別だ。 >>875
そのSocketオブジェクトに合わせるのが正解
Socketを生で使うサンプルってスキルの低い業務ドカタが書いてたり書かれた時代が古かったりすることが多いので、
C#をよく理解してなくてCやVBの感覚でstaticにしないといけないと思ってるようなのが多い >>876
イベントハンドラからのデリゲートとはどういう状況でしょう?
>>877
なるほどありがとうございます! TextBoxか、MaskedTextBoxに単位をつけたい。
小数点有りや無し、-の数値を入力できたりするものってできますか?
-2℃
14℃
25.5℃
2.5℃ テキストボックスの横にラベルで単位でも書いておこうぜ
□㌕ >>879
入力支援・単位の入力補完・数値⇔文字列の変換
何でもできるけどホントにしたいことがそのレスでは分からない >>873
え、more付いてないのと付いてるのって同じ本なん?
独習C#と言い、命名がわけわからんな… 説明不足ごめんなさい。
出力ですが、最終的にはTextBoxの枠ごと印刷したいと考えております。
883の言う単位の入力補完だと思います。
MaskedTextBoxのマスクに####℃と記入し、
「-24.4」等のデータをデータベースから取り出して、入れたところMaskedTextBox.Textが244℃となってしまいました。
このテキストボックスを小数点有りの場合、なしの場合、負の符号が有りの場合なしの場合、「----」の場合、
1桁から5桁+「℃」としてTextBox.Textに出力したいと考えております。
できますか? TextBoxクラスを継承して自前で実装すればできる TextBoxクラスを継承してTextプロパティを上書き
書式とか単位を属性に持たせれば汎用的に使える。
コピペされたときの場合も考慮すること ありがとうございます。
なんとなく、それっぽいものが作れそうです。 ユーザーコントロールでボーダーなしテキストボックスとラベル並べた方が楽な気がする テキストボックスの描画や挙動を弄るの面倒くさいから汎用性を求めるんなら InputMan 買った方がいいよ NuGetで参照できるオープンソースのWinFormsリッチコンポーネントって何が有名なの? c#で穴ぼこメモリにしないように組むのって不可能? 可能だが、規模によっては現実的でない
パフォーマンスを気にするなら、別にボトルネックが存在していないかを見直す方が先 ■ このスレッドは過去ログ倉庫に格納されています