星期五, 3月 30, 2018

[VS] 未正確載入套件

在 VS 2017 上安裝 Xamarin 後,開啟 VS 跳出的錯誤訊息,在這篇 建立 Xamarin.Forms 新專案,發生 未正確載入套件 'XamarinAndroidPackage' 錯誤 找到解法,不過也發現這問題跟 Xamarin 沒有絕對關係就是

[VS] 未正確載入套件

刪除該路徑C:\Users\%username%\AppData\Local\Microsoft\VisualStudio\15.0\ComponentModelCache 下所有檔案並重啟 VS 就行啦

[VS] 未正確載入套件-2

星期五, 3月 02, 2018

[C#] MDI 子視窗最大化

Line 群上問題
MDI內的子視窗若開啟一個以上,如果其中一個子使窗放大或縮小 (WindowState=Maximized or WindowState=Minimized),其他的子視窗也會一併的被放大或縮小,是否有方式可以讓其他子視窗不要受到影響可以維持原有的狀態
實務上子視窗都是使用 Max,剛好有興趣來了解,還真的有這樣的特性,當 MDI 父視窗內的子視窗為 Max 時,把子視窗關閉,下一個Active 子視窗也會被 Max

MDI Form 內找不到屬性可以直接設定來取消這樣的情況,所以是透過 MdiChildActivate Event 搭配 ActiveMdiChild Property 把 WindowsState 設回去
namespace MDIWindowState
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void BtnForm_Click(object sender, EventArgs e)
        {
            FormWindowState WindowStateSetting = FormWindowState.Normal;
            for (int i = 1; i <= 5; i++)
            {
                Form f = new Form
                {
                    MdiParent = this,
                    Text = $"第{i}個 Form",
                    WindowState = WindowStateSetting,
                    // 把 WindowState 初始化設定值存在 Tag 內
                    Tag = WindowStateSetting
                };
                f.Show();
            }
        }

        private void Form1_MdiChildActivate(object sender, EventArgs e)
        {
            Form f = (Form)this.ActiveMdiChild;
            if (f == null)
            {
                return;
            }

            f.WindowState = (FormWindowState)f.Tag;
        }
    }
}

按下 Button 產生 5 個 Form 來觀察

[C#] MDI 子視窗最大化-1

把 Form5 變成 Max 後,父視窗的 Text 屬性,會有目前 Active 子視窗的 Text 內容

[C#] MDI 子視窗最大化-2

把 Form 5 關閉,Form4 不會是 Max,而是建立時的預設值 Normal

[C#] MDI 子視窗最大化-3