ご質問があります。
フォームが二つ(フォームA、フォームB)あり、フォームAからフォームBを開く時に、フォームBにコードを渡す必要があり、フォームBのShow()をオーバーライドさせて(Show()に引数を設定し、引数でコードを渡し、フォームBの変数にコードをセットして使用する)、コードを使用します。

このShow()のオーバーライドのさせ方なのですが、以下ではエラーが出てしまいました。

public partial class FormB : Form
{
private string hacyucode;

public FormB()
{
InitializeComponent();
}

override void Show(string code)
{
hacyucode = code;
}
}

※「オーバーライドする適切なメソッドが見つかりませんでした。」というエラーが出てしまいます。

Show()の適切なオーバーライドの方法をご教授していただけませんでしょうか。
よろしくお願い致します。

A 回答 (1件)

引数が違う同じ働きをするメソッドならば『オーバーロード』で定義すればいいのではないかと思います



単純に
public void Show( string code )
{
  // 基本クラスのShowメソッドを呼ぶ
  base.Show();
  hacyucode = code;
}
といった具合にしてやればいいでしょう

アクセス指定子の『public』が無いと『private』になってしまうので気おつけましょう

また、override を使うには基本クラスで virtual(仮想関数またはメソッド) になっている必要があると思います …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC# showdialogの戻り値について

お世話になります。

C#2005で開発をしております。
質問内容を以下に記述致します。

FormA及びFormBがあり以下の処理を実行します。
(1)FormAからFormBをShowdialogで呼び出す
(2)FormBにて任意の処理を実行する
(3)FormAがFormBを閉じ、戻り値を受け取る

ここで(3)の時に戻り値をDialogResult以外の戻り値で取得したいのですが、
方法はございますでしょうか。
可能であればint型数値で戻り値を設定したいと考えております。

お手数ですがご教示いただければ幸いに存じます。

以上宜しくお願い申し上げます。

Aベストアンサー

既存のShowDialog()を利用せず、FormBでShowDialog()をオーバーロードすればいいのでは。

【Form1.cs】
Form2 form = new Form2();
int result = form.ShowDialog();
Console.WriteLine(result);

【Form2.cs】
DialogResult result = base.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
return 0;
}
else
{
return 1;
}

みたいな。

また、ShowDialog()で制御がFormAに戻ってくるタイミングは、FormBが閉じられた時です。
つまり、(3)の前半部分はShowDialog()では実現できません。

既存のShowDialog()を利用せず、FormBでShowDialog()をオーバーロードすればいいのでは。

【Form1.cs】
Form2 form = new Form2();
int result = form.ShowDialog();
Console.WriteLine(result);

【Form2.cs】
DialogResult result = base.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
return 0;
}
else
{
return 1;
}

...続きを読む

QActiveReportの改ページ不具合について

.NETでActiveReportを使用しておりますが、改ページのデータ不具合が発生しております。

GroupHeader1に部門名、GroupHeader2に得意先名を指定しております。
各HeaderにはDataFieldを指定しており、GroupHeader1には部門コード、GroupHeader2には得意先コードを設定しております。改ページはGroupHeader1の部門コードごとに自動でされるよう設定しております。
帳票は下記のようになっています。

PageHeader
GroupHeader1
GroupHeader2
Detail
GroupFooter2
GroupFotter1
PageFotter

このデータで帳票を出力した場合、1ページ内に収まりきらずに自動で改ページされ、かつ次ページに1件しかデータがない場合、GroupHeader1の部門名が次のGroupの部門名になってしまいます。なお、最初の部門名以外で、次ページに1件のみしかでない場合は正常です。

上記回避方法をお教え頂けませんでしょうか?
3日間悩んでいるのですが、なかなか解決方法が見つかりません。皆様のお力をお貸しいただきたく。
よろしくお願いいたします。

.NETでActiveReportを使用しておりますが、改ページのデータ不具合が発生しております。

