ふらっと C#,C♯,C#(初心者用) Part139
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
■コードを貼る場合は↓を使いましょう。
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/ >>1
スレたて乙
「980以降で次スレ立っていないときはスレを埋めないでください」もテンプレに追加しなきゃならんかな ファイルやディレクトリー操作する時は
パスを文字列で取得するけど
パスをコントロールする用の適切なクラスや型ってあったりしますか? コントロールが何を指しているのか不明だけど、System.IO.Path のこと? >>9
単純にパスの格納を文字列でしているから
パス格納用の型とかがあったら知りたいです
MSならWindowsのファイルシステムに対して.Netから特殊な操作ができるのかなあって思いました
単純にファイルの検索でpathクラスより高速なものがあったりするのかなあと Ruby のPathname クラスみたいな、便利なユーティリティクラスだろ あのAPIってPath, File, Directoryのどのクラスにいたっけ…ってなることがたまに 共変性、反変性どうのって性質ってさあ
一体、なんに利用できるんだぜ? ウィンドウを広げたら画像も等倍で大きくなるようにしたいんですがどういう設定を弄ればいいでしょうか?
今はこんな風になります。
http://fast-uploader.com/transfer/7089340407313.jpg
pictureboxのsizemodeはzoomにしてあります >>16
配置しているコントロールの大きさが変わらないと機能しない
それフォームしか大きさ変わっていない >>16
各コントロールのAnchorにRightやBottomを追加して
意図した結果になるように付けたり外したり試してみて >>16
先回りしとくと画像ができたらボタンとDateTimePickerもそろえて変えたいと思うかもしれないが
少なくともWinFormではDateTimePickerの大きさを合わせて変えるのは凄く面倒 >>17
>>18
>>19
Anchorを弄って大体の感じでできました。
DateTimePickerはあきらめます。
ありがとうございました。 publicメンバの変数名全部小文字にしちゃった
後任の人ごめんね visuakstudioでクラスを追加したあと関連づける方法がわかりません
どうすれば良いでしょうか?
Form1.cs
namespace neko
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(testtext);
}
}
}
test.cs
namespace neko
{
class test
{
string testtext ="表示";
}
} test t = new test();
MessageBox.Show(t.testtext);
もしくは
MessageBox.Show(test.testtext);
class test
{
static string testtext ="表示";
} >>23
ありがとうございます
下のやり方では出来ませんでしたが
上のやり方でpubulic stringにしたら出来ました
>>24
読んでみます インスタンス作成を書かずに済ます方法はないのでしょうか?
usingを使用したりです
2つ以上のファイルに分けてコードを書きたいのが目的です。
MessageBoxがusing System.Windows.Forms;で参照している様なのと同じように書きたいです 俺流を考えるのは一通り基礎を理解してからで遅くないからw >>23の下のやり方が出来れば目標達成です
public static string testtextとしたところ目的どおりにできました
何か変なところはないでしょうか?
これで大丈夫ですかね? >>21
プロパティのこと?それともフィールドをpublicにしちゃったの? メッセージボックスを出して押されたボタンに対応するメッセージをラベルに表示する簡単なプログラムなんですがswitchでかけるのは解ったんですがifでかくとどうなりますか?
ちなみにソースとアプリの画面はこんな感じです。
http://fast-uploader.com/transfer/7089619124517.jpg
var x = MessageBox.Show("メッセージ", "タイトル", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk);
switch (x)
{
case DialogResult.Yes:
label1.Text = "はいが押されました。";
break;
case DialogResult.No:
label1.Text = "いいえが押されました。";
break;
default:
label1.Text = "キャンセルされました";
break;
} >>31
var x = MessageBox.Show("メッセージ", "タイトル", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk);
if (x==DialogResult.Yes) label1.Text = "はいが押されました。";
else if (x==case DialogResult.No) label1.Text = "いいえが押されました。";
else label1.Text = "キャンセルされました"; >>32
あれ・・・それ書いてみてダメだった気がしたんですけど自分の勘違いでした
やってみたら動きました。 どこか書き間違えてたんですねきっと。ありがとうございました フィールドはパブリックにしないほうがいいよ
理由は調べれば出てくる AxWindowsMediaPlayer をフォームに貼り付けていろいろやっているんですが、
MediaPlayer に予め設定されているキーボードショートカットを無効化する方法はないでしょうか。
まちがえて押してしまって暴発する他、Ctrl + F などの登録されているキーに
別の機能を割り当てたいのですが、MediaPlayerのKeypressイベントで e.handled がtrueにされてしまっているのか
フォームのKeyPressイベントが呼ばれないようです。 >>36
フォームでキーイベントを全部受けたいだけならフォームのKeyPreviewプロパティをtrue >>37
もちろんそれはやっています
というかKeyPreviewをtrueにしないとForm.Keypressイベントは発生しないものだと
思っていたのですが、勘違いでしょうか。
MediaPlayerに登録されていないらしいキーの組み合わせについてはちゃんとイベントが発生しています。
ところでKeyPressなどのイベントでは受け取ったキーがhandleされないときは別のコントロールのKeyPressイベントに
値が渡されているみたいですが、その順番はどういうルールに基づくのかご存じないでしょうか。
Keypress 順番 などでググってみても KeyDown の後にKeypressが起こる云々しかでてこないのですが。 FormにIFilterMessage実装して、PreFilterMessageで
WM_KEYDOWN/WM_KEYUPのときActiveControlがAxWindowsMediaPlayerなら
false返せばAxWindowsMediaPlayerには渡らなくなる
Formの方で受け取りたいならついでにOnKeyDown/OnKeyUp呼び出す
WinFormにはルーティングイベントなんてないから別のコントロールが受け取るとかないはずだけど
KeyPreviewしてるFormが先に受け取るとかぐらいで
どういうコントロール構成とイベントハンドラにしたら再現できる? なんか違和感あると思ったらIMessageFilterだった
あとFormのコンストラクタあたりでApplication.AddMessageFilter(this)する必要あり 以下のようなコードでITestにList<Hoge>とList<Fuga>を併記するような書き方はあるでしょうか?
public class Fuga{ public string val { get; set; } }
public class Hoge{ public string val { get; set; } }
interface ITest{ List<Hoge> Hogege(); }
public class A : ITest
{
public List<Hoge> Hogege()
{
return null;
}
}
public class B : ITest
{
public List<Fuga> Hogege()
{
return null;
}
}
class Program
{
static void Main(string[] args)
{
ITest AB;
AB = new A();
AB = new B();
}
} >>42
好きなほうをどうぞ
>>41
できれば何をやりたくて「併記」したいのか書いてもらえるといいかも >>41
エスパーすると
FugaとHogeに継承関係があって
Hogegeの戻り値の型をList以外のコレクションにできるなら
共変性のあるIReadOnlyListなどを使えばできるかもしれない 理解が乏しく説明が拙くてすみません
インターフェースを以下のように書く方法があれば良いなと思った次第です
interface ITest{ List<共通or抽象化したクラス記述> Hogege(); }
どうも無理そうな雰囲気を感じておりますが
お願い致します FugaとHogeになんらかの関係がないとどうにもならないよ
どちらかが継承してるとか共通のinterfaceを実装してるとか
あるいはITestをジェネリックにするか この場合Mainの方のコード書けないけど
あとは型安全なんか投げ捨ててdynamicにするか、ってのはジョークだけど たびたび失礼します
こんなコードを書いた動機としては、class A と class B のメソッドの違いが
返り値のList<xxx>でしかないため、インターフェースで共通の型に出来たら
mainでインスタンス作る際にスッキリするなと思ったからです
こんな記述が無理そうな時点でC#の考えに則って無いんだろうなと感じております
public class A : ITest
{
public List<Hoge> Hogege()
{
return null;
}
}
public class B : ITest
{
public List<Fuga> Hogege()
{
return null;
}
} 何度もみんな言っている通りAとBじゃなくてHogeとFugaでなんとかしろって話だと思うんだが、なんでそんな頑なにAとBにこだわるの? アドバイスを基にこの記述で行けるか!と思ったのですがreturn hoge;でList<IStore>でないとダメと怒られました
素人のぬか喜びでした
public interface IStore
{
}
public class Fuga: IStore
{
public string val { get; set; }
}
public class Hoge: IStore
{
public int val { get; set; }
}
public interface ITest
{
List<IStore> Hogege();
}
public class A : ITest
{
public List<IStore> Hogege()
{
List<Hoge> hoge = new List<Hoge>();
hoge.Add(new Hoge { val = 1 });
return hoge; //エラー
}
} visualstudioをインストールしました
参考書にはWindowsフォームアプリケーションやコンソールアプリケーションなどあるんですが、インストールしたvisualstudioには見当たらないです
何が設定かインストールし忘れたのでしょうか? >>52
VisualStudioのスレで聞くべきだけど、その前にどのバージョンをインストールしたか把握している?
VS2017ならスタートページで「新しいプロジェクトの作成」をクリックするかメニューのファイル>新規作成>プロジェクト >>53
すみません、C#の話でしたのでこちらに書き込んでしまいました
visualstudioのバージョンは2017です
それで、visualstudio起動後のファイル>プロジェクト>新しいプロジェクト内に存在しないんですよね…
あるのは空のアプリ、WPFアプリ、Windowsランタイムコンポーネント、クラスライブラリのみでした WPF入っているのにWinフォームとコンソールアプリ入っていないって何か変なことやっていそう
インストーラーでそれっぽいの入れなおしてそれでもだめなら素直に専用スレ行けばいい Windows 7はデフォでFW 3.5が入ってて
WIndows Updateを適当に入れてけば今サポートされてる最古のFW 4.5.2になるって認識でOKですか?
それともWindows UpdateするだけではFWは更新されない? いちいち交通整理くっだらねアホか
こういう馬鹿、自分が質問者以上にスレと関係ないことをほざいてる自覚がないらしい。
そもそも馬鹿は自分を客観視できないからな 前から誰のこと言ってるのか知らんけど、この意味不明な粘着質、普通にストーカーと同じメンタルだ >>58
(.Net) Frame Work だろ FWって初めて聞いたわ。.NETと一般的な名称使わずにオレオレ略語使う奴って頭悪そう C# スレで FW 3.5 って来たら候補は一つしか無い fwと言えばファイアーウォールだな・・・
と思ったけどWikipediaによるとフレームワークの略語としても定義されてたわ
https://ja.m.wikipedia.org/wiki/FW >>57
アップデートだけじゃ無理だよ
.NET4.0入れたら4.5.2まで行けた記憶あるが VISUALSTUDIOのバージョンとC#のバージョンの対応関係ってどこかに一覧表ない? PostgreSQLからデータ抽出したいんだけど
何を使えばいいですか?
データの更新追加削除もします >>79
ADO.NET感覚でDataReaderやDataSet使いたいならそれでもいいと思うけど、今更感あるような >>80
Dapper使うならNpgsqlも必要だろ
自分で使ったこともないのに回答してるの? >>80
>>81
どっちも勉強してみます
ありがとうございます メッソッドってregionで囲むもんなん?
これアウトライン用よね? >>84
>>85
好きにしてってことか
メソッド囲んでるソース多かったから基本なのかと思ったけど
面倒だし囲まないことにする 俺はregionによる仕分け多用するけど一般的な習慣とまでは言えないね
でも、単純にプロパティ、メソッド、イベント(OnXxxx)、コンストラクタに分類するだけでも
少なくとも視覚的な見やすさはだいぶ違うと思うよ
MSDNライブラリのクラスメンバー一覧がそういう分類じゃなく単純にアルファベット順だったら
どうか想像すりゃ分かると思うけど 複数のメソッドをregionで囲むはまだ許せるが、くそ長いメソッドの一部をregionで囲って短く見せるのは許せない >くそ長いメソッドの一部をregionで囲って短く見せる
海外サイトでサンプル漁ってると時々見かけるな まあアウトラインってスコープ単位で線引されるからね
regionは昔の機能と思っていいよ メソッドはregionで囲まなくても普通に畳めるよww >>92
畳めるけどメソッドをregionで囲ってるソースみること結構あるわ メソッド単位で囲ってるのは俺も謎だと思ってた
昔は普通にたたむのできなくてその名残とかなのかもしかして普通にたためるの知らないのか IEnumerable、IDisposable、IEquatableみたいな定型インターフェイスの実装は邪魔なんでregionで括ってるわ
あとToStringやらGetHashCodeのオーバーライドなんかも >>97
.NET Frameworkのライブラリと同じように作らなきゃいけないと勘違いしてた頃は俺もそれやってた
アプリと不特定多数向けのライブラリは作り方が違ってていい、アプリはなるべく絞り込んで作るのがよい、
ということを理解してからは無駄なコードが減って必要なくなった 不特定多数向けのライブラリを作ってるのかもしれないだろ IDisposableはusing使うために必須だからなあ ■ このスレッドは過去ログ倉庫に格納されています