First stages of a new logging system being put in place. Updated the group parsing engine for the Projections and Actual Sales tables, and removed the method. Fixed the issue where changes to groups didn't mark the record manipulation form as dirty.

This commit is contained in:
2017-09-18 11:36:23 -05:00
parent ac9f464cf3
commit de1ba4af10
12 changed files with 426 additions and 311 deletions
@@ -174,6 +174,8 @@
<DependentUpon>FrmReportSettings.cs</DependentUpon>
</Compile>
<Compile Include="Holiday.cs" />
<Compile Include="Log.cs" />
<Compile Include="Logger.cs" />
<Compile Include="NewModifyRecord.cs">
<SubType>Form</SubType>
</Compile>
+6 -1
View File
@@ -24,6 +24,11 @@ namespace AdvertsingProfitControl
{
InitializeComponent();
debugMainMenu.Visible = isDebug;
//var l = new Logger();
//Logger.WriteLog(DateTime.Now, "Main Form", "Test Critical", Level.Info);
//Logger.WriteLog(DateTime.Now, "Main Form", "Test verbose", Level.Verbose);
//Logger.WriteLog(DateTime.Now, "Form Main", "Test Debug Message", Level.Debug);
//l.ReadLogFile();
}
private void frmMain_Load(object sender, EventArgs e)
@@ -1120,7 +1125,7 @@ namespace AdvertsingProfitControl
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
}
}
}
+32 -17
View File
@@ -6,17 +6,31 @@ namespace AdvertsingProfitControl
{
internal class GlobalClasses
{
public static string LogFilePath = @"C:\Users\" + Environment.UserName + @"\AppData\Local\APC\";
public static string LogFilePath = Path.GetPathRoot(Environment.SystemDirectory) + @"Users\" + Environment.UserName + @"\AppData\Local\APC\";
public GlobalClasses()
{
//Check to make sure the directory exists and if it doesn't then create it.
if (Directory.Exists(Logger.LogFolderPath)) return;
try
{
Directory.CreateDirectory(Logger.LogFolderPath);
}
catch (IOException e)
{
MessageBox.Show(e.Message + Environment.NewLine + @"Advertising Profit Control will be forced to exit.", @"Failed to Create Log File Directory", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// Logs any error related to uncaught thread exceptions.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void LogError(object sender, System.Threading.ThreadExceptionEventArgs e)
{
if (!Directory.Exists(LogFilePath))
{
Directory.CreateDirectory(LogFilePath);
}
using (
var file =
new StreamWriter(@"C:\Users\" + Environment.UserName + @"\AppData\Local\APC\" + DateTime.Now.ToString("yy-MM-dd") + ".log", true))
new StreamWriter(Logger.LogFolderPath + DateTime.Now.ToString("yy-MM-dd") + ".log", true))
{
file.WriteLine(DateTime.Now + ": Unhandled Thread Exception:\n" + e.Exception.Message + Environment.NewLine);
MessageBox.Show(@"An unhandled thread exception has occurred. Advertising Profit Control will be forced to exit.",
@@ -25,29 +39,30 @@ namespace AdvertsingProfitControl
}
}
/// <summary>
/// Logs any unhandled exceptions that fires.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void LogError(object sender, UnhandledExceptionEventArgs e)
{
if (!Directory.Exists(LogFilePath))
{
Directory.CreateDirectory(LogFilePath);
}
using (var file = new StreamWriter(@"C:\Users\" + Environment.UserName + @"\AppData\Local\APC\" + DateTime.Now.ToString("yy-MM-dd") + ".log", true))
using (var file = new StreamWriter(Path.GetPathRoot(Environment.SystemDirectory) + @"Users\" + Environment.UserName + @"\AppData\Local\APC\" + DateTime.Now.ToString("yy-MM-dd") + ".log", true))
{
file.WriteLine(DateTime.Now + ": An unhandled exception occurred. \nException Object: " + e.ExceptionObject + Environment.NewLine);
MessageBox.Show(@"And unknown error has occurred. Advertising Profit Control will be forced to exit.",
MessageBox.Show(@"An unknown error has occurred. Advertising Profit Control will be forced to exit.",
@"Fatal Error");
Application.Exit();
}
}
/// <summary>
/// Used to log anything from information for the user to errors that don't cause a total application failure.
/// </summary>
/// <param name="message">The message to log for future use.</param>
public static void WriteToLog(string message)
{
if (!Directory.Exists(LogFilePath))
{
Directory.CreateDirectory(LogFilePath);
}
using (
var file = new StreamWriter(@"C:\Users\" + Environment.UserName + @"\AppData\Local\APC\Information.log", true))
var file = new StreamWriter(Path.GetPathRoot(Environment.SystemDirectory) + @"Users\" + Environment.UserName + @"\AppData\Local\APC\Information.log", true))
{
file.WriteLine(message);
}
+22
View File
@@ -0,0 +1,22 @@
using System;
namespace AdvertsingProfitControl
{
public class Log
{
public DateTime Date { get; set; }
public string Source { get; set; }
public string Message { get; set; }
public Level Level { get; set; }
}
public enum Level
{
Critical = 0,
Error = 1,
Warning = 2,
Info = 3,
Verbose = 4,
Debug = 5
}
}
+104
View File
@@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace AdvertsingProfitControl
{
internal class Logger
{
public static string LogFolderPath = Path.GetPathRoot(Environment.SystemDirectory) + @"Users\" + Environment.UserName + @"\AppData\Local\APC\";
/// <summary>
///
/// </summary>
/// <param name="date">Date and time of the event.</param>
/// <param name="source">The class or form name that generated the message.</param>
/// <param name="message">Log message.</param>
/// <param name="level">The log's level.</param>
/// <returns>A Log object to optionally store for later use by the calling code.</returns>
public static Log WriteLog(DateTime date, string source, string message, Level level)
{
var log = new Log
{
Date = date,
Level = level,
Message = message,
Source = source
};
//Check to see if the message level is a critical (0) error.
//If it is not then simply return the Log object to the calling code.
if (level == Level.Critical)
{
//If the message is critical then write it to disk and return the Log object created.
using (var file = new StreamWriter(LogFolderPath + DateTime.Now.ToString("yy-MM-dd") + ".log", true))
{
file.WriteLine(SerializeLog(log));
}
}
else
{
using (var file = new StreamWriter(LogFolderPath + "information.log", true))
{
file.WriteLine(SerializeLog(log));
}
}
return log;
}
/// <summary>
///
/// </summary>
/// <param name="logFilePath"></param>
/// <returns></returns>
public List<Log> ReadLogFile(string logFilePath = null)
{
var logs = new List<Log>();
//Check to see if a specific log file has been passed in.
if (logFilePath == null)
{
//If no specific log file has been passed then check to see if the
//default information log exists.
if (!File.Exists(LogFolderPath + "information.log"))
{
//If it doesn't then return an empty list.
return logs;
}
logFilePath = LogFolderPath + "information.log";
}
var myDeserializer = new XmlSerializer(typeof(List<Log>));
var myFileStream = new FileStream(logFilePath, FileMode.Open);
var stream = new StreamReader(myFileStream, Encoding.UTF8);
logs = (List<Log>)myDeserializer.Deserialize(stream);
myFileStream.Close();
return logs;
}
private static string SerializeLog(Log log)
{
var serializer = new XmlSerializer(typeof(Log));
string xml;
using (var sw = new StringWriter())
{
using (var writer = new XmlTextWriter(sw) {Formatting = Formatting.Indented})
{
writer.WriteStartElement("Log");
writer.WriteElementString("Date", log.Date.ToString("g"));
writer.WriteElementString("Level", log.Level.ToString());
writer.WriteElementString("Source", log.Source);
writer.WriteElementString("Message", log.Message);
writer.Close();
//serializer.Serialize(writer, log);
xml = sw.ToString();
}
}
return xml;
}
}
}
+37 -15
View File
@@ -520,11 +520,16 @@ namespace AdvertsingProfitControl
//Paint the rows to identify what group they belong to.
if (dataGridView != inventoryDataGridView)
{
TableGroupParser.PaintRowGroupsFromIndex(e.RowIndex, dataGridView);
//Paint the groups and check if the form should be marked as dirty.
if (TableGroupParser.PaintRowGroups(dataGridView, e.RowIndex))
{
_isFormDirty = true;
}
//TableGroupParser.PaintRowGroupsFromIndex(e.RowIndex, dataGridView);
}
else
{
TableGroupParser.PaintInventoryRowGroups(e.RowIndex, inventoryDataGridView, actualSalesDataGridView);
//TODO: Update Inventory table parser.
}
//Add in used Ad Items to the list.
if (userInput == string.Empty) return;
@@ -1014,17 +1019,25 @@ namespace AdvertsingProfitControl
return;
}
//Update the color coding of the other tables.
TableGroupParser.PaintRowGroupsFromIndex(e.RowIndex - 1, projectionsDataGridView);
//Paint the groups and check if the form should be marked as dirty.
if (TableGroupParser.PaintRowGroups(projectionsDataGridView, e.RowIndex, true))
{
_isFormDirty = true;
}
if (inventoryDataGridView.RowCount > e.RowIndex)
{
inventoryDataGridView.Rows[e.RowIndex].Cells[(int) TableGroupParser.InventoryTableColumns.AdItem].Value = userInput;
}
TableGroupParser.PaintInventoryRowGroups(e.RowIndex - 1, inventoryDataGridView, actualSalesDataGridView); //TODO:CHANGED .PaintRowGroupsFromIndex(e.RowIndex - 1, inventoryDataGridView);
TableGroupParser.PaintInventoryRowGroups(e.RowIndex - 1, inventoryDataGridView, projectionsDataGridView); //TODO:CHANGED .PaintRowGroupsFromIndex(e.RowIndex - 1, inventoryDataGridView);
if (actualSalesDataGridView.RowCount > e.RowIndex)
{
actualSalesDataGridView.Rows[e.RowIndex].Cells[(int) TableGroupParser.SalesTableColumns.AdItem].Value = userInput;
}
TableGroupParser.PaintRowGroupsFromIndex(e.RowIndex - 1, actualSalesDataGridView);
//Paint the groups and check if the form should be marked as dirty.
if (TableGroupParser.PaintRowGroups(actualSalesDataGridView, e.RowIndex, true))
{
_isFormDirty = true;
}
}
else
{
@@ -1392,7 +1405,7 @@ namespace AdvertsingProfitControl
projectionsDataGridView.RefreshEdit();
inventoryDataGridView.RefreshEdit();
actualSalesDataGridView.RefreshEdit();
TableGroupParser.PaintRowGroups(dataGridView);
TableGroupParser.PaintRowGroups(dataGridView, 0);
}
#endregion
@@ -1532,17 +1545,25 @@ namespace AdvertsingProfitControl
return;
}
//Update the color coding of the other tables.
TableGroupParser.PaintRowGroupsFromIndex(e.RowIndex - 1, projectionsDataGridView);
//Paint the groups and check if the form should be marked as dirty.
if (TableGroupParser.PaintRowGroups(projectionsDataGridView, e.RowIndex, true))
{
_isFormDirty = true;
}
if (inventoryDataGridView.RowCount > e.RowIndex)
{
inventoryDataGridView.Rows[e.RowIndex].Cells[(int)TableGroupParser.InventoryTableColumns.AdItem].Value = userInput;
}
TableGroupParser.PaintInventoryRowGroups(e.RowIndex - 1, inventoryDataGridView, actualSalesDataGridView); //TODO:CHANGE .PaintRowGroupsFromIndex(e.RowIndex - 1, inventoryDataGridView);
TableGroupParser.PaintInventoryRowGroups(e.RowIndex - 1, inventoryDataGridView, projectionsDataGridView); //TODO:CHANGE .PaintRowGroupsFromIndex(e.RowIndex - 1, inventoryDataGridView);
if (actualSalesDataGridView.RowCount > e.RowIndex)
{
actualSalesDataGridView.Rows[e.RowIndex].Cells[(int)TableGroupParser.SalesTableColumns.AdItem].Value = userInput;
}
TableGroupParser.PaintRowGroupsFromIndex(e.RowIndex - 1, actualSalesDataGridView);
//Paint the groups and check if the form should be marked as dirty.
if (TableGroupParser.PaintRowGroups(actualSalesDataGridView, e.RowIndex, true))
{
_isFormDirty = true;
}
}
else
{
@@ -1863,7 +1884,7 @@ out double beginningBinCount, out string newBinText))
projectionsDataGridView.RefreshEdit();
inventoryDataGridView.RefreshEdit();
actualSalesDataGridView.RefreshEdit();
TableGroupParser.PaintInventoryRowGroups(0, inventoryDataGridView, actualSalesDataGridView); //TODO: CHANEG.PaintRowGroups(dataGridView);
TableGroupParser.PaintInventoryRowGroups(0, inventoryDataGridView, projectionsDataGridView); //TODO: CHANEG.PaintRowGroups(dataGridView);
}
#endregion
@@ -2079,7 +2100,7 @@ out double beginningBinCount, out string newBinText))
projectionsDataGridView.RefreshEdit();
inventoryDataGridView.RefreshEdit();
actualSalesDataGridView.RefreshEdit();
TableGroupParser.PaintRowGroups(dataGridView);
TableGroupParser.PaintRowGroups(dataGridView, 0);
}
#endregion
@@ -2132,7 +2153,7 @@ out double beginningBinCount, out string newBinText))
Name = name,
HeaderText = TextFormat.AddSpacesToSentence(name, false),
ValueType = typeof(bool),
Visible = false,
//Visible = false,
SortMode = DataGridViewColumnSortMode.NotSortable
};
projectionsDataGridView.Columns.Add(column);
@@ -3282,9 +3303,10 @@ out double beginningBinCount, out string newBinText))
try
{
//Force update all the data tables.
//TableGroupParser.PaintRowGroupsFromIndex(0, projectionsDataGridView);
//TableGroupParser.PaintRowGroupsFromIndex(0, inventoryDataGridView);
//TableGroupParser.PaintRowGroupsFromIndex(0, actualSalesDataGridView);
//Paint the groups and check if the form should be marked as dirty.
TableGroupParser.PaintRowGroups(projectionsDataGridView, 0, true);
TableGroupParser.PaintRowGroups(inventoryDataGridView, 0, true);
TableGroupParser.PaintRowGroups(actualSalesDataGridView, 0, true);
using (var scope = new TransactionScope())
{
SaveProjections(date);
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.1.2.0")]
[assembly: AssemblyFileVersion("3.1.2.0")]
[assembly: AssemblyVersion("3.2.0.0")]
[assembly: AssemblyFileVersion("3.2.0.0")]
@@ -1,23 +1,49 @@
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.csprojResolveAssemblyReference.cache
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.DebugDatabaseConverter.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmAddRecord.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmMain.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmLogConsole.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmRegisterAdSpecial.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.NewModifyRecord.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.Properties.Resources.resources
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.csproj.GenerateResource.Cache
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\APCDatabase.accdb
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.exe.config
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.exe
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.pdb
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.dll
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.SqlServer.dll
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.dll
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.WinForms.dll
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.xml
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.SqlServer.xml
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.pdb
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.WinForms.pdb
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.exe
C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.pdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\APCDatabase.accdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\libeay32.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\libgcc_s_dw2-1.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\mingwm10.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\ssleay32.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\wkhtmltox0.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.exe.config
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.exe
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.pdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertisingProfitControlData.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Common.Logging.Core.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Common.Logging.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\DataTableParsingEngine.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.SqlServer.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Pechkin.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Spire.License.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Spire.Pdf.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Microsoft.mshtml.dll
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertisingProfitControlData.pdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertisingProfitControlData.dll.config
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\DataTableParsingEngine.pdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\DataTableParsingEngine.dll.config
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Common.Logging.pdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Common.Logging.xml
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Common.Logging.Core.pdb
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Common.Logging.Core.xml
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.xml
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.SqlServer.xml
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Spire.License.xml
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\Spire.Pdf.xml
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.csprojResolveAssemblyReference.cache
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.AboutBox.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.DatabaseRecovery.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmAddRecord.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmChangeShrink.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmLogFileViewer.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmLoginForm.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmMain.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmLogConsole.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmManageAdItems.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmManageSuppliers.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmRegisterAdSpecial.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmReportSettings.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.NewModifyRecord.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.Properties.Resources.resources
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.csproj.GenerateResource.Cache
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.exe
C:\Users\Crypto\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.pdb