GroupHeader1に部門名、GroupHeader2に得意先名を指定しております。
各HeaderにはDataFieldを指定しており、GroupHeader1には部門コード、GroupHeader2には得意先コードを設定しております。改ページはGroupHeader1の部門コードごとに自動でされるよう設定しております。
帳票は下記のようになっています。

PageHeader
GroupHeader1
GroupHeader2
Detail
GroupFooter2
GroupFotter1
PageFotter

このデータ...続きを読む

Aベストアンサー

> 3日間悩んでいるのですが~

うぅーん。その前にGrapeCityに問い合わせておけばよかったですね。
バグレポートにも載っていない不具合でしょうか?
どちらにしても回答はくれると思います。
高いお金を出して購入したのですから是非問い合わせましょう。
バグレポートに載せない不具合も有りますからして。
もしかしたら既知の事で回避策など教えてくれるかもしれません。

#私の場合も不具合を認めておきながらバグレポートにも載らずパッチすらでませんでした

Q複数桁10進数の*桁目だけを抽出したい

タイトルがすべてと言えてしまうのですが、
例えば、int宣言された"4287"(この値は変動します)という数値があったとして、1桁目の"7"だけを別の変数へ引き抜きたいのですが、その場合にはANDによるマスク処理による演算で処理可能なのでしょうか?
また、他に良い方法などありましたら教えていただけますでしょうか?

Aベストアンサー

★10進数ですので AND は使えませんね。
・簡単なサンプルを載せますので読み取って下さい。

サンプル1:
int value = 4287;
int a[ 4 ];

a[0] = (value % 10); value /= 10; // 1桁目を取り出す
a[1] = (value % 10); value /= 10; // 2桁目を取り出す
a[2] = (value % 10); value /= 10; // 3桁目を取り出す
a[3] = (value % 10); value /= 10; // 4桁目を取り出す

サンプル2:
int value = 4287;
int a;

a = (value % 10);
value -= a;

value → 4280
a → 7
になります。

Qtry~catchの使用方法

プログラミング超初心者です。
現在、C++やjavaの勉強をしているのですが、
・try~catchとはなんぞや
・どんな処理をするときにtry~catchをつけなければいけないのか
がよくわかっていないので、教えていただけないでしょうか?
また、そういったことが載っているサイトも併せて教えていただければうれしいです。

Aベストアンサー

これは、「例外処理」のためのものです。
動きとしては、
try { ... } の中で発生した「例外」に対する処理を、 catch { ... } の中に記述しますということになります。
これは、例外(おおざっぱに言えば、内部的なエラー)の「発見」と「発生」と、「リカバリ」に関わる分離の思想から考えられたものです。

例外処理がない場合、エラーの処理は、
・エラーが発生してないかどうか確認する
・エラーが発生していたら、その場で処理する
ということになります。

この方法には、問題がああって、本来の処理とエラー処理が混在して処理の見通しが悪くなるということになります。
例えば、以前の(失敗したら NULL を返す仕様の new 演算子の場合)

classA a = new classA(1, 0);
if (a == 0)
goto エラー処理;
classA b = new classA(1, 1);
if (b == 0)
goto エラー処理;
など。
これに対して、最近の(失敗したら、bad_alloc 例外をスルーする ) new だと、

try
{
classA a = new classA(1, 0);
classA b = new classA(1, 1);
}
catch(bad_alloc) // これは、new で失敗した時に投げられる例外
{
エラー処理
}

となります。
こうすれば、if (a == 0) が本来の処理ではなく、エラーチェックだったのがわかります。

また、往々にして、エラーの検出箇所(それがエラーだったとわかる場所)と、エラーの発生場所(エラーを発生させてしまった場所)は違うものです。

例えば、平方根を算出する関数はマイナスの引数を受け付けません。このため、普通は関数の中で引数がマイナスでないかどうかチェックをします。
おかしな引数を渡していれば、関数の中で引数がおかしいかどうかわかります。
しかし、この間数の中では、なぜ引数がおかしいのかはわかりません。
入力ミスなのか、計算ミスなのか。

一方で、引数がおかしくなった原因は、この間数を呼び出す箇所(の近く)にあることが多いわけです。
ですから、おかしな引数のリカバリは、こちら(発生場所)で行う方が妥当です。

