- PR -

印刷設定ダイアログボックスの余白がくるくる変わるのは何故ですか?

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-10 18:01
次のコードで件名の現象が起こります。何故ですか?

コード:

    public class Form1 : System.Windows.Forms.Form
    {
        private くるくる変わる くるくる = new くるくる変わる();
        private System.Windows.Forms.Button button1 = new System.Windows.Forms.Button();

        public Form1() {
            this.SuspendLayout();
            this.button1.Text = "ここをクリック";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            this.Controls.Add(this.button1);
            this.ResumeLayout(false);
        }

        private void button1_Click(object sender, System.EventArgs e) {
            this.くるくる.頁設定();
        }
    }

    public class くるくる変わる
    {
        //コンストラクタ
        private System.Drawing.Printing.PrintDocument doc;
        private System.Windows.Forms.PageSetupDialog  dlg;

        public くるくる変わる() {
            this.doc = new System.Drawing.Printing.PrintDocument();
            this.dlg = new System.Windows.Forms.PageSetupDialog();
            this.dlg.Document = this.doc;
        }

        //頁設定メソッド
        public void 頁設定() {
            this.dlg.PageSettings = this.doc.DefaultPageSettings;
            if (this.dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) {
                return;
            }
            this.doc.DefaultPageSettings = this.dlg.PageSettings;
        }
    }


頁設定ダイアログボックスでキャンセルすると何も変わりません。
OKボタンを押す度に、余白値が変わります。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-10 18:12
「くるくる変わる」というのは正確に言うとどういう現象ですか?
「変更したのに元に戻る」
「変更したつもりがないのに変更される」

_________________
囚人のジレンマな日々
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-10 18:22
囚人さん、こんばんは。お疲れ様です。

引用:

囚人さんの書き込み (2006-03-10 18:12) より:
「くるくる変わる」というのは正確に言うとどういう現象ですか?
「変更したのに元に戻る」
「変更したつもりがないのに変更される」



「変更したつもりがないのに変更される」です。
スレ元のコードで再現できるのですが、スレ元のコードでは、一点の曇りも無く、
何の処理もしておりません。

コード:


public void 頁設定() {
this.dlg.PageSettings = this.doc.DefaultPageSettings;
if (this.dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) {
return;
}
this.doc.DefaultPageSettings = this.dlg.PageSettings;
// ↑
// この人は、値を貰って次回渡しているだけなのに余白を変えてしまう。
}


もしや、僕の環境だけとか・・・
ちなみに、
WinXP Pro Ver2002 SP2
VC#2005
ですが。


[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-10 18:29 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 18:24
10 -> 3.9 -> 1.5 -> とかに変わるってやつですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-10 18:30
引用:

じゃんぬねっとさんの書き込み (2006-03-10 18:24) より:
10 -> 3.9 -> 1.5 -> とかに変わるってやつですか?





そうです。
同じ値です。最後は 0 になります。


[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-10 18:30 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 18:37
引用:

R・田中一郎さんの書き込み (2006-03-10 18:22) より:

コード:

        public void 頁設定() {
            this.dlg.PageSettings = this.doc.DefaultPageSettings;
            if (this.dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) {
                return;
            }
            this.doc.DefaultPageSettings = this.dlg.PageSettings;
            // ↑
            // この人は、値を貰って次回渡しているだけなのに余白を変えてしまう。
        }




「渡している」っていうか... "参照" を初めに渡しているので無意味ですよ...
既に双方ともに "同じもの" を指し示しています。
まあ、Clone にしたとしても、この現象は起きると思います。

コード:

    this.dlg.ShowDialog();


だけでもきっと再現するでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-10 19:04
引用:

じゃんぬねっとさんの書き込み (2006-03-10 18:37) より:

「渡している」っていうか... "参照" を初めに渡しているので無意味ですよ...
既に双方ともに "同じもの" を指し示しています。
まあ、Clone にしたとしても、この現象は起きると思います。



納得です。言われてみれば、確かに意味は無いですね。
どこからか持ってきたサンプルをコピーしたので何も考えていませんでした。

コード:

public class Form1 : System.Windows.Forms.Form
{
private くるくる変わる くるくる = new くるくる変わる();
private System.Windows.Forms.Button button1 = new System.Windows.Forms.Button();

public Form1() {
this.SuspendLayout();
this.button1.Text = "ここをクリック";
this.button1.Click += new System.EventHandler(this.button1_Click);
this.Controls.Add(this.button1);
this.ResumeLayout(false);
}

private void button1_Click(object sender, System.EventArgs e) {
this.くるくる.頁設定();
}
}

public class くるくる変わる
{
//コンストラクタ
private System.Drawing.Printing.PrintDocument doc;
private System.Windows.Forms.PageSetupDialog dlg;

public くるくる変わる() {
this.doc = new System.Drawing.Printing.PrintDocument();
this.dlg = new System.Windows.Forms.PageSetupDialog();
this.dlg.Document = this.doc;
this.dlg.PageSettings = this.doc.DefaultPageSettings;
}

//頁設定メソッド
public void 頁設定() {
this.dlg.ShowDialog();
}
}


しかし、どうして、余白はくるくる変わってしまうんでしょう。
結局、外側で値を管理するしかないようですね。


[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-10 19:08 ]
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-03-10 19:13

PageSetupDialog 余白 - Google 検索

スキルアップ/キャリアアップ(JOB@IT)