Zmiana wartości innego formularza z oddzielnego formularza (rozwiązanie nie działa)
narody. Dzisiaj próbuję zmienić obraz tła panelu z osobnego formularza. Spojrzałem na kilka S.O. pytania i wszyscy mówili, aby stworzyć nową zmienną formularza i zmienić jej wartości. Zrobiłem to, a ja nie dostaję żadnych błędów, ale nie mam też żadnych zmian w tle. Oto co mam na myśli: (to jest główny formularz, który próbuję zmienić)
public static void changeGridSize(int newSize)
{
Form_Main frm = new Form_Main();
switch (newSize)
{
case 16:
frm.panelBoard.BackgroundImage = Properties.Resources.grid_16;
break;
case 32:
frm.panelBoard.BackgroundImage = Properties.Resources.grid_32;
break;
case 64:
frm.panelBoard.BackgroundImage = Properties.Resources.grid_64;
break;
case 128:
frm.panelBoard.BackgroundImage = Properties.Resources.grid_128;
break;
}
}
A oto inna forma:
int newSize = 16;
Form_Main.changeGridSize(newSize);
To najprawdopodobniej coś głupiego, ale na tym nie mam ochoty.
EDYTOWAĆ
Tutaj pliki
Główna forma
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LWJSGL_Level_Editor
{
public partial class Form_Main : Form
{
public static int gridSize = 32;
public Image pbg
{
get { return this.panelBoard.BackgroundImage; }
set { this.panelBoard.BackgroundImage = value; }
}
public String curTile = "";
public Form_Main()
{
InitializeComponent();
}
private void Form_Main_Load(object sender, EventArgs e)
{
}
private void buttonTile_Click(object sender, EventArgs e)
{
//show file dialog
openFileDialogTile.ShowDialog();
}
private void openFileDialogTile_FileOk(object sender, CancelEventArgs e)
{
curTile = openFileDialogTile.FileName;
Msg(curTile);
}
public void Msg(String str)
{
MessageBox.Show(str);
}
private void buttonSettings_Click(object sender, EventArgs e)
{
Form_Settings fs = new Form_Settings();
fs.ShowDialog();
}
public void changeGridSize(int newSize)
{
switch (newSize)
{
case 16:
this.panelBoard.BackgroundImage = Properties.Resources.grid_16;
break;
case 32:
this.panelBoard.BackgroundImage = Properties.Resources.grid_32;
break;
case 64:
this.panelBoard.BackgroundImage = Properties.Resources.grid_64;
break;
case 128:
this.panelBoard.BackgroundImage = Properties.Resources.grid_16;
break;
}
}
}
}
Inna forma
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LWJSGL_Level_Editor
{
public partial class Form_Settings : Form
{
int newSize;
public Form_Settings()
{
InitializeComponent();
}
private void buttonSaveSettings_Click(object sender, EventArgs e)
{
//save settings
Form_Main.gridSize = newSize;
Form_Main frm = new Form_Main();
frm.changeGridSize(newSize);
this.Close();
}
private void radioButtonGridSize16_CheckedChanged(object sender, EventArgs e)
{
newSize = 16;
}
private void radioButtonGridSize32_CheckedChanged(object sender, EventArgs e)
{
newSize = 32;
}
private void radioButtonGridSize64_CheckedChanged(object sender, EventArgs e)
{
newSize = 64;
}
private void radioButtonGridSize128_CheckedChanged(object sender, EventArgs e)
{
newSize = 128;
}
private void Form_Settings_Load(object sender, EventArgs e)
{
switch (Form_Main.gridSize)
{
case 16:
this.radioButtonGridSize16.Checked = true;
break;
case 32:
this.radioButtonGridSize32.Checked = true;
break;
case 64:
this.radioButtonGridSize64.Checked = true;
break;
case 128:
this.radioButtonGridSize128.Checked = true;
break;
}
}
}
}
Metoda rozszerzenia musi być zdefiniowana w nie-generycznym błędzie klasy statycznej występującym w linii 13 formularza głównego.