もちろん、関数を呼び出す前にあらかじめ引数の妥当性をチェックするというのも正しい考え方です。
ただ、場合によっては、通常処理の流れでプログラムを作り、その処理の中で(この部分を try で囲む)エラーが検出された箇所(実際には、例外処理がスルーされる場所)の情報をもとに、エラーのリカバリ(ここが、catch セクション)を行うという形にするとすっきりする場合があります。

これは、「例外処理」のためのものです。
動きとしては、
try { ... } の中で発生した「例外」に対する処理を、 catch { ... } の中に記述しますということになります。
これは、例外(おおざっぱに言えば、内部的なエラー)の「発見」と「発生」と、「リカバリ」に関わる分離の思想から考えられたものです。

例外処理がない場合、エラーの処理は、
・エラーが発生してないかどうか確認する
・エラーが発生していたら、その場で処理する
ということになります。

この方法には、問題がああって、本来の...続きを読む

QDataTableに特定のフィールドが存在するかどうか調べるには?

DataTableに登録されているフィールドに、特定のフィールドが存在しているかどうか調べるには、どのようにすればよいでしょうか?

dtTable.Columns.Add("TEST1")
dtTable.Columns.Add("TEST2")

dtTableにTEST1とTEST2のフィールドが登録されていたとして、

Dim tmp As String = dtTable.Rows(0).Item("TEST3"),ToString

TEST3のフィールド名で値を取得しようとすると、TEST3の列が登録されていない為、エラーとなります。

そこで、事前にTEST3というフィールドが、DataTableに存在するかどうか調べたいのです。
(ハッシュテーブルのContainsKeyメソッド等のようなものを求めています)
お分かりになる方がいましたら、宜しくお願いします。

Aベストアンサー

DataColumnCollection.Contains メソッド
http://msdn2.microsoft.com/ja-jp/library/system.data.datacolumncollection.contains(VS.80).aspx
を使用すればよいと思います。

ちなみに、DataTable.Columns が DatacolumnCollection クラスです。

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

QC# インスタンスの破棄

C#でインスタンスの破棄を明示的に行いたいのですが、
実際の開発現場では、どのように行っているのでしょうか?

自分で調べると「ガベージコレクタ」が暗黙的に行っているようですが明示的には行わないのが普通なのでしょうか?
もしくは、「Dispose」を使用して明示的に行うのが普通なのでしょうか?

実際に開発されている方からすると簡単な事かもしれませんが教えて頂けると助かります。

以上ですが、よろしくお願いいたします。

Aベストアンサー

結論から言うと、どちらでも良いです。
できれば生成から破棄まで考えて開発できると良いですね。

ガベージコレクションが実行されることで自動開放されますから、
一切.close()や.dispose()を使わなかったとしてもプログラムが
不正終了してしまう事はほとんどありません。

実際の開発では使わなくなったものを使わなくなった時点で
明示的に破棄することが多いです。正確には明示的に破棄するもの、
明示的に破棄しないもの、の2種類に分類しています。

例えばファイルを読み書きするストリーム系のオブジェクトや
データベースとのコネクションなどです。これは開発会社や
開発チーム、案件によって若干違っていて、徹底するところや
適当なところもあります。個人的には徹底したい派ですが。。。

ガベージコレクションが発生するとプログラムの実行動作が
遅くなり、また瞬間的に大きな負担がかかることがあります。
そのため全てをガベージコレクタに任せるのではなく、
明示的に開放できるもの、メモリを大量に消費するものは
その都度、適切に開放していくことで処理効率が良くなります。

プログラミング関連の調べ物で、サンプルソース等を見ることが
あるかと思います。この時サンプルで明示的に開放していたら、
それは明示的に開放したほうが良いもの、と思いましょう。
これだけでもステップアップになりますね。

結論から言うと、どちらでも良いです。
できれば生成から破棄まで考えて開発できると良いですね。

ガベージコレクションが実行されることで自動開放されますから、
一切.close()や.dispose()を使わなかったとしてもプログラムが
不正終了してしまう事はほとんどありません。

実際の開発では使わなくなったものを使わなくなった時点で
明示的に破棄することが多いです。正確には明示的に破棄するもの、
明示的に破棄しないもの、の2種類に分類しています。

例えばファイルを読み書きするストリーム...続きを読む

QC# ログイン画面からメイン画面への画面遷移について

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示することがある為)

---------------------------------------------------------------------
private void LoginButton_Click(object sender, EventArgs e)
{
   /* ログイン処理 */

   //ログイン成功時
   //メイン画面インスタンス生成
   MainForm mainForm = new MainForm();
   //ログイン画面インスタンスを代入
   mainForm.loginForm = this;
   //メイン画面表示
   mainForm.Show();
   //ログイン画面非表示
   this.Visible = false;
}
---------------------------------------------------------------------

また上記の方法だとメイン画面を閉じても、アプリケーションは終了しない為
メイン画面の閉じるボタンを押した場合に以下の処理を行っています。

---------------------------------------------------------------------
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
   //ログイン画面クローズ
   loginForm.Close();
}
---------------------------------------------------------------------

以上、宜しくお願いします。

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示す...続きを読む

Aベストアンサー

#2です。
最初にログイン画面のみを表示したいなら
メイン画面のForm_menu_Load(loadイベント処理)
の中で、ログイン画面をモーダル表示し、
NGならメイン画面のcloseのほうがよいかも知れません。

QDataGridViewで列、行、セルの選択

[環境]
Windows7 Professional
Visual Studio 2010 Professional

お世話になります。

上記環境下にて、DataGridViewを用いたプログラムを
作っております。

そこで、タイトルの件なのですが
DataGridViewの一番左(行ヘッダー)をクリックすると行選択、
一番上(列ヘッダー)をクリックすると列選択、
セルをクリックするとセル選択できるようにしたいと思っています。

しかし、DataGridViewのセル選択はSelectionModeという
プロパティで制御しているようでして、以下の5種類の選択方法しかないようです。


(1) CellSelect
1 つ以上の個別のセルを選択できます。

(2) FullRowSelect
行のヘッダーまたは行内のセルをクリックすることによって行全体が選択されます。

(3) FullColumnSelect
列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されます。

(4) RowHeaderSelect
行のヘッダー セルをクリックすることによって行が選択されます。個別のセルは、そのセルをクリックすることによって選択できます。

(5) ColumnHeaderSelect
列のヘッダー セルをクリックすることによって列が選択されます。個別のセルは、そのセルをクリックすることによって選択できます。


要するに、
(1)…セル選択のみ可能
(2)…行選択のみ可能(セルクリック時は行選択扱い)
(3)…列選択のみ可能(セルクリック時は列選択扱い)
(4)…行選択とセル選択のみ可能
(5)…列選択とセル選択のみ可能

ということなので、私の望む、
・行選択と列選択とセル選択が可能
という制御は無理なのでしょうか。

ご存知の方いましたら、ご教示の程お願い致します。

[環境]
Windows7 Professional
Visual Studio 2010 Professional

お世話になります。

上記環境下にて、DataGridViewを用いたプログラムを
作っております。

そこで、タイトルの件なのですが
DataGridViewの一番左(行ヘッダー)をクリックすると行選択、
一番上(列ヘッダー)をクリックすると列選択、
セルをクリックするとセル選択できるようにしたいと思っています。

しかし、DataGridViewのセル選択はSelectionModeという
プロパティで制御しているようでして、以下の5種類の選択方法しかないようです。

...続きを読む

Aベストアンサー

泥臭いけど。

1.複数選択を可能とする

2.セル選択モードはセル選択のみ

3.列ヘッダのクリックイベントに次の処理を加える
  ・選択セルをクリア
  ・対象列の全行分のセル選択モード設定する処理

4.行ヘッダのクリックイベントに次の処理を加える
  ・選択セルをクリア
  ・対象行の全列分のセル選択モード設定する処理


人気Q&Aランキング

おすすめ